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