-1

問題があります。データを受信する必要があります(フォームから1つの文字列のみ、それは受信する名前です):

$received_data = $_POST['data'];
$ip = checkip();

そして、「ユーザー」IP(Cookieやセッションは必要なく、使用できません)、両方のデータ(dataとip)をデータベースに保存し、1時間あたり5を表示できるようにする必要がありますが、同じものを表示できるようにする必要がありますすでに見たように、データベースに保存されている「データ」は無制限に見ることができますが、1時間あたり5つの異なるデータ(名前)しか見ることができません。たとえば、次のようになります。

確認できる:マーサ、ジャック、リリー、マーク、ピーター(1時間ごと、次の1時間は他の人を確認するか、同じかもしれません-ユーザーによって異なります)。

そして、同じ時間に、すでにチェックされている5つの名前をチェックできますが、次の1時間まではチェックできません。

そして、マーサ、ジャック、そしてマーサをもう一度チェックしようとすると、(2番目のマーサ)はカウントされません。これは、同じ時間にすでにチェックされているためです。

どうすればいいのかわからないのですが、誰か助けてもらえますか?

よろしくお願いします。

4

2 に答える 2

1

IPアドレスの使用に関して再考する必要があります。多くの組織/ISPには、IPアドレスを共有するための多くのコンピューターがあります。

1時間あたり5つだけを確認する場合は、受信した最後の5つのデータ項目のタイムスタンプを保存する必要があります。5未満であれば、すべて問題ありません。

それ以外の場合は、長老の時間を確認してください。1時間以上の場合は、[OK]をクリックし、最も古いタイムスタンプを削除して新しいタイムスタンプに置き換えることにより、データベースを更新します。そうでなければ失敗するはずです。

于 2012-06-07T18:48:20.313 に答える
1
function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

function maxSavePerHour($data, $ip, $maxSave = 5){

    $data = mysql_real_escape_string($data);

    // Get record matching within last hour
    $res = mysql_query("select * from table where data='$data' and ip='$ip' and lastinsert <= date_sub(NOW(), interval 1 hour)";

     $totalRows = mysql_num_rows($res);

    // If a record was NOT found within last hour matching everything then insert new record.

      // Compare records against max saves
      if($totalRows <= $maxSave){
        $storeData = true;
      }else{
        $storeData = false;
      }  


   if($storeData){
      $res = mysql_query("insert into table set data='$data', ip='$ip'";
      //Add more exception handling here....
    }

}


$ip = getRealIpAddr();
$data = $_POST['data'];

maxSavePerHour($data,$ip);
于 2012-06-08T00:52:53.137 に答える