无法连接到Joomla数据库以进行自定义更新功能

时间:2014-03-13 14:36:08

标签: php mysql database function joomla

以下是给我一些麻烦的代码段:

if ($accountMask){
function updateAccountMask(){

$userIdValue =& JFactory::getUser();
$userId = $userIdValue->id;
$db = JFactory::getDbo();
$query = $db->getQuery(true);

// Fields to update.
$fields = $db->quoteName('cb_accountmask');

// Conditions for which records should be updated.
$conditions = $db->quoteName('user_id') . '='.$userId;

$query->update($db->quoteName('#__comprofiler'))->set($fields)->where($conditions);

$db->setQuery($query);

$result = $db->query();

return $result;

}

updateAccountMask();

}

我想我构建数据库查询的方式存在一些简单的格式问题,但目前我并不明白。有什么想法吗?


我发现数据库连接很好,问题似乎是我无法在$accountMask;函数中提取updateAccountMask值。如果我执行以下操作:

if ($accountMask){
echo $accountMask;
function updateAccountMask(){

然后我可以看到屏幕上回显的值。如果我这样移动......

if ($accountMask){
function updateAccountMask(){
echo $accountMask;

没有显示任何价值。

嗯......为什么会这样?


好吧,这只是变得荒谬......

我尝试了很多组合试图在函数范围内获取变量,但仍然没有运气。这是我最近尝试过的最直接的方法:

$accountMask = 'testing';   

if ($accountMask){
function updateAccountMask(){

    global $accountMask;
    echo 'Account Mask= ' . $accountMask;

但是,我得到的所有输出都是Account Mask=。是什么给了什么?!?

2 个答案:

答案 0 :(得分:0)

好的,所以你基本上没有设置要添加到数据库表中的值。这应该是它的样子:

$input = JFactory::getApplication()->input;
// Change "varname" to the name of the input field
$accountMask = $input->post->get('varname');

if ($accountMask){

    function updateAccountMask(){

        $user = JFactory::getUser();
        $db = JFactory::getDbo();
        $userId = $user->id;

        $query = $db->getQuery(true);

        $fields = array(
            $db->quoteName('cb_accountmask') . ' = ' .$accountMask
        );
        $conditions = array(
            $db->quoteName('user_id') . ' = ' . $userId
        );

        $query->update($db->quoteName('#__comprofiler'))->set($fields)->where($conditions);

        $db->setQuery($query);
        $result = $db->query();

        return $result;

    }

    updateAccountMask();

}

如您所见,我使用了$db->quoteName('cb_accountmask') . ' = ' .$accountMask所以现在正在设置值。

希望这有帮助

答案 1 :(得分:0)

试试这个

$input = JFactory::getApplication()->input;
// Change "varname" to the name of the input field
$accountMask = $input->post->get('varname');

if ($accountMask)
{
    self::updateAccountMask($accountMask);
}

function updateAccountMask($accountMask)
{
        $user = JFactory::getUser();
        $userId = $user->id;

        $db = JFactory::getDbo();    
        $query = $db->getQuery(true);
        $fields = array(
            $db->quoteName('cb_accountmask') . ' = ' . $db->quote($accountMask);
        );

        $conditions = array(
            $db->quoteName('user_id') . ' = ' . $userId;
        );

        $query->update($db->quoteName('#__comprofiler'))->set($fields)->where($conditions);

        $db->setQuery($query);
        $result = $db->execute(); 

        return $result;    // I'm not sure what you are returning here ... i would just return true on success, exception or false on error
    }

有一件事是你应该做更多的检查,比如如果没有这样的用户会怎么做。