好吧,我有一个成就系统,它运行良好,除了正确地添加分数。下面是一个在满足条件时更新数据库的示例:
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。在我的主include文件中有35组这两个if语句。我的成员表中的测试用户配置文件已经满足35个成就中的19个条件。除了添加点之外,数据库中的所有内容都正确更新。积分总数应该在1000点左右,但它总是给我150点。我不确定我做错了什么。
我不能具体说为什么它不添加点,在将数据库的东西移动到它自己的函数中后,我会说这是因为你没有增加和存储$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());
}