PHP&;SQL-在短时间内阻止数据库中3个或更多条目后的IP地址

PHP&;SQL-在短时间内阻止数据库中3个或更多条目后的IP地址,php,sql,Php,Sql,请原谅我的代码状态,但我是相当新的。我正在尝试编写一些PHP脚本,以防止IP地址在设置的时间段内(最好是1小时,但我不知道如何设置)在我的数据库中创建三个以上的条目 我的代码如下。非常感谢大家的帮助。我当前收到以下错误。。。“您的SQL语法有错误;请检查与您的MariaDB服务器版本对应的手册,以了解在第2行的“travisor_review”附近使用的正确语法,其中travisor_review.ip_address='31.205.34.25'” if(设置($\u POST[“离开”]))

请原谅我的代码状态,但我是相当新的。我正在尝试编写一些PHP脚本,以防止IP地址在设置的时间段内(最好是1小时,但我不知道如何设置)在我的数据库中创建三个以上的条目

我的代码如下。非常感谢大家的帮助。我当前收到以下错误。。。“您的SQL语法有错误;请检查与您的MariaDB服务器版本对应的手册,以了解在第2行的“travisor_review”附近使用的正确语法,其中travisor_review.ip_address='31.205.34.25'”

if(设置($\u POST[“离开”])){
$ip_地址=$_服务器['REMOTE_ADDR'];
$queryTime=“选择*
来自“travisor_review”
其中travisor_review.ip_address=“$ip_address”
按日期说明订购
限制3”;
$resultTime=mysqli_query($conn,$queryTime)或die(mysqli_error($conn));
if(mysqli_num_行($resultTime)>3){
while($row=mysqli\u fetch\u assoc($resultTime)){
$totalTime=$totalTime+(日期(“Y-m-d H:i:s”)-$date);
}
echo$totalTime;
如果($totalTime<1000000){
退出(“您似乎在短时间内做了太多评论。请稍后再试。”);
}
}
$lreview=mysqli\u real\u escape\u字符串($conn,$\u POST['lreview']);
$srating=mysqli\u real\u escape\u字符串($conn,$\u POST['srating']);
$query2=“插入travisor\u审查(交易人、评级、审查、日期、ip地址)
值(“$id”、“$srating”、“$lreview”、NOW()、“$ip_地址”)”;
$result2=mysqli_query($conn,$query2)或die(mysqli_error($conn));
}

我得到了答案。我的SQL中有一个小错误,Php中有一个未声明的变量。下面的代码

 if (isset($_POST["leave"])) {

    $ip_address = $_SERVER['REMOTE_ADDR'];

    $queryTime = "SELECT * 
                    FROM travisor_review 
                    WHERE travisor_review.ip_address = '$ip_address' 
                    ORDER BY date DESC
                    LIMIT 3";
    $resultTime = mysqli_query($conn, $queryTime) or die(mysqli_error($conn));

        if (mysqli_num_rows($resultTime) > 2) {

            $totalTime = 0;
            $date = $row["date"];

            while ($row = mysqli_fetch_assoc($resultTime)) {
                $totalTime = $totalTime + (date("Y-m-d H:i:s") - $date);
            }

            echo $totalTime;

            if ($totalTime < 3600) {
                exit("It seems you have been making too many reviews in a short period of time. Try again later.");
            }
        }

    $lreview = mysqli_real_escape_string($conn, $_POST['lreview']);
    $srating = mysqli_real_escape_string($conn, $_POST['srating']);


    $query2 = "INSERT INTO travisor_review (tradesperson, rating, review, date, ip_address)
        VALUES('$id', '$srating', '$lreview', NOW(), '$ip_address')";

    $result2 = mysqli_query($conn, $query2) or die(mysqli_error($conn));
}
if(设置($\u POST[“离开”])){
$ip_地址=$_服务器['REMOTE_ADDR'];
$queryTime=“选择*
来自Trau review
其中travisor_review.ip_address=“$ip_address”
按日期说明订购
限制3”;
$resultTime=mysqli_query($conn,$queryTime)或die(mysqli_error($conn));
如果(mysqli_num_行($resultTime)>2){
$totalTime=0;
$date=$row[“date”];
while($row=mysqli\u fetch\u assoc($resultTime)){
$totalTime=$totalTime+(日期(“Y-m-d H:i:s”)-$date);
}
echo$totalTime;
如果($totalTime<3600){
退出(“您似乎在短时间内做了太多评论。请稍后再试。”);
}
}
$lreview=mysqli\u real\u escape\u字符串($conn,$\u POST['lreview']);
$srating=mysqli\u real\u escape\u字符串($conn,$\u POST['srating']);
$query2=“插入travisor\u审查(交易人、评级、审查、日期、ip地址)
值(“$id”、“$srating”、“$lreview”、NOW()、“$ip_地址”)”;
$result2=mysqli_query($conn,$query2)或die(mysqli_error($conn));
}

1。不要这样引用标识符,例如:不要在表名周围加单引号。如果你真的想用反勾号。2.3.一百万秒就是11.6天。我改变了你提到的问题。SQL insert现在正在工作,但在1小时(3600秒)内的第4次检查中脚本没有退出。有什么想法吗?@Sammitch喜欢你的100万秒示例。@RHamilton使用IP地址禁止某人是…,我想用最好的方式说这个。。。原油如果列车上的两个人通过WiFi连接,想要提交一份审查,他们是不被允许的?登录的用户具有
SID
,会话ID。通过该ID跟踪。
num_rows
永远不能是
>3
,因为您使用了
限制3
 if (isset($_POST["leave"])) {

    $ip_address = $_SERVER['REMOTE_ADDR'];

    $queryTime = "SELECT * 
                    FROM travisor_review 
                    WHERE travisor_review.ip_address = '$ip_address' 
                    ORDER BY date DESC
                    LIMIT 3";
    $resultTime = mysqli_query($conn, $queryTime) or die(mysqli_error($conn));

        if (mysqli_num_rows($resultTime) > 2) {

            $totalTime = 0;
            $date = $row["date"];

            while ($row = mysqli_fetch_assoc($resultTime)) {
                $totalTime = $totalTime + (date("Y-m-d H:i:s") - $date);
            }

            echo $totalTime;

            if ($totalTime < 3600) {
                exit("It seems you have been making too many reviews in a short period of time. Try again later.");
            }
        }

    $lreview = mysqli_real_escape_string($conn, $_POST['lreview']);
    $srating = mysqli_real_escape_string($conn, $_POST['srating']);


    $query2 = "INSERT INTO travisor_review (tradesperson, rating, review, date, ip_address)
        VALUES('$id', '$srating', '$lreview', NOW(), '$ip_address')";

    $result2 = mysqli_query($conn, $query2) or die(mysqli_error($conn));
}