0

私は2つのフィールド(id、points)を持つデータベースにポイントテーブルを追加するだけのカスタムjoomlaコンポーネントに取り組んでいます... idは主キーであり、ユーザーjoomlaユーザーIDと同じになるように設定しようとしています..。。

ユーザーのポイント数を返す関数と、ユーザーのポイントを特定の値に更新する関数が必要です...最初の関数を正常に作成しました。

getUserPoints()

特定のユーザーのポイント数を返します...次に、次の2番目の更新関数を開始しました。

updateUserPoints()

これは現在「一貫性がない」部分であり、私は間違っていると思います...現在のユーザーのポイント値を更新する単純な関数を作成しようとしています...また、私はしようとしていましたそれらのレコードがない場合のケースを処理します...次にレコードを作成します!....これを行うには、updateUserPoints()関数内に次の関数を作成します。

newUserCheck()

ユーザーにポイントがあるかどうかを確認してから、trueまたはfalseと応答することになっています。

$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
    if($points){
           return false;
       } else {
           return true;
     }

次に、更新して新しいレコードを作成するか、既存のレコードを更新します...このコードはほぼ機能しています!... 3つのテストで機能しました...ただし、2番目のユーザーを追加すると、少し一貫性がなくなるようです。 。新しいユーザーが正常に作成され、5ポイントが付与されます。次に、もう一度実行して更新すると、「ポイントが更新されました」と表示されますが、データベースのポイント値が実際に更新されていないようです。

既存のユーザーが1人またはいない場合は、正常に機能しているようです。とにかく...提案を受け入れます...私はここで間違っていることがたくさんあると確信していますが、それを正しく機能させたいです!あなたがおそらく言うことができるように、私はMVCプログラミングに不慣れです:P

これがjoomlaコントローラー全体です:

<?php defined('_JEXEC') or die('');
// userprofilepoints CONTROLLER

    jimport('joomla.application.component.controller');
    jimport('joomla.user.helper');

    class userprofilepointsController extends JController {

        function getUserPoints(){

            $values = JRequest::get("post");
            $userIdNumber = $values['userIdNumber'];
            $user = & JFactory::getUser();

            $db = JFactory::getDBO();
            $db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
            $db->query();
            $points = $db->loadResult();

            echo $points;
        }

        function updateUserPoints(){

            function newUserCheck(){

                $values = JRequest::get("post");
                $userIdNumber = $values['userIdNumber'];
                $user = & JFactory::getUser();
                $db = JFactory::getDBO();
                $db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
                $db->query();
                $points = $db->loadResult();

                    if($points){
                        return false;
                    } else {
                        return true;
                    }
            }

            if(newUserCheck() == false){

                $values = JRequest::get("post");
                $userIdNumber = $values['userIdNumber'];
                $newPointsAmount = $values['newPointsAmount'];
                $user = & JFactory::getUser();
                $db = JFactory::getDBO();               
                $db->setQuery("UPDATE #__mytable SET points = '".$newPointsAmount."' WHERE id = '".$user->id."'");
                $db->query();

                //echo getUserPoints();
                //$points = $db->loadResult();
                echo "Points Updated";

            } else if(newUserCheck() == true) {

                $values = JRequest::get("post");
                $userIdNumber = $values['userIdNumber'];
                $user = & JFactory::getUser();
                $db = JFactory::getDBO();               
                $db->setQuery("INSERT INTO #__mytable SET id = $user->id, points = 5");
                $db->query();

                echo "New User Created!";

            }

        }
}

そして最後に、ビューからの私のhtmlとjavascript!....ありがとう!!! :)

<?php defined('_JEXEC') or die(); 

// MAIN PAGE TEMPLATE
    jimport('joomla.user.helper');
    $user = & JFactory::getUser();
    $profile = JUserHelper::getProfile($user->id);
?>

<script type="text/javascript">
jQuery(document).ready(function($) {

$('#updateBTN').click(function(){

    updateUserPoints();
});


function getUserPoints(){

    //Post the following to the controller
    $.post('http://www.mysite.com/index.php?format=raw&option=com_userprofilepoints&task=getUserPoints', {

        userIdNumber:   <?php echo $user->id; ?>

    }, function(data) {

        alert(data);                        

    }); 
}

function updateUserPoints(){

    //Post the following to the controller
    $.post('http://www.mysite.com/index.php?format=raw&option=com_userprofilepoints&task=updateUserPoints', {

        userIdNumber:   <?php echo $user->id; ?>,
        newPointsAmount:    555444  //random hardcoded points amount to test with

    }, function(data) {

        alert(data);                        

    }); 
}

});

</script>

<div id="main_block">
    <p>Points Page:</p>
    <br />
    <button id="updateBTN">Trigger Update</button>
</div>
4

1 に答える 1

2

からクエリ行を削除しますnewUserCheck()

$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();

実際には次のようになります。

$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$points = $db->loadResult();

loadResult()クエリを実行します。

于 2013-02-14T00:04:04.250 に答える