2013-02-13 24 views
0

我正在開發一個定製的joomla組件,該組件只需將兩個字段(id,points)添加到數據庫的點表... id是主鍵,我試圖將其設置爲與用戶joomla相同用戶ID ...爲什麼這些簡單的更新和插入SQL函數無法正常使用我的PHP查詢?

我需要一個函數,返回的點數爲用戶&另一種更新的用戶指向給定值...我成功創建了第一個名爲:

getUserPoints() 

它返回給定用戶的點數...然後我開始了第二個更新函數:

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; 
    } 

然後或者更新創建新記錄或更新現有的...這段代碼幾乎可以工作!...它在三次測試中對我有用......但是當我添加第二個用戶時,它似乎有點不一致。 ..它會創建一個新的用戶成功,給他們5分....然後當我再次運行它來更新它說「點更新」,但它似乎並沒有實際更新數據庫中的點值?!

與一個或沒有現有的用戶似乎工作正常!無論如何...打開建議...我相信有一堆我在這裏做錯了,但我希望得到它正常工作!我是新來的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> 
+0

'loadResult()'獲取結果第一行的第一列嗎?如果沒有,你可能需要在檢查之前手動選擇'points'列(比如'$ db-> loadResult()[0] - > points') – Gargron 2013-02-13 23:22:25

+0

我認爲loadResult()獲取第一個結果記錄是。 – DigitalMediaGuy 2013-02-13 23:24:54

回答

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()將運行查詢。

+0

我還建議在'updateuserPoints'函數之外和所有調用'$ this-> newUserCheck()'而不是'newUserCheck()'的地方移動'newUserCheck()',但這對解決您的問題並不是必需的,我相信。 – 2013-02-14 00:05:19

+0

謝謝...所以我從newUserCheck()中刪除了這一行,我似乎得到了相同的結果...如果點表中有0條記錄,它的代碼工作...首先點擊按鈕創建一個用戶5點,第二次點擊將其更新爲我傳遞給它的555444號碼......但是...如果點表中已經有一條記錄......它似乎並不工作......它總是說「新用戶創建」,但沒有得到數據庫: -/ – DigitalMediaGuy 2013-02-14 00:18:29

+0

我可能實際上是錯誤的...我現在再次測試它......它似乎正在按預期工作.. 。但是...我在數據庫中隨時測試了多個隨機記錄,並且它是零星的......無論如何...測試一些更多的感謝 – DigitalMediaGuy 2013-02-14 00:33:06

相關問題