Добрый день всем,
У меня есть вопрос, я посмотрел его везде, и я все еще застрял
Если я отправлю форму через post -> variable -> database, а затем перенаправлю ее на другую
использование страницы header(location:page.php);
в то время, которое требуется, чтобы перенаправить и я
нажмите на кнопку отправить, он все еще вставляет дубликаты данных в базу данных
как я могу предотвратить это? как я читаю на токенах, но я не вижу, как это
будет работать без обработки данных моей формы на другой странице, и я не хочу
пожалуйста, помогите?
пожалуйста, смотрите ниже HTML:
<form name="frmall"class="col s12" action="" method="post">
<!--basic info------------------------------------------------------------------------------------------------------------->
<div class="divider"></div>
<div class="section">
<h5>Basic Member Information</h5>
<div class="row">
<div class="input-field col s6">
<input id="first_name" name="txt_name" type="text" class="validate" value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_name']; } ?>">
<label for="first_name">First Name</label>
</div>
<div class="input-field col s6">
<input id="last_name" type="text" name="txt_surname" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_surname']; } ?>">
<label for="last_name">Last Name</label>
</div>
<div class="input-field col s6">
<input id="icon_telephone" type="tel" name="txt_number" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_number']; } ?>">
<label>Telephone</label>
</div>
<div class="input-field col s6">
<input id="email" type="email" name="txt_email" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_email']; } ?>">
<label for="email" data-error="wrong" data-success="right">Email</label>
</div>
<div class="input-field col s6">
<input id="idnumber" type="text" name ="txt_idnumber" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_idnumber']; } ?>">
<label>ID Number</label>
</div>
</div>
<button class="btn waves-effect waves-light" type="submit" name="btnCancel">Cancel</button>
<button class="btn waves-effect waves-light" type="submit" name="btnContinue">Continue</button>
</div>
</Form>
PHP (пожалуйста, не только для примера):
if (isset($_POST['btnContinue'])) {
$Conn->insert_main_member($name, $surname, $number, $idnumber, $email);
header(location:page.php);
}
Так как же предотвратить двойную отправку без отключения кнопки? Пожалуйста помогите
Очистите переменную post и поместите header(...)
в нужном месте (сразу после выполнения запроса к БД).
Вопрос не очень понятен …
Если у вас есть проблемы с отправкой формы несколько раз и вставкой одних и тех же значений, вы можете выполнить проверку — либо в своем скрипте (подключитесь к базе данных и проверьте), либо создать UNIQUE-индекс в таблице базы данных — тогда запись не будет вставлена , если он уже существует.
Если у вас есть проблемы со слишком большим количеством людей на сайте, и некоторые данные вставляются, а их не следует, и следует подождать, пока что-то еще не будет завершено, вы можете использовать команду LOCK TABLES для отправки в вашу базу данных.
Если у вас есть проблемы с уникальной идентификацией транзакций, вы также можете использовать токен (например, случайный хеш, сгенерированный перед отправкой вашей формы), например, в качестве скрытого поля формы для отправки вместе с данными.
1-е быстрое решение:
Вы можете отключить кнопку отправки с помощью javascript после первой отправки формы, чтобы предотвратить любую другую отправку перед перенаправлением …
2-е решение:
Добавьте токен (сгенерированный на стороне сервера) в HTML-форму в виде скрытого ввода.
При отправке формы ваш токен будет отправлен с другими данными POST.
Проверьте свою токен серверную часть, прежде чем вставлять данные в базу данных.
Изменить: Возможно, образец вашего кода (сторона сервера + HTML-форма) может помочь нам дать вам более подходящий ответ.