Php 如何将输入登录字段中输入的密码和数据库中存储的md5密码进行比较?
更新(已解决):之前我将密码长度设置为15个字符,其中应为32个字符,因为密码加密为md5。现在它工作得很好。感谢所有的回答和建议。 下面是注册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
<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)