0

我已经设置了这个代码,它似乎没有工作。基本上我在数据库中放置了一个时间戳,每当有人尝试提交某些东西时,我都会检查他们的 IP,然后他们最后一次提交时间戳基本上我需要确保在他们发布之前已经超过 30 分钟。这是我到目前为止的代码...

$ip = $_SERVER["REMOTE_ADDR"];
$chkquery = "SELECT * FROM faucet where ip='$ip' ORDER BY timestamp DESC LIMIT 1;";
$chk = mysql_query($chkquery) or die($chkquery."<br/><br/>".mysql_error());
while($row = mysql_fetch_array($chk, MYSQL_ASSOC)){
    $timestamp = $row['timestamp'];
}
$timenow = time();
$chktime = strtotime($timestamp);
if($chktime <= ($timenow - 1800)) {
    echo "Yay! It has been 30 minutes!";
} else {
    echo "Wait! Its not been 30 minutes";
}

我需要更改/修复什么才能使其正常工作吗?非常感谢您的帮助!if 语句可能会被颠倒,但是 IDK,我也以 Yay 结束!不管是什么时间...

4

2 回答 2

2

依赖它是不安全的, strtotime()因为它是由系统的时区设置定义的。您应该调整date.timezone setting或使用date_default_timezone_set() 例如:

date_default_timezone_set('America/New_York');
...

if($timenow - $chktime >= 1800) {
    echo "Yay! It has been 30 minutes!";
} else {
    echo "Wait! Its not been 30 minutes";
}

编辑:添加剩余时间

$time_diff = $timenow - $chktime;
if( $time_diff >= 1800) {
    echo "Yay! It has been 30 minutes!";

} else {
    $remaining = (1800 - $time_diff );
    echo "Wait! Its not been 30 minutes\n";
    echo "please come back in ".date ( "i:s" , $remaining)." minutes";
}
于 2013-09-09T04:07:53.613 回答
0

请检查您的数据库时区和 php 时区设置。

您在数据库和 php 上的时区可能不同。

在 php 脚本上,您可以使用它date_default_timezone_set()来设置时区并date_default_timezone_get()检查设置的时区

在 mysql 上,查看my.inimy.cnf进行设置

于 2013-09-09T04:31:21.483 回答