Joomla 3.3 - 如何存储用户密码?

时间:2015-04-08 11:50:49

标签: php mysql joomla

我试图使用joomla 3.3.6将用户密码存储在插件中。

根据Joomla文档:https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase

我创建了以下功能:

    /**
 * 
 * Update Password
 * 
 * @param unknown $idUser
 * @param unknown $password
 */
public function updateUserPassword($idUser, $password) {

    // Create a new query object.
    $query = $this->db->getQuery ( true );
    $value = JUserHelper::hashPassword($password);

    // Prepare the insert query.
    $query->update('#__users')
        ->set('password  = ' . $this->db->quote($value))
        ->where('id = ' . $idUser);

    // Set the query using our newly populated query object and execute it.
    $this->db->setQuery ($query);

    $updateResult = $this->db->execute ();
    if ($updateResult == false) {
        $errorMsg = $this->db->getErrorMsg ();
        var_dump($errorMsg);
    } else {
        echo "Update Done";
    }   
}

执行此代码时没有任何错误或警告,但表用户中的用户记录保持不变。

$查询值为:

UPDATE #__users
SET password  = '$2y$10$hO2MfDLfG5ICy2yhZWXZG.GCQ89vYw26KHVisXuuD8baRU9WtuDR.'
WHERE id = 192

$ query看起来很好。通过将#__替换为我的自定义db前缀来在mysqlworkbench中执行查询,返回ok,我可以看到db中的更改。

然而,php代码不起作用。

有人对此有所了解吗?

开发。

修改 代码更改:在execute语句中添加错误处理。 消息"更新完成"打印出来。

1 个答案:

答案 0 :(得分:0)

从您的代码段中,我看不出您是如何确定代码正在执行而没有任何错误。

来自Joomla文档 https://api.joomla.org/cms-3/classes/JDatabaseDriver.html#method_execute 你的execute语句应该有一个游标返回值或false。

$updateResult = $this->db->execute();
if($updateResult == false) {
    $errorMsg = $this->db->getErrorMsg();
    //display this in your method of choice
}

根据您的服务器,可能还有Web服务器错误日志条目。在我的LAMP开发机器上,它位于/ var / log / apache2 / error_log

修改Joomla表记录的备用方法

$user_record = new stdClass();
$user_record->id = $idUser;
$user_record->password = $password;

$result = JFactory::getDbo()->insertObject('#__users', $user_record, $idUser);