-1

我有一个问题,我需要接收数据(只有一个来自表单的字符串,它是接收的名称):

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

而“用户”IP(它不需要 cookie 或会话,我不能使用它们),我必须将两个数据(数据和 ip)保存在数据库中并允许每小时查看 5 个,但允许查看相同已经看到了,我的意思是存储在数据库中的“数据”可以无限制地看到,但每小时只能看到 5 个不同的数据(名称),例如:

可以检查:Martha、Jack、Lily、Mark 和 Peter(每小时,下一小时可以检查其他人,或者可能相同 - 取决于用户)。

并且在同一小时内可以检查已经检查的五个名称,但直到下一小时才能检查其他名称。

如果尝试再次检查 Martha、Jack 和 Martha,(第二个 Martha)不算数,因为它已经在同一小时内检查过。

我不知道我该怎么做,有人可以帮助我吗?

提前谢谢你,亲切的问候。

4

2 回答 2

1

我会重新考虑使用 IP 地址。许多组织/ISP 有许多计算机来共享一个 IP 地址。

至于每小时仅验证 5 次,您需要存储收到的最后 5 条数据的时间戳。如果少于五个,则一切正常。

否则检查最年长的时间。如果超过 1 小时,则确定并通过删除最旧的时间戳并将其替换为新时间戳来更新数据库。否则它应该失败。

于 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 回答