PHP中未定义的变量错误

Kev*_*vin 3 php mysql

Notice: Undefined variable: username in C:\xampp\htdocs\test_class.php
        on line 20
Notice: Undefined variable: password in C:\xampp\htdocs\test_class.php
        on line 20
Run Code Online (Sandbox Code Playgroud)

当我使用这段代码检查我的数据库的用户名和密码时,我收到上述错误.

<?php
    class test_class {

        public function __construct() { 

        }
        public function doLogin() {

            include("connection.php");

            if (isset($_POST['username']))
                {
                $username= $_POST['username'];
                }
                if (isset($_POST['password']))
                {
                $password= $_POST['password'];
                } 

            $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
            $result = mysql_fetch_array(mysql_query($query));
            if(!$result)

            {

            return 'assa';

            }else{

            return 'assa112121212';

            }

                }
        }
?>
Run Code Online (Sandbox Code Playgroud)

sou*_*rge 11

这很可能意味着您的表单尚未提交.您应该确保只使用变量(如果存在).此外,如果没有验证,您永远不应该使用用户的输入.请尝试以下操作,例如:

if (isset($_POST['username']) && isset($_POST['password']))
{
    $username= $_POST['username'];
    $password= $_POST['password'];
    $query = "SELECT *
                      FROM users
                      WHERE username = '".mysql_real_escape_string($username)."'
                      AND password = '".mysql_real_escape_string($password)."'";
    $result = mysql_fetch_array(mysql_query($query));
    # ...
}
else
{
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)


Aid*_*ell 10

这只是一个通知,即变量在查询中被引用而不在范围内.

在doLogin()的顶部定义$ username和$ password并将它们初始化为Null或类似.然后再检查一下.

无论是否设置了$ username和$ password,您似乎也在执行查询.你应该做更多的事情:

if( isset($_POST['username']) && isset($_POST['password'])){
     //create vars, do query
}else{
     // Nothing to process
}
Run Code Online (Sandbox Code Playgroud)

这两个错误都发生在第20行,我假设是查询字符串插值.这里的问题是:

  1. 不一致的范围/引用(无论如何都在PHP中很糟糕)
  2. 你的ifs需要更有序.这个错误很小,但是如果你处理这样的变量,那么更糟糕的会在以后咬你的屁股:)

另外:在将它们像热煤一样转储到SQL中之前,先将变量转义为 PDO(我会选择)或mysql_escape_string()

祝你好运!