Uyarı: Undefined index

4 Cevap php
$thread_id = (isset($_GET['id']));
$thread_id = intval($_GET['id']);

$q = mysql_query("SELECT * FROM threads WHERE id = $thread_id");

Eğer bir değişken üzerinde iki işlevleri kullanamazsınız? Gördüğünüz gibi kendi kümesi olmadığını kontrol edin ama yine de bana verir:

Notice: Undefined index: id in C:\wamp\www\bfhq\thread.php on line 7

4 Cevap

Bu deneyin:

$thread_id = isset($_GET['id']) ? intval($_GET['id']) : 0;

"$_GET['id'] ayarlı ise, 0'a set, $thread_id intval($_GET['id']) ayarlandığında, değilse" olarak okur

DOĞRU / YANLIŞ: isset (), bir Boole değeri döndürür. Eğer $ _GET ["id"] ayarlanmış olup olmadığını belirlemek istiyorsanız, bir IF-Beyanı, ya da bir üçlü operatör vasıtasıyla bunu yapmak gerekir.

if (isset($_GET["id"])) {
  $thread_id = $_GET["id"]; // Bad idea taking values in from $_GET directly
} else {
  die("Thread id not set");
}

Bu hata php.ini içinde hata / uyarı düzeyine bağlıdır. Kullanmak Onun iyi bir uygulama ...

array_key_exists('id', $_GET);

http://us2.php.net/manual/en/function.array-key-exists.php

ayrıca: Bunu önce $ _GET o girdiyi emin olun. Sen mysql enjeksiyon kendinizi açık gidiyoruz.

Sadece kullanarak tüm bildirimleri kurtulabilirsiniz error_reporting(4);. Başka, belki ham ama çalışma, haber bastırmak ve değişken sterilize yöntem olabilir:

$thread_id = (int)@$_GET["id"];

Bu bir çok şey yaparsanız, belki filter_var() bir göz atın ve ayrı bir işlev (örneğin get_int ("id")) içine tüm işlevselliğini koymak istiyorum.