我有一个表单来更改用户的密码。它接受配置文件页面上的输入,然后发送到另一个页面进行处理。但即使我离开任何字段blnk,我收到错误login_failed。在空白案例中,错误应该是填写所有字段。有人能说出问题出在哪里。
<form method="post" action="updatepassword.php">
<input name="pass" type="text" placeholder="Old password" />
<input name="pass1" type="text" placeholder="New password" />
<input name="pass2" type="text" placeholder="Confirm password" />
<input id="butt" type="submit" value="Update" name="pinchange">
</form>
updatepassword.php
<?php
include_once("login_status.php");
}
if(isset($_POST['pinchange']))
{
$pass=md5($_POST['pass']);
$pass1=md5($_POST['pass1']);
$pass2=md5($_POST['pass2']);
if($pass==""||$pass1==""||$pass2==""){ echo "Fill all the fields"; exit();}
else{
$sql = "SELECT id,password FROM users WHERE username='$log_username' ;
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
$db_id = $row[0];
$db_pass_str = $row[1];
if($pass != $db_pass_str){
echo "login_failed";
exit();
}
}
}
?>
答案 0 :(得分:2)
重要说明:使用MD5存储和检索密码被认为是非常糟糕的做法。这个答案只显示了代码的错误。它根本不鼓励使用MD5哈希。
您应该只使用md5
转换密码,然后将它们与空字符串进行比较。所以你应该这样做:
<?php
include_once("login_status.php");
if(isset($_POST['pinchange']))
{
$pass=$_POST['pass'];
$pass1=$_POST['pass1'];
$pass2=$_POST['pass2'];
if($pass==""||$pass1==""||$pass2==""){ echo "Fill all the fields"; exit();}
else{
$sql = "SELECT id,password FROM users WHERE username='$log_username'" ;
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
$db_id = $row[0];
$db_pass_str = $row[1];
if(md5($pass) != $db_pass_str){
echo "login_failed";
exit();
}
}