我有一点问题。我真的不知道自己做错了什么。我将我的代码从已弃用的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.';
。感谢帮助。
答案 0 :(得分:2)
原因是mysqli_real_escape_string()
要求将数据库连接作为第一个参数传递。
更好的是,使用预准备语句并取消那些讨厌的函数/ db调用。
请记住,如果您打算使用此功能或正常使用,请使用安全哈希方法,例如password_hash()
。我确定您希望保持数据库完好无损。
password_hash()
http://php.net/manual/en/function.password-hash.php 调试:
在转换过程中使用mysqli_error()
可以帮助您。
请注意:如果您决定安全地存储密码,请记住不要使用任何转义密码的方法。诸如此123'\abc<BR>
之类的内容将被视为有效。但是通过转义它,这将被解释为123\'\abc<BR>
反过来呈现它的验证方法&#34; null&amp; void&#34;,并且会因为它在哈希中嵌入斜杠/转义引用而无声地失败。 password_hash()
和password_verify()
都考虑到了这一点。
password_verify()
http://php.net/manual/en/function.password-verify.php