двойная подача при обновлении php - PullRequest
3 голосов
/ 16 августа 2011

Я пытаюсь исправить проблему двойной отправки в моем скрипте.Когда я нажимаю «Отправить», 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 ]

7 голосов
/ 16 августа 2011

Когда вы обновляете страницу - ПОСЛЕ ОТПРАВЛЯЕТСЯ СНОВА

Некоторые браузеры фактически предупреждают вас о том, что происходит.

Чтобы предотвратить это, я делаю:

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>
4 голосов
/ 30 января 2012

Я использую сеанс, чтобы избежать повторного размещения.

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.
 } 
2 голосов
/ 16 августа 2011

Это стандартное поведение: при перезагрузке страницы, если она была опубликована, ваш браузер повторяет тот же запрос (с POST).

Чтобы избежать этого, вы можете использовать перенаправление на ту же страницу, используя:

 <?php
 header("location:".$mycurrentURl);

Это перезагрузит страницу через запрос get. Это предотвратит двойные посты.

1 голос
/ 16 августа 2011

Я обычно не беспокоюсь об этом и просто полагаюсь на то, что пользователь НЕ публикует повторно, если он этого не хочет. Однако, если вы хотите запретить это, вы можете использовать nonce .

http://en.wikipedia.org/wiki/Cryptographic_nonce

1 голос
/ 16 августа 2011

при обновлении страницы.браузер опубликовать все данные снова.так что то же самое происходит снова, чтобы преодолеть это после выполнения чего-то, перенаправить браузер снова на ту же страницу, как это

    if (isset($_POST['submitButton'])) { 
         //do something

         header("location:table.php");
    }
...