PHP中未定义的变量错误

PHP中未定义的变量错误,php,mysql,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 这只是一个通知,变量在查询中被引用,而不在范围内 在doLogin顶部定

当我使用这段代码在数据库中检查我的用户名和密码时,会出现上述错误

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
这只是一个通知,变量在查询中被引用,而不在范围内

在doLogin顶部定义$username和$password,并将它们初始化为Null或类似值。然后稍后再检查它们

无论设置了$username和$password,您似乎都在执行查询。你应该做一些更像:

<?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';

            }

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

范围/引用不一致,这在PHP中很糟糕 你的国际单项体育联合会需要更有序一点。这个错误很小,但如果您处理如下变量,更糟糕的错误会在以后对您造成伤害: 另外:在将变量像热煤一样倾倒到SQL中之前,请先对其进行转义 请参阅我将选择的PDO或mysql\u escape\u字符串


祝你好运

您将要使用错误报告全部^E\u通知;从Sam链接到的页面。通知实际上是不必要的,就像在gcc中使用WALL和WERROR标志一样。

这意味着,很可能您的表单尚未提交。您应该确保只使用存在的变量。此外,您应该使用来自用户的输入而不进行验证。例如,请尝试以下操作:

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

此外,您还应该使用$username和$password来避免攻击。

您还需要检查数据库是否提供了用户名和密码

也许是这样的

<?php
class test_class {

    public function doLogin() {
        include("connection.php");

        if (isset($_POST['username']) && isset($_POST['password']) {
            $username = $_POST['username'];
            $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';
            }
        } else {
            echo "Missing parameter 'username' and/or 'password'";
        }
    }
}

在将输入放在数据库附近之前,还应先转义输入,方法是使用或

再使用一个快乐类和无bug:

public function doLogin() {

    include("connection.php");
    $username = (isset($_POST['username'])) ? $_POST['username'] : NULL ;
    $password = (isset($_POST['password'])) ? $_POST['password'] : NULL ;
        if ( $username !== NULL && $password !== NULL )  {
                    $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
                    $result = mysql_fetch_array(mysql_query($query));
            /* auth code here */

        } else {
        return false; // no u/p provided    
    }

    }

我们叫他小鲍比;我认为这些返回值太棒了!永远不要从用户名=“$username”和密码=“$password”的用户中选择*这样的操作!Macbirdie指出,这段代码受到SQL注入攻击。一旦数据库中有用户/密码,请尝试使用用户名“或1=1”登录-通过在sql查询中使用绑定参数而不是附加strings.wrt sql injection来修复此问题。此脚本可能会有所帮助:他修复了此问题,并注意到了一些额外的安全问题。暗杀这篇文章的人应该被禁止,因为他对这篇文章有如此愚蠢的看法。@Mike:在对密码进行哈希运算时使用了salt,这在问题中没有提到。不过答案不错+1@Sam152,谢谢:另外,我现在有1234分,这很酷。-墙上和E_通知是非常必要的。当你是一个白痴时,他们会警告你,这可能会导致一个小时的热调试:对于我来说,为了一点额外的输出,这是值得的。但在这种情况下,E_NOTICE完全停止了一些本来不应该工作的东西。至少有一个程序有墙抱怨。
public function doLogin() {

    include("connection.php");
    $username = (isset($_POST['username'])) ? $_POST['username'] : NULL ;
    $password = (isset($_POST['password'])) ? $_POST['password'] : NULL ;
        if ( $username !== NULL && $password !== NULL )  {
                    $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
                    $result = mysql_fetch_array(mysql_query($query));
            /* auth code here */

        } else {
        return false; // no u/p provided    
    }

    }
<?php
class test_class
{
    private $post = array();
    public function __construct ()
    {
    }
    public function doLogin ()
    {
        $this->post = $_POST;
        include ("connection.php");
        if ($this->post['username'] && $this->post['password']) {
            $username = $this->post['username'];
            $password = $this->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';
            }
        }
    }
}
?>