【问题标题】:How do I NOT update a password field when it's left blank in $_POST?当 $_POST 中的密码字段为空时,如何不更新密码字段?
【发布时间】:2010-11-30 22:26:57
【问题描述】:

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

我有一个使用 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 甚至 !== ""。

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

【问题讨论】:

  • empty() 应该足够了。打印$_POST['password']$edituser->hashed_password 的值,看看有什么问题。

标签: php forms passwords


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      这几个小时很有趣!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 2022-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多