При обновлении страницы будут повторно отправлены данные формы, возможно ли это предотвратить?(PHP) - PullRequest
2 голосов
/ 12 декабря 2010

Я создаю форму и использую ее для получения ввода данных для отправки в базу данных MySQL через php.Если кто-то нажимает кнопку «Обновить» на странице, Firefox пересылает последний набор информации на страницу php, которая, в свою очередь, отправляет ее в базу данных.Есть ли способ предотвратить это?

Ответы [ 6 ]

6 голосов
/ 12 декабря 2010

Чтобы решить эту проблему, существует Опубликовать / Перенаправить / Получить шаблон Вы должны следовать:)

Post / Redirect / Get (PRG) является распространенным шаблон дизайна для веб-разработчиков помочь избежать определенной дубликата формы представления и позволяют пользовательским агентам вести себя более интуитивно с закладками и кнопка обновления.

5 голосов
/ 12 декабря 2010

Вам нужно сделать перенаправление на ту же страницу:

$current_url = (empty($_SERVER['HTTPS']) ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header ('Location: ' . $current_url);
exit ();
2 голосов
/ 12 декабря 2010

Обычный способ сделать это - использовать перенаправление.

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

Общий эффект этого заключается в том, что при перенаправлении не было отправлено POST-данных, поэтому обновление не может привести к повторной отправке и повреждению приложения / базы данных.

0 голосов
/ 12 декабря 2010

Если вам не нравится ни один из вышеперечисленных и вы используете JQUERY.Вы можете сделать простую функцию загрузки или ajax, чтобы отправить информацию в ваш скрипт.

Это исключит возможность повторной отправки, и вы не перезагрузите страницу.Мне больше нравится этот метод, он быстрый и простой.

Другое решение, которое вы можете сделать, это отправить форму на другую страницу, примерно так:

<form action="chat_server.php" method="post">
      Message: <input type="text" name="message" />
      <input type="submit" />
</form>

На chat_server.phpфайл, вы делаете то, что вам нужно сделать с данными, и в конце вы делаете

echo '<meta http-equiv="REFRESH" content="0; url=chat.php" />';

Попробуйте, должны избавиться от вашей проблемы.

0 голосов
/ 12 декабря 2010

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

0 голосов
/ 12 декабря 2010

Да. После вставки данных вы делаете перенаправление.

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