php
  • mysql
  • 2011-07-17 71 views 1 likes 
    1

    好吧,我有一個成就係統,除了正確加分之外,它的效果很好。這裏是一個例子,如果條件滿足,更新到數據庫:我可以不加分多個if語句嗎?

    if($members['Active']==1){  
        $Achievement1=mysql_query("SELECT * FROM ". 
                "myachievements WHERE ". 
               "Handle='$members[Handle]' and AchievementId='1'"); 
        $Achievement2=mysql_num_rows($Achievement1); 
        $tehdate=date('Y-m-d'); 
        $Points = '50'; 
        $newscore=$members['Points']+$Points; 
        if ($Achievement2 == 0) {   
         mysql_query("INSERT INTO `myachievements` 
             (`Handle` , `AchievementId` , `Date`) VALUES 
              ('$members[Handle]', '1' , '$tehdate')" 
            )or die(mysql_error()); 
    
         mysql_query ("UPDATE members SET Achievement = 'Y' WHERE ". 
             "Handle = '$members[Handle]'")or die(mysql_error()); 
         mysql_query ("UPDATE members SET Points = '$newscore' WHERE ". 
             "Handle = '$members[Handle]'")or die(mysql_error()); 
        } 
    
    } 
    

    上面顯示的成績僅用於激活一個帳戶。我現在大約有35項成就,每項成績都有不同的ID。所以在我的主要包含文件中有兩組if語句。我的成員表中的測試用戶配置文件已滿足35項成就中總共19項的條件。除了添加點之外,所有數據庫都會正確更新。總分應該高出約1000分,但總是給我150分。我不知道我做錯了什麼。任何幫助,將不勝感激。

    回答

    1

    我不能說具體爲什麼不加點,移動數據庫的東西到它自己的功能後,我會說這是因爲你不會增加,存儲在$members['Points']基點值:

    if($members['Active']==1) 
    { 
        $Points = '50'; 
        $newscore = $members['Points'] + $Points; 
    
        if (0 == achievement_get_count($members['Handle'], 1)) 
        { 
        achievement_add($members['Handle'], 1, date('Y-m-d')); 
        achievement_set_points($members['Handle'], $newscore); 
        } 
    } 
    
    /** achivement mysql functions */ 
    
    function achievement_get_count($memberHandle, $achievementId) { 
        $Achievement1=mysql_query("SELECT * FROM myachievements WHERE Handle='$memberHandle' and AchievementId='$achievementId'"); 
        return mysql_num_rows($Achievement1); 
    } 
    
    function achievement_add($memberHandle, $achievementId, $date) { 
        mysql_query("INSERT INTO `myachievements` (`Handle` , `AchievementId` , `Date`) 
        VALUES (
         '$memberHandle', '$achievementId' , '$date')") 
        or die(mysql_error()); 
    } 
    
    function achievement_set_points($memberHandle, $points) { 
        mysql_query ("UPDATE members SET Achievement = 'Y', Points = '$points' WHERE Handle = '$memberHandle'")or die(mysql_error()); 
    } 
    
    +0

    感謝您繼續並將它們納入功能。這幫助我縮小了問題範圍。 – Brad45

    +0

    不客氣,歡迎進一步編碼。 – hakre

    相關問題