PHP登录表单。总是错误的电子邮件,密码

时间:2017-11-15 22:59:43

标签: php mysql login

我有一点问题。我真的不知道自己做错了什么。我将我的代码从已弃用的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.';。感谢帮助。

1 个答案:

答案 0 :(得分:2)

原因是mysqli_real_escape_string()要求将数据库连接作为第一个参数传递。

更好的是,使用预准备语句并取消那些讨厌的函数/ db调用。

请记住,如果您打算使用此功能或正常使用,请使用安全哈希方法,例如password_hash()。我确定您希望保持数据库完好无损。

调试:

在转换过程中使用mysqli_error()可以帮助您。

请注意:如果您决定安全地存储密码,请记住不要使用任何转义密码的方法。诸如此123'\abc<BR>之类的内容将被视为有效。但是通过转义它,这将被解释为123\'\abc<BR>反过来呈现它的验证方法&#34; null&amp; void&#34;,并且会因为它在哈希中嵌入斜杠/转义引用而无声地失败。 password_hash()password_verify()都考虑到了这一点。