运行密码更改脚本时出错

时间:2014-07-26 11:37:32

标签: php

我有一个表单来更改用户的密码。它接受配置文件页面上的输入,然后发送到另一个页面进行处理。但即使我离开任何字段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();
        }
}

}
?>

1 个答案:

答案 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();
     }
}