当 $_POST 中的密码字段留空时,如何不更新密码字段?

问题描述 投票:0回答:4

更新:我自己解决了这个问题,答案如下。继续...

我有一个使用 PHP 和 mySQL 更新您帐户的表格。提交时,它将所有 $_POST 变量分配给新的 user() 对象,然后对用户对象执行 update() 方法,该方法在 SQL 中运行 UPDATE 查询。

该表单显然默认为所有用户信息,除了密码,我没有预先填写密码。除非他们想更改密码,否则它是空白的。

如果我没有采取任何措施来解决此问题,则每次帐户更新都会将该人的密码重置为“”,因为提交时该字段为空。那会很糟糕。因此,为了解决这个问题,我添加了以下代码:

    if(empty($_POST['password']) || is_null($_POST['password']) || !isset($_POST['password']) || $_POST['password'] == "") {
        $user->hashed_password = $edituser->hashed_password;
    } else {
        $password = $database->escape_value($_POST['password']);
        $user->hashed_password = md5($password);
    }   

基本上,如果 $_POST 密码值为空,请将密码设置为当前用户的密码($edituser 是预先创建的对象,用于在需要时保存当前用户的信息)。相信我,我首先尝试使用 if(empty()) 因为empty应该可以工作,但它没有,所以我添加了 null,isset,甚至 !== "" 只是为了安全起见。

无论我做什么,密码都会重置为空。为什么?

php forms passwords
4个回答
2
投票

即使该字段为空,它仍然会出现在 $_POST 中。

$Password = trim(isset($_POST['Password']) ? $_POST['Password'] : '');

if($Password)
{
    //validate password
    //update password
}

1
投票

您是否打开了警告?您可能需要先在 if 语句中使用 !isset($_POST['password'])

这对我调试这样的东西很有帮助:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors','On');

0
投票

太好了,原来我只是个白痴!

我的 User 类有一个属性函数,要求数据库字段名称与对象属性名称相同才能工作。我的类属性是 $password,我的数据库字段名称是“hashed_password”——所以无论如何它都会更新为空白。

那是有趣的几个小时!


0
投票

解决这个问题的简单方法试试:

$vEmployeeName = mysqli_real_escape_string($db->link,$_POST['vEmployeeName']);
$vPassword = mysqli_real_escape_string($db->link, $_POST['vPassword']);

if($vPassword=="")
{
  $query = "update tblogin 
  set vEmployeeName='$vEmployeeName' 
  where iAutoId='$editid' ";
}
else
{
  $query = "update tblogin 
  set vEmployeeName='$vEmployeeName',
  vPassword=MD5('$vPassword') 
  where iAutoId='$editid' ";
}
© www.soinside.com 2019 - 2024. All rights reserved.