Обновление веб-страницы вставляет данные снова в DB

У меня есть php веб-страница с формой. После заполнения формы в веб-странице я могу отправить его серверу. Но после этого, если я обновляю страницу, она вставляет ту же запись на базу данных. Там какие-либо решения к этой проблеме?

5
задан Joe 28 June 2010 в 16:04
поделиться

7 ответов

Используйте шаблон POST / Redirect / GET . Это не позволит пользователю повторно отправить ту же форму.

9
ответ дан 18 December 2019 в 13:10
поделиться

Есть несколько способов, например:

  • Создать токен, который вы вставляете в форму (скрытое поле). если один и тот же токен отправляется дважды, отклоните вторую отправку.
  • Проверить в базе данных, существует ли уже идентичный пост.
  • Сохраните отправку формы в переменной сеанса.
  • Перенаправить пользователя на вторую страницу после отправки, используя шаблон Post / Redirect / Get (предпочтительно в сочетании с одним из вышеперечисленных).
4
ответ дан 18 December 2019 в 13:10
поделиться

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

1
ответ дан 18 December 2019 в 13:10
поделиться

Вот что означает «Обновить»: «сделай это снова».

Вы можете проверить, есть ли данные, которые соответствуют отправленным данным, уже в базе данных. Если да, вы можете отклонить новую заявку.

1
ответ дан 18 December 2019 в 13:10
поделиться

Перед вставкой в ​​базу данных проверьте, не дублируются ли уже одни и те же значения, и если они дублируются, не вставляйте. Еще больше помогает проверка нескольких столбцов. Например, вместо проверки только «имени пользователя» вы должны проверить «имя пользователя» И «пароль».

Очевидно, что приведенные выше примеры - подделка, но вы должны уловить суть.

0
ответ дан 18 December 2019 в 13:10
поделиться

Вы можете изменить свой запрос на INSERT IGNORE INTO table_name ...

, это предотвратит двойную вставку.

-1
ответ дан 18 December 2019 в 13:10
поделиться

Вы можете создать страницу process.php и установить для нее действие формы .

In process.php

//code to insert item to database
header('Location: YOUR_FORM_PAGE_HERE);

Затем он отправит их обратно на исходную страницу, и не будет никаких данных публикации

0
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: