2012-02-22 7 views
-1

Можно создать дубликат:
Preventing duplicate form submissionsформа представить только один раз

Я поставил условие, которое

if(isset($_POST)){ 
    //do some action 
} 

Впервые условие проверяется, она работает но если пользователь обновляет страницу, он выполняет действие 2-го раза. Как я должен проверить?

+0

не понял ваш вопрос ? –

+0

Я думаю, что для этого на уровне stackoverflow должно быть тысячи ответов ... –

ответ

0

Вы можете отключить кнопку отправки после вставки или обновления в базе данных, например unset ($ _ POST ['btn_submit]);

+0

Если страница обновлена, браузер повторно отправит данные, а '$ _POST' будет заселен. – Quentin

+0

unset() уничтожает указанные переменные. Проверьте это: http: //php.net/manual/en/function.unset.php – Hkachhia

+0

1. Пользователь отправляет данные формы. 2. PHP заполняет '$ _POST'. 3. База данных обновлений PHP. 4. PHP удаляет данные из '$ _POST'. 5. Пользователь ** повторно обновляет данные ** путем обновления. 5. PHP ** repopulate ** '$ _POST' с предоставленными пользователем данными. 6. База данных обновлений PHP. 7. PHP удаляет данные из '$ _POST'. – Quentin

0

Использование the Post-Redirect-Get pattern.

  1. браузер делает запрос POST
  2. Сервер изменяет базу данных и возвращает редирект ответ
  3. Browser делает GET Request
  4. Сервер показывает страницу в 200 ответ

Освежающий просто перезагрузите страница, возвращенная на этапе 4, без повторения этапа 2.

0

Как правило, обработка формы может быть PLIT 3 шага:

  • форма отображения
  • обрабатывать данные
  • перенаправления на страницу результатов (например, страница благодарности)

Перенаправление сделано, чтобы избежать повторного представления формы при обновлении. Итак, в вашем случае после обработки вы можете перенаправить пользователя обратно в ту же форму снова. Если он обновит страницу, форма не будет отправлена ​​повторно, так как браузер был перенаправлен, и последнее действие было запросом GET, а не POST.

Для фактического перенаправления в PHP, вы можете использовать функцию header:

if(isset($_POST)) { 
    ... 
    // redirect back to the form 
    header("Location: form.php"); 
} 
+1

Заголовок ответа HTTP «Location» принимает абсолютный URI, а не относительный. Не зависеть от коррекции ошибок браузера. (По крайней мере, один браузер будет перенаправлять, жалуясь на ошибку пользователя). – Quentin

+0

Вы правы. Я проверил спецификации HTTP http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30, и для этого требуется абсолютный URI. Я не знал этого, спасибо за подсказку. –

0

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

if(isset($_POST)) 
{ 
    // do some action 


// redirect to same page so that values will not get posted again 
header("location:samepage.php"); 
} 
+0

Заголовок ответа HTTP «Location» принимает абсолютный URI, а не относительный. Не зависеть от коррекции ошибок браузера. (По крайней мере, один браузер будет перенаправлять, жалуясь на ошибку пользователя). – Quentin

Смежные вопросы