PHP / MySQL:如何将所选值与通过 $_POST 收到的输入进行比较
PHP / MySQL: How to compare selected value with input received via $_POST
我是 MySQL 的新手,有一个简单的问题:
我正在构建一个页面,用户需要在其中登录网站,当他们登录时我想检查:
- 如果他们的电子邮件已经在数据库中并且
- 如果他们输入的密码与注册的密码一致。
到目前为止,我有以下内容应该涵盖第一部分,但 我不确定如何参考我从数据库中选择的密码,以便我可以设置 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();
非常感谢。
试试这个:
$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();
你的 $result
变量在 mysqli_result class 的实例中,所以使用它的方法 fetch_assoc()
(正如 Michael Berkowski 所说)来获取带有键 [=16 的关联数组=] 和 'pw',根据您的 sql。然后,您可以使用 password_verify($pass, $hash) -> bool
轻松检查您的密码是否与数据库中的哈希匹配,正如其他答案已经说过的那样。
我是 MySQL 的新手,有一个简单的问题:
我正在构建一个页面,用户需要在其中登录网站,当他们登录时我想检查:
- 如果他们的电子邮件已经在数据库中并且
- 如果他们输入的密码与注册的密码一致。
到目前为止,我有以下内容应该涵盖第一部分,但 我不确定如何参考我从数据库中选择的密码,以便我可以设置 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();
非常感谢。
试试这个:
$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();
你的 $result
变量在 mysqli_result class 的实例中,所以使用它的方法 fetch_assoc()
(正如 Michael Berkowski 所说)来获取带有键 [=16 的关联数组=] 和 'pw',根据您的 sql。然后,您可以使用 password_verify($pass, $hash) -> bool
轻松检查您的密码是否与数据库中的哈希匹配,正如其他答案已经说过的那样。