Очистить форму публикации данных - PullRequest
1 голос
/ 24 февраля 2012

У меня есть 3-страничная система, форма> сообщение> отправлено, на месте.Проблема, с которой я столкнулся, заключается в том, что если пользователь нажимает кнопку «Назад» на отправленной странице, он переносит их на страницу формы с заполненными значениями, поэтому, если он нажимает кнопку «Отправить», он повторно вводит данные.

В обычном случае пользователь обычно возвращается на страницу индекса, и есть процесс, с помощью которого мы проверяем, сколько раз ip пользователей появлялся в указанной базе данных (mysql) за последний час, и ограничиваемпост способность на основе этого.Но если они нажмут обратно, эта система станет недействительной.

Единственный код, который я могу использовать, чтобы предотвратить это:

ob_start();
header('Cache-Control: private');

Но, похоже, это ничего не делает.

Любая помощь будет высоко ценится!

Ответы [ 4 ]

0 голосов
/ 03 октября 2014

У меня есть быстрое решение для этого:

<?php
//Check for double post
//Start session
session_start();
$process = true;
if(isset($_POST)){
    if(isset($_SESSION['olddata'])){
       if($_SESSION['olddata'] == $_POST){
          $process = false;
       }
       $_SESSION['olddata'] == $_POST;
    }

}

//Now you can check $process before you do something with the data

?>

0 голосов
/ 24 февраля 2012

Вы можете попробовать:

header('Cache-Control: no-cache');

Я не вижу, как включение буферизации вывода предотвратит это поведение, поэтому вы можете пропустить вызовы ob_start () и ob_flush ().

Но я согласен, что было бы лучше сделать:

header("Location: mypage.php?somepublicdata=this+is+public");

и затем использовать $ _SESSION для переноса данных $ _POST.

0 голосов
/ 24 февраля 2012

Не должно ли что-то подобное работать? (Я сам не пробовал.)

<head>
<script>
function clearForms()
{
  var i;
  for (i = 0; (i < document.forms.length); i++) {
    document.forms[i].reset();
  }
}
</script>
</head>
<body onLoad="clearForms()" onUnload="clearForms()">
</body>
0 голосов
/ 24 февраля 2012

Поставьте проверку POST непосредственно перед отправкой данных или перенаправьте (измените местоположение заголовка) на другую страницу успеха / отправки, которая содержит требуемую информацию. Таким образом, если они нажимают назад, они возвращаются к исходной отправленной странице, которая перенаправляет их обратно на страницу успеха / отправленной страницы.

Существуют и другие решения, но все зависит от цели - предотвратить ли глупого ошибку обычного пользователя или злонамеренного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...