0

我的 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) 类型,我将属性设置为无符号,这样玩家就不能以负数结束。

请帮忙谢谢

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

}
4

2 回答 2

3

如果这是您用来保存分数的唯一脚本,难怪人们为了获得高分而作弊 - 为了防止它,您需要在参数中插入一些加密,并在脚本中添加一些基于会话和时间的保护

于 2012-04-29T22:01:35.233 回答
1

这是因为您将整数添加到可能的整数数据类型上。如果您确保输入是整数(您已经在做) ,则不需要引号和转义

"UPDATE users SET totalScore=totalScore + $score WHERE username='$name'" LIMIT 1;

只有您根据名称更新查询,您可能需要限制执行。

于 2012-04-29T22:01:59.907 回答