[英]PHP Login Form. Always wrong email, password
我有一个小问题。 我真的不知道我做错了什么。 我将代码从不推荐使用的php5更改为php7,但之后将其更改了。 登录无效,因为它应该是
if(isset($_POST['is_login'])){
$sql = "SELECT * FROM ".$SETTINGS["USERS"]." WHERE `email` = '".mysqli_real_escape_string($_POST['email'])."' AND `password` = '".mysqli_real_escape_string($_POST['password'])."'";
$sql_result = mysqli_query ($connection,$sql) or die ('request "Could not execute SQL query" '.$sql);
$user = mysqli_fetch_assoc($sql_result);
if(!empty($user)){
$_SESSION['panel'] = $user;
$query = " UPDATE ".$SETTINGS["USERS"]." SET last_login = NOW() WHERE id=".$user['id'];
mysqli_query ($connection,$query ) or die ('request "Could not execute SQL query" '.$query);
}
else{
$error = 'Wrong email or password.';
最后一个语句$error = 'Wrong email or password.';
总是被叫。 感谢帮助。
原因是mysqli_real_escape_string()
要求将数据库连接作为第一个参数传递。
更好的是,使用准备好的语句并消除那些讨厌的函数/数据库调用。
请记住,如果打算继续使用此方法,或者使用实时方法,请使用安全的哈希方法,例如password_hash()
。 我确定您希望保持数据库不变。
password_hash()
http://php.net/manual/zh/function.password-hash.php 调试:
在查询中使用mysqli_error()
可以在过渡期间为您提供帮助。
附带说明:如果并且当您决定安全存储密码时,请记住不要对密码使用任何转义方法。 像这样的123'\\abc<BR>
将被视为有效。 但是,通过转义,它将被解释为123\\'\\abc<BR>
,进而将其验证方法呈现为“ null&void”,并且由于将斜杠/转义引用嵌入哈希中而将无提示地失败。 password_hash()
和password_verify()
考虑到了这一点。
password_verify()
http://php.net/manual/zh/function.password-verify.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.