В настоящее время у меня есть JavaScript, который сбрасывает формы, если страница обновляется или пользователь нажимает кнопку браузера назад после отправки, но если крайне скучающий пользователь игнорирует JavaScript, заполняет и отправляет форму снова и снова, моя БД будет получать спам.
Я хотел бы предотвратить это (возможно, проверив, было ли вставлено более 10 строк от одного и того же пользователя в течение одной минуты или около того), но я не знаю, что делать, чтобы предотвратить это.
Сохраните количество сообщений в переменной сеанса.
Каждый раз, когда пользователь отправляет что-то, вы можете сделать следующее:
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
Затем вы меняете все на что-то вроде:
if($_SESSION['postCount'] > 2) {
// Your code that posts to the database
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
}
Если вы еще не используете сессии, убедитесь, что вы запускаете каждый скрипт с помощью session_start (); С этим кодом никто не может публиковать что-то более трех раз.
Обычно это делается с помощью идентификатора сессии / токена.
Таким образом, вы можете проверить, отправлено ли оно уже, и разрешить его только один раз.
Вот похожий вопрос:
Как предотвратить множественные вставки при отправке формы в PHP?
Я хотел бы добавить столбец в вашей таблице, который записывает метку времени последней отправки формы. Затем, когда ваша страница загрузится, объявите это как глобальную переменную для вашего JavaScript.
<?php include 'connect.php';
$sql = mysqli_fetch_assoc(mysqli_query($cxn, "SELECT lastFormSubmission FROM myTable WHERE login_id = '".mysqli_real_escape_string($cxn, $_SESSION['login_id'])."'"));
$lastFormTime = $sql['lastFormSubmission'];
?>
Теперь объявите время как глобальную переменную:
<script type="text/javascript">
var lastTime = '<?= $lastFormTime ?>';
</script>
Теперь, когда ваш скрипт формы запускается, вам нужно будет выбрать пороговое время того, что «слишком часто».
//Your script
var t = new Date().getTime() / 1000; //Need time in seconds to compare with timestampif (t - lastTime < yourThresholdTime) {
//don't submit form
}