0

hiscore テーブルに問題があります。一部のプレーヤーは、可能な限り多くのポイントを非常に速く獲得しています。以下に2つのコードを投稿します。

最初のものは私が現在使用しているもので、問題を引き起こしています:

$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) 型であり、attribute を 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'; 
    }

}
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 に答える