获取while语句中变量的值-PHP

获取while语句中变量的值-PHP,php,while-loop,Php,While Loop,我无法在while循环中获取变量的值。 这是我的密码: function checkLogin($username, $password) { global $dbh; global $queryPassword; $query2 = $dbh->query("SELECT * FROM employee_accounts WHERE username='$username' AND `password`='$pas

我无法在while循环中获取变量的值。 这是我的密码:

function checkLogin($username, $password) {
        global $dbh;            
        global $queryPassword;

        $query2 = $dbh->query("SELECT * FROM employee_accounts WHERE username='$username' AND `password`='$password'; ");
        $query2 ->setFetchMode(PDO::FETCH_ASSOC);

        while($row=$query2->fetch()) {
            $queryUsername = $row['username'];
            $queryPassword = $row['password'];
        }

        if(password_verify($password, $queryPassword)) {

            echo '<script>alert("Success ");
            windows: location="../../index.php";</script>';
        } else {
            echo '<script>alert("fail ");
            windows: location="../../index.php?v='.$queryPassword.'";</script>';
        }


    }
函数checkLogin($username,$password){
全球$胸径;
全局$queryPassword;
$query2=$dbh->query(“从用户名='$username'和`password`='$password';的员工_帐户中选择*”;
$query2->setFetchMode(PDO::FETCH_ASSOC);
而($row=$query2->fetch()){
$queryUsername=$row['username'];
$queryPassword=$row['password'];
}
if(密码\验证($password,$queryPassword)){
回声警报(“成功”);
windows:location=“../../index.php”;
}否则{
回声警报(“失败”);
windows:location=“../../index.php?v=”.$queryPassword.“;”;
}
}

当我将$queryPassword放入url时,该值为空。您的建议和解决方案将非常有用。谢谢。

不要使用
global
作为密码!这可能会导致维护方面的问题。将其更改为其他类型,如private或protected

并将您的查询更改为更安全的查询

 $stmt = $dbh->prepare("SELECT * FROM employee_accounts WHERE username= :user AND `password`= :pass; ");
 $stmt->execute(array(':user'=> $username ,':pass'=> $password ));
 $query2 ->setFetchMode(PDO::FETCH_ASSOC);

这样就可以转义用户输入。

。打开
后立即在文件顶部添加错误报告存储的密码是散列还是纯文本?很难说,因为你在用它做什么时很混乱。存储的密码是散列的@developerjki同意@JayBlanchard;除了需要准备语句以避免SQL注入之外,您似乎还在响应上调用JavaScript eval(),这也很危险。回答此问题是不负责任的,除非您重新设计安全性并重申。^同时尝试在参数中使用密码重定向,如
?v=password
,这是一个坏主意。您可能希望使用类似于
?error=true
的参数来告知存在身份验证错误,但肯定不要将密码放在那里。仍然只有部分答案。密码是以散列方式存储的,但这将像以纯文本形式存储一样进行查询。在执行此查询之前,您需要对密码运行
password\u hash()
。此外,这并不能解决具有
unique
约束的表中用户名应如何唯一的问题,这意味着不需要使用
while
循环,而是使用
if
语句。而且它不涉及在应该在PHP中进行重定向时尝试在Javascript中重定向的问题。是的,我忽略了所有这些问题。请根据您的观点适当修改我的答案。仍然不起作用。我只想在while循环中获取变量$queryPassword的值。