繁体   English   中英

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

[英]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() 我确定您希望保持数据库不变。

调试:

在查询中使用mysqli_error()可以在过渡期间为您提供帮助。

附带说明:如果并且当您决定安全存储密码时,请记住不要对密码使用任何转义方法。 像这样的123'\\abc<BR>将被视为有效。 但是,通过转义,它将被解释为123\\'\\abc<BR> ,进而将其验证方法呈现为“ null&void”,并且由于将斜杠/转义引用嵌入哈希中而将无提示地失败。 password_hash()password_verify()考虑到了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM