任何人都可以在这行PHP代码中找到未定义的索引吗?

时间:2011-04-28 04:58:46

标签: php mysql

$username = $_POST["user_name"];
$password = $_POST["user_password"];
$type = $_POST["user_type"];
$query = "SELECT * FROM users WHERE user_name='$username' AND user_password='$password' AND 
 user_type='$type'";

运行时,我收到一条错误消息,指出前三行代码有未定义的索引。有人可以帮我弄清楚这里出了什么问题,以及如何解决它?

3 个答案:

答案 0 :(得分:1)

if(isset($_POST["username"]) && isset($_POST["user_password"]) && isset($_POST["user_type"])){
   $username = $_POST["user_name"];  
   $password = $_POST["user_password"];
   $type = $_POST["user_type"];
   $query = "SELECT * FROM users WHERE user_name='$username' AND user_password='$password' AND 
 user_type='$type'";
}
else{
// required value is missing
}

使用$ _POST时,必须检查所需的值是否在$ _POST中。所以你应该使用isset()

答案 1 :(得分:0)

好吧,我们看不到你的$ _POST数组的内容,但是你的表单可能没有正确发布,或者你输错了你的输入字段,因为“user_name”,“user_password”和“user_type”索引是根据错误,$ _POST数组不存在。

您可以发布表单代码吗?或者回显$ _POST并告诉我们输出包含什么?

答案 2 :(得分:0)

更改您的代码,以便检查它是否存在

$username = iseet($_POST["user_name"]) ? $_POST["user_name"] : '';
$password = isset($_POST["user_password"]) ? $_POST["user_password"] : '';
$type = isset($_POST["user_type"]) ? $_POST["user_type"] : ;

//NOTE - You have an sql injection vulnerability in the below code
$query = "SELECT * FROM users WHERE user_name='$username' AND user_password='$password' AND 
 user_type='$type'";

始终检查您的指数是否已设定。

另外,不要像这样直接将数组值插入到SQL中。至少使用mysql_real_escape_string或考虑使用MySQL PDO

http://php.net/manual/en/function.mysql-real-escape-string.php