我的hiscore表有些问题。有些玩家很快就获得了很多积分,更多的可能。我在下面发布了两个代码:
第一个是我目前使用的那个,导致问题:
$name = mysql_real_escape_string($_POST['name']);
$set = mysql_real_escape_string($_POST['set']);
if ($set == 1 && isset($_POST['score']))
{
$score = mysql_real_escape_string($_POST['score']);
$query = mysql_query("UPDATE users SET totalScore=totalScore + '$score' WHERE username='$name'");
if ($query)
{
echo 'success';
}
else {
echo 'error';
}
}
我尝试在下面的代码中将得分作为int投射,但更新结果是一个巨大的数字(4294967295)被设置为totalScore。 totalScore的类型为int(25),我将属性设置为unsigned,因此玩家不能以负数结束。
请帮忙 感谢
$name = mysql_real_escape_string($_POST['name']);
$set = (int)$_POST['set'];
if ($set == 1 && isset($_POST['score']))
{
$score = (int)$_POST['score'];
$query = mysql_query("UPDATE users SET totalScore=totalScore + $score WHERE username='$name'");
if ($query)
{
echo 'success';
}
else {
echo 'error';
}
}
答案 0 :(得分:3)
如果这是您用来保存分数的唯一脚本,难怪人们被骗以获得高分 - 为了防止它,您需要在参数中插入一些加密,并添加一些基于会话和时间的保护脚本
答案 1 :(得分:1)
这是因为您正在将整数添加到整数数据类型上。如果确保输入是整数(你已经在做),则不需要引号和转义
"UPDATE users SET totalScore=totalScore + $score WHERE username='$name'" LIMIT 1;
只有您根据名称更新查询,您可能需要限制执行。