如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用

Posted

技术标签:

【中文标题】如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用【英文标题】:How to check the user password id same as given password in mysqli Code below which is not working 【发布时间】:2022-01-14 12:24:33 【问题描述】:
if(array_key_exists('signinbtn',$_POST))
    if(!$_POST['email'])
        echo'<p>please enter your email</p><br>';
     elseif(!$_POST['password'])
        echo'<p>please enter your password</p><br>';
     else 
        $query = "SELECT `id` 
                    FROM `users` 
                    WHERE email = '".mysqli_real_escape_string($link , $_POST['email'])."'";
        $query_result = mysqli_query($link , $query);
        if($get_row = mysqli_num_rows($query_result) == 0)
            echo'Email is not registered';
         else 
            $post_query = "SELECT `password` 
                            FROM `users` 
                            WHERE email = '".mysqli_real_escape_string($link , $_POST['email'])."'";
            if($resultforsignup = mysqli_query($link , $post_query))
                if(mysqli_num_rows($resultforsignup) == $_POST['password'])
                    echo'success';
                 else 
                    echo'password does not meet';
                
             else 
                echo'error while sign in';
            
        
    

我正在学习mysql 现在的问题是我想检查用户密码是否相同。请解决这个问题 这是网站mridul.ml

【问题讨论】:

您可以在一个选择中选择多个列,因此这两个选择可以写为SELECT id, password FROM ... 您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在MYSQLI_PDO API 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入! 我们已经 2021 年了,人们仍然转义数据,而不是使用完全避免在 SQL 查询字符串中插入数据的参数化查询?! 肯定需要重新考虑 if ( mysqli_num_rows($resultforsignup) == $_POST['password'] ) 从查询返回的行数几乎肯定不会等于用户输入的密码 RiggsFolly 我在这里没有使用任何安全措施,我只是不想在用户写入像 codex'city 这样的数据时转义数据,因此如果你使用 ' 这将在 codex city 的最后一个停止不包括,我知道我必须使用 md5 或其他任何东西来存储我刚才说过的密码,我如何检查与给定密码相同的用户密码 【参考方案1】:

您正在将查询返回的行数与密码进行比较。所以除非密码是1,否则它不会起作用。

如 cmets 中所述,您应该为查询使用准备好的语句。

此外,您显然将密码的原始文本存储在数据库中。你不应该这样做。您应该使用盐和安全哈希作为密码。幸运的是,php 为此提供了一些方便的函数。使用password_hash 将密码存储在数据库中,然后当您从数据库中获取密码时使用password_verify 来查看它是否正确。这可以防止攻击者在访问您的数据库时获取您所有用户的密码。

【讨论】:

以上是关于如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mysqli只获取一行/属性[重复]

Div 与下面的内容流血?

如何遍历列并检查该值是不是与下一个值匹配然后追加?

使用 MySQLi 检查用户名是不是已存在

无法在没有页面重新加载的情况下获取套接字数据,并与下面的代码做出反应

写一个js函数检查页面中的登录用户名,密码是不是为空,且密码长度不少于6