Php 如何防止在更新表单上重复输入密码字段?

Php 如何防止在更新表单上重复输入密码字段?,php,passwords,md5,Php,Passwords,Md5,在我的用户信息更新表单上,我允许用户与其他内容一起更新通行证。如果他们不想更新表单中的密码,他们会将其留空,就像字段中的内容留空一样。在流程页面上,如果字段为空,我将从db(其md5)插入他们的现有密码,如果他们更改了密码,我希望输入新密码。下面是我用来尝试和实现这一点的方法,但不管怎样,它都是双重md5: if (!get_magic_quotes_gpc()) { $newpass = mysql_escape_string($_POST['password']); $newp

在我的用户信息更新表单上,我允许用户与其他内容一起更新通行证。如果他们不想更新表单中的密码,他们会将其留空,就像字段中的内容留空一样。在流程页面上,如果字段为空,我将从db(其md5)插入他们的现有密码,如果他们更改了密码,我希望输入新密码。下面是我用来尝试和实现这一点的方法,但不管怎样,它都是双重md5:

      if (!get_magic_quotes_gpc()) {

$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);

    }

    // If $dob is empty
    if (empty($newpass)) {

    $newpass = "$passis"; //$passis = the password stored in db which is md5
        }

$newpass
将永远不会为空,因为md5将空字符串转换为哈希。所以这个条件不起作用:
if(empty($newpass)){

相反,你必须这样做

 if (empty($_POST['password'])) {
更新

 if (!get_magic_quotes_gpc()) {

$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);

}

// If $dob is empty
if (empty($_POST['password'])) { 
   $newpass = "$passis"; //$passis = the password stored in db which is md5
}

只需对代码进行一点修改:

  $newpass = $_POST['password'];

  if (!get_magic_quotes_gpc()) {
      $newpass = mysql_escape_string($newpass);
  }

  if(empty($newpass)) {
    $newpass = "$passis"; //$passis = existing md5'd password already stored in db
  }
  else {
    $newpass = md5($newpass); //$newpass = newly provided password needs to be md5'd before updating db
  }     

您的代码很奇怪,因为只有设置了magic_quotes_gpc指令时,它才会执行md5。
另一种想法是,空字符串的md5不是空字符串

下面是一个应该工作得更好的代码:

$newpass = isset($_POST['password']) ? $_POST['password'] : '';
if ($newpass=='') {
  $newpass = $passis; // $passis = the password stored in db which is md5
} else {
  if (get_magic_quotes_gpc()) $newpass = stripslashes($newpass); // take off slashes added by PHP if any
  $newpass = md5($newpass);
}

我打赌
if(空($newpass))
从来都不是真的。为什么您经常分配
$newpass
?为什么您甚至想用数据库中的密码填充它?如果您不想更新密码,请将其保留为空,不进行更新it@poke是的,但是如果他们想更新它,我怎么知道?如果他们提交的字段是空的,他们就不需要了不要更新它,所以不要这样做。如果里面有东西,就更新它。不需要将数据库中的值放入任何东西中。嘿……我仍然遇到同样的问题:这就是我正在做的:如果(空($\u POST['password']){$\u POST['password']=$passis;}是的,因为
$\u POST
密码应该只在条件下使用,而不是用于分配。不要这样做:
$\u POST['password']=$passis;
,你必须这样做:
$newpass=$passis;
查看我的答案更新