注意:未定义的索引

时间:2009-06-21 03:09:46

标签: php sql

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

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

你不能在一个变量上使用两个函数吗?正如你所看到的那样,我检查它是否有它但是它仍然给了我:

注意:未定义的索引:第7行的C:\ wamp \ www \ bfhq \ thread.php中的id

4 个答案:

答案 0 :(得分:5)

试试这个:

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

如果设置$_GET['id'],则将$thread_id设置为intval($_GET['id']),否则设置为0“

答案 1 :(得分:3)

isset()返回一个布尔值:TRUE / FALSE。如果要确定是否设置了$ _GET [“id”],则需要在IF语句中或通过三元运算符执行此操作。

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

答案 2 :(得分:0)

此错误取决于php.ini中设置的错误/警告级别。使用它的好习惯......

array_key_exists('id', $_GET);

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

另外:确保在执行此操作之前清除$ _GET中的输入。你将自己打开mysql注入。

答案 3 :(得分:0)

只需使用error_reporting(4);即可删除所有通知。另一种可能是原始但有效的方法来抑制通知并清理变量可能是:

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

如果你做了很多这些事情,你可能想看一下filter_var()并将所有功能放到一个单独的函数中(例如.get_int(“id”))。