Php 如何将输入登录字段中输入的密码和数据库中存储的md5密码进行比较?

Php 如何将输入登录字段中输入的密码和数据库中存储的md5密码进行比较?,php,md5,Php,Md5,更新(已解决):之前我将密码长度设置为15个字符,其中应为32个字符,因为密码加密为md5。现在它工作得很好。感谢所有的回答和建议。 下面是注册php代码。代码运行良好,能够将密码存储在md5中的数据库中 <html> <?php error_reporting(0); if($_POST['submit']) { $name = mysql_real_escape_string($_POST['name']); $username = mysql_real

更新(已解决):之前我将密码长度设置为15个字符,其中应为32个字符,因为密码加密为md5。现在它工作得很好。感谢所有的回答和建议。

下面是注册php代码。代码运行良好,能够将密码存储在md5中的数据库中

  <html>
<?php
error_reporting(0);
if($_POST['submit'])
{
    $name = mysql_real_escape_string($_POST['name']);
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    $password1 = mysql_real_escape_string($_POST['password1']);

    $enc_password = md5($password);

    if($name && $username && $password && $password1)
    {
        if(strlen($name)<30)
        {
            if(strlen($username)<10)
            {
                if(strlen($password)<15 || strlen($password)>6)
                {
                    if($password == $password1)
                    {
                        require "dbc.php";
                        $query = mysql_query("INSERT INTO users VALUES ('$name','$username','$enc_password')");     
                        echo "Registration Complete! <a href='index.php'>Click here to login</a>";
                    }
                    else
                    {
                        echo "Passwords must match";
                    }
                }
                else
                {
                    echo "Your password must be between 6 and 15 characters";   
                }
            }
            else
            {
                echo "Your username is too long";   
            }
        }
        else
        {
            echo "Your name is too long";
        }
    }
    else
    { 
        echo "All fields are required"; 
    }
}

?>

    <form action="register.php" method="POST">
        Name: <input type="text" name="name" value="<?php echo "$name"; ?>"> Max Length:30<p>
        Username: <input type="text" name="username" value="<?php echo "$username"; ?>"> Max Length:10<p>
        Password: <input type="password" name="password"> Max length:15<p>
        Re-Enter Password: <input type="password" name="password1"><p>
        <input type="submit" name="submit" value="Register">
    </form>
    <input type="button" value="<< Back to Login Area" onclick="window.location='../login%20and%20registration/members.php'">

</html>


您需要在以下行中使用
$enc_password
而不是
$password

if($username==$db_username&&$password==$db_password)
另外,如果您使用md5,则不要执行
mysql\u real\u escape\u string()
md5
将更改您的字符串,并删除所有注入

p.p.S.使用而不是
mysql.*

更新

此外,用户名必须不区分大小写,因此最好:

if(strcasecmp($username, $db_username)===0 && $password==$db_password)
改变

if($username==$db_username&&$password==$db_password)


您使用的是
$password
,但应该是
$enc\u password

您正在比较$password和$db\u password,而您应该比较$enc\u password和$db\u password

if($username==$db_username&&$enc_password==$db_password)

在你的情况下,你应该这样比较

 $password = md5($password);//change value entered of password to md5

 if($username==$db_username&&$password==$db_password)

仅供参考,由于数据库包含MD5密码,您需要与
$enc_password
进行比较,而不是
$password
,即
如果($username=$db_username&&$enc_password=$db_password)
存储密码散列(您应该这样做,但它们应该被加密),没有必要对密码施加最大长度-如果用户想使用整个战争与和平文本,就让他们使用。我已将if($username==$db\u username&&$password=$db\u password)更改为if($username=$db\u username&&$enc\u password=$db\u password)仍然给出相同的错误,然后使
死亡($username.='.$db\u username.&&&'$enc\u password.='.$db\u password);
并查看输出中的不同之处。@user2251028也可以查看我的更新,您的用户名可能有问题。我尝试过死($username.='.$db\u username.&&'$enc u password.='='.$db\db\u password);收到此错误消息尖叫:由于解析错误而忽略错误抑制:语法错误,C:\wamp\www\login and registration\login.php中的意外“else”(T_else)在第30行可能是您将其添加到if()中的如果($username==$db\u username)和($password==$db\u password)),则在执行此操作之前移动该代码
if($username==$db_username&&$enc_password==$db_password)
 $password = md5($password);//change value entered of password to md5

 if($username==$db_username&&$password==$db_password)