Предотвратить множественные вставки SQL

В настоящее время у меня есть JavaScript, который сбрасывает формы, если страница обновляется или пользователь нажимает кнопку браузера назад после отправки, но если крайне скучающий пользователь игнорирует JavaScript, заполняет и отправляет форму снова и снова, моя БД будет получать спам.

Я хотел бы предотвратить это (возможно, проверив, было ли вставлено более 10 строк от одного и того же пользователя в течение одной минуты или около того), но я не знаю, что делать, чтобы предотвратить это.

0

Решение

Сохраните количество сообщений в переменной сеанса.

Каждый раз, когда пользователь отправляет что-то, вы можете сделать следующее:

$_SESSION['postCount'] = $_SESSION['postCount'] + 1;

Затем вы меняете все на что-то вроде:

if($_SESSION['postCount'] > 2) {
// Your code that posts to the database
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
}

Если вы еще не используете сессии, убедитесь, что вы запускаете каждый скрипт с помощью session_start (); С этим кодом никто не может публиковать что-то более трех раз.

1

Другие решения

Обычно это делается с помощью идентификатора сессии / токена.

Таким образом, вы можете проверить, отправлено ли оно уже, и разрешить его только один раз.

Вот похожий вопрос:

Как предотвратить множественные вставки при отправке формы в PHP?

0

Я хотел бы добавить столбец в вашей таблице, который записывает метку времени последней отправки формы. Затем, когда ваша страница загрузится, объявите это как глобальную переменную для вашего 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
}
0
По вопросам рекламы [email protected]