PHP / MySQL:如何将所选值与通过$ _POST

时间:2015-06-23 19:07:03

标签: mysql sql select passwords

我是MySQL的新手,有一个简单的问题:

我正在构建一个用户需要登录网站的页面,当他们登录时我想检查:

  1. 如果他们的电子邮件已经在数据库和
  2. 如果输入的密码与注册的密码匹配。
  3. 到目前为止,我有以下内容应该涵盖第一部分,但我不知道如何引用我从db中选择的密码,以便我可以设置if / else然后进行比较即可。

    有人可以帮我这个吗? 此外,如果有更好的方法来解决这个问题,请告诉我。

    我的SQL:

    $conn = new mysqli($dbServer, $dbUser, $dbPass, $dbName);
    $conn->set_charset("utf8");
    if($conn->connect_error){
        die("Connection failed: " . $conn->connect_error);
    }
    $email = $_POST["email"];
    $pw = password_hash($_POST["pw"], PASSWORD_BCRYPT); 
    
    $stmt = $conn->prepare("SELECT email, pw FROM Users WHERE email = ?");
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $result = $stmt->get_result();
    if(mysqli_num_rows($result) = 0){
        echo "Email has not been registered yet";
    }else{
        if(
            // compare pw with $pw
        }
    }
    $conn->close();
    

    非常感谢提前。

2 个答案:

答案 0 :(得分:1)

试试这个:

$conn = new mysqli($dbServer, $dbUser, $dbPass, $dbName);
$conn->set_charset("utf8");
if($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT); 

$stmt = $conn->prepare("SELECT email, pw FROM Users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
if(mysqli_num_rows($result) = 0){
echo "Email has not been registered yet";
}else{
if($pw===$result['pw']){
   //password matched
  }
else { //password wrong
}

}
}
$conn->close();

答案 1 :(得分:1)

mysqli_result类实例中的$result var,请使用它的方法fetch_assoc()(如Michael Berkowski所说)通过键获取关联数组'电子邮件& #39;根据你的sql,并且' pw'然后,您可以使用password_verify($pass, $hash) -> bool轻松检查您的密码是否与数据库中的哈希相匹配,正如其他答案已经说过的那样。