Двойная подача при обновлении php
Я пытаюсь исправить проблему двойной отправки в моем сценарии. Когда я нажимаю "Отправить", MySQL обновляет только один раз (что я и хочу). Тем не менее, когда я нажимаю обновить, он обновляет MySQL снова. Кажется, он игнорирует оператор if после нажатия кнопки обновления. Что бы я сделал, чтобы остановить это
вот мой код
if (isset($_POST['submitButton'])) {
//do something
}
<form action = "table.php" method="post">
<label for="submitButton"></label>
<input type="submit" name="submitButton" id="submitButton"
value="Submit Form"/>
</form>
5 ответов
Когда вы обновляете страницу - ПОСТ отправляется снова
Некоторые браузеры на самом деле предупреждают вас об этом.
Чтобы предотвратить это, я делаю:
if (isset($_POST['submitButton'])) {
//do something
//..do all post stuff
header('Location: thisPage.php'); //clears POST
}
<form action = "table.php" method="post">
<label for="submitButton"></label>
<input type="submit" name="submitButton" id="submitButton"
value="Submit Form"/>
</form>
Я использую сеанс, чтобы не делать репосты.
session_start();
if( isset($_SESSION['your_variable']) &&
$_SESSION['your_variable'] == $_POST['your_variable'] ){
// re-post, don't do anything.
}
else{
$_SESSION['your_variable'] = $_POST['your_variable'];
// new post, go do something.
}
Это стандартное поведение: при перезагрузке страницы, если она была размещена, ваш браузер повторяет тот же запрос (с POST).
Чтобы избежать этого, вы можете использовать перенаправление на ту же страницу, используя:
<?php
header("location:".$mycurrentURl);
Это перезагрузит страницу через запрос get. Это предотвратит двойные посты.
Когда вы обновите страницу. Браузер опубликовать все данные снова. так что то же самое происходит снова, чтобы преодолеть это после выполнения чего-то перенаправить браузер на ту же страницу снова, как это
if (isset($_POST['submitButton'])) {
//do something
header("location:table.php");
}
Я обычно не беспокоюсь об этом и просто полагаюсь на то, что пользователь НЕ публикует повторно, если он этого не хочет. Однако, если вы хотите запретить это, вы можете использовать одноразовый номер.