4

私がやりたいのは、すべてのユーザーが毎分1ポイントを獲得することです。これで、addpoints.phpにphpコードがあり、jQueryjavascriptを試してみました。

function addpoints()  { 
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints.php?userid='+ userid.value;
  $.post(postFile, function(data){  
    $("#points").html(data); 
    setTimeout(addpoints, 60000);
  });
}    

これはかなりうまく機能し、1分ごとにポイントを与えます。しかし、1つの問題は、スクリプトがオンになっているページを更新するだけでポイントを受け取ることです。したがって、ページを何度か更新して、その後、あなたはあなたのポイントを上げます。

私は多分addpoints.phpで最後のdatestampが1分より長いかどうかをチェックするif()を作成し、それからpointelseエラーを出すことを考えていました。

小さな問題を防ぐために、もっと良いアイデア/何かを作るべきかどうか疑問に思っていましたか?

4

4 に答える 4

3

スコアが最後にインクリメントされた日時(たとえば、タイムスタンプを使用)を、そのスコアの横(データベース内$_SESSIONまたはデータベース内)に保存することは、確かに解決策になります。

  • スコアをインクリメントするリクエストが届いたら、タイムスタンプを確認してください
    • 60秒以上前の場合は、スコアをインクリメントし、タイムスタンプを更新します
    • それ以外の場合は、スコアやタイムスタンプを更新しないでください
于 2010-02-13T22:06:02.857 に答える
0

@Pascal MARTINの応答に基づいて、解決策が適切である場合は、@PascalMARTINの応答を選択します。

function addpoints()  { 
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints.php?userid='+ userid.value;
  $.post(postFile, function(data){  

    $("#points").html(data.html); 
    setTimeout(addpoints, data.ts);
  });

}   

「addpoints_get_ts」でのみタイムスタンプを取得します

(function(){
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints_get_ts.php?userid='+ userid.value;
  $.get(postFile, function(data){  
      setTimeout(addpoints, data.ts);
  });
})();
于 2010-02-13T22:11:34.827 に答える
0

lastMYSQLテーブルに列を追加することをお勧めします。このように、あなたは彼らがだまされないようにすることができます。

mysql_query('UPDATE `users` SET `points` = `points`+1, `last`='.time().' WHERE `last` < '.(time()-60).' AND `user_id` = '.intval($_GET['userid']).' LIMIT 1);

さらに、SESSION変数を使用して、適切なユーザーがスクリプトを呼び出していることを確認したり、ユーザーがログインしていることを確認したりすることもできます。;)

于 2010-02-13T22:11:35.670 に答える
0

実際には、タイムスタンプを$ _SESSIONSにのみ保存し、データベースの内容について心配する必要はありません。自動化されたスクリプトを防ぐためにできるもう1つの優れた点は、ある種の認証でページにアクセスできるようにすることです。できれば、ログインと強力なキャプチャを使用してください。また、フォームのなりすましから保護し、同じIPの複数のリクエストを保存して、それらを禁止するようにしてください。これにより、誰かが複数回の更新でサーバーをDOSで使用するのを防ぐことができます。IP、リファラーチェックなど、他のものを使用して、それがbieng自動化されているかどうかを判断できます。

于 2010-02-13T23:39:02.130 に答える