-1

データベース:

pub_id pub_name time              ip
1      King     1359500087        3388636152
2      Queen    1359550082        6385394932
3      Jack     1359502084        5648646562
4      Heart    1359524083        9283834142
5      Jim      1359503082        3388636152
                |_ Using time()    |_ Using ip2long()

PHP/MySQLi コード:

$pub_id = $_GET['pub_id'];
$pub_name = $_GET['pub_name'];
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$time = time();

$query = $db->query("SELECT * FROM impressions WHERE pub_id = '$pub_id' AND pub_name = '$pub_name' AND ip = '$ip' AND time >= '???'");
$ip_adderss = $query->num_rows;
$query->close();

if($ip_adderss == 0){
// Redirect
} else{
// Do nothing
}

time() と IP を使用して、現在の訪問者の最後の訪問が 24 時間前かどうかを確認するにはどうすればよいですか?

簡単な解決策は、if ステートメントを使用して IP 時刻と現在時刻を確認することです。

// Check if the IP is new or returning
$query = $db->query("SELECT * FROM impressions WHERE pub_id = '$pub_id' AND pub_tag = '$pub_tag' AND month = '$month' AND day = '$day' AND ip = '$ip' AND domain = '$domain' AND valid = '1' ORDER BY id DESC");

$ip_address = $query->num_rows;

if($ip_address == 0){

    $ip_ok = 1;

} elseif($ip_address != 0){

    $impression = $query->fetch_assoc();

    if($time >= ($impression['time'] + 86400)){

        $ip_ok = 1;

    } else{

        $ip_ok = 0;

    }

} else{

$ip_ok = 0;

}
4

1 に答える 1

0

フィールドtimeには、秒数である UNIX タイムスタンプが含まれています。
したがって、1 日前のポイントを計算するのは簡単です。現在のタイムスタンプから 86400 を引くだけです。
したがって、条件は小学校の数学と同じくらい単純になります。

WHERE time >= unix_timestamp() - 86400

time()または、 PHP関数を使用して必要な場合

$time  = time() - 86400;
$query = "SELECT * FROM impressions WHERE ... AND time >= ?");

その値をバインドします。

于 2013-01-30T08:38:14.137 に答える