Форма в PHP: повторно при обновлении страницы [дубликат]

Да, если это .NET RegEx-движок. .Net поддерживает конечный конечный автомат, поставляемый с внешним стеклом. см. подробности

13
задан code-jaff 26 September 2012 в 21:57
поделиться

10 ответов

Ваш метод может работать теоретически, но есть намного более простой способ.

После отправки формы успешно выполните перенаправление. Неважно, где это сделать, но он очистит $ _POST.

header('Location: http://www.example.com/form.php');

В вашем случае это звучит так, как будто вы хотите перенаправить на страницу, на которой вы уже находитесь. Добавьте URL-адрес $ _GET в URL-адрес, если вы хотите отобразить подтверждающее сообщение.

Надеюсь, что это поможет,

Tom

38
ответ дан Tom Wright 22 August 2018 в 05:02
поделиться
  • 1
    Отличный ответ, PRG, безусловно, путь: ru.wikipedia.org/wiki/Post/Redirect/Get – Neil Williams 6 April 2009 в 19:20
  • 2
    Нужен ли мне полный URL-адрес для заголовка? – wheresrhys 6 April 2009 в 19:29
  • 3
    Просто попробовал, и это противоречит заголовку, установленному где-то еще в приложении. Я не писал все, поэтому не знаю, куда пойти, чтобы остановить его настройку. – wheresrhys 6 April 2009 в 19:35
  • 4
    Похоже, что у вас есть выход перед вашим заголовком. Вы можете умереть («здесь»); и посмотреть, что приложение отправляет. – Eddy 6 April 2009 в 19:44
  • 5
    Я считаю, что полный URL-адрес не требуется, и когда вы предоставляете относительный URL-адрес, PHP или Apache разрешает его абсолютный URL-адрес для отправки клиенту (не уверен, какой этап в цепочке это имеет место). – Ciaran McNulty 7 April 2009 в 00:08

Попробуйте мой собственный, возможно, это не лучшее решение (сделано быстро), но я тестировал его, и он работает. Протестировано в Chrome. Нажмите, чтобы посмотреть, как выглядит BR

 <?php 
session_start(); // Start session
?>
<html>
 <head>
  <title>
    Test
  </title>
 </head>
 <body>
   <form name="test" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
  </form>

  <?php

  if(isset($_POST['submit']))
    {
     $_SESSION['name'] = $_POST['name']; //  Assign $_POST value to $_SESSION variable
      header('Location: refresh.php'); // Address of this - reloaded page - in this case similar to PHP_SELF
    } else session_destroy(); // kill session, depends on what you want to do / maybe unset() function will be enough

  if(isset($_SESSION['name']))
    {
     $name = $_SESSION['name'];

     echo "User Has submitted the form and entered this name : <b> $name </b>";
     echo "<br>You can use the following form again to enter a new name."; 
    }
  ?>
 </body>
</html>
0
ответ дан Adrian Rybka 22 August 2018 в 05:02
поделиться

Лучший метод, который я нашел, - использовать javascript и css. Общий заголовок метода перенаправления php ('Местоположение: http://www.yourdomain.com/url ); будет работать, но он вызывает предупреждение «Предупреждение: невозможно изменить информацию заголовка - уже отправленные заголовки» в разных рамках и cms, таких как wordpress, drupal и т. д. Поэтому мое предложение состоит в том, чтобы следовать приведенному ниже коду

echo '<style>body{display:none;}</style>'; 
echo '<script>window.location.href = "http://www.siteurl.com/mysuccesspage";</script>'; 
exit;

Стиль тег является важным, иначе пользователь может чувствовать себя как страница, загруженная дважды. Если мы используем тег стиля с дисплеем тела none, а затем обновляем страницу, то пользовательский интерфейс будет таким же, как и заголовок php («Местоположение: ....);

Надеюсь, это поможет :)

1
ответ дан Ajith 22 August 2018 в 05:02
поделиться

Использовать расположение заголовка после успешного действия после публикации

header('Location: '.$_SERVER['HTTP_REFERER']);
1
ответ дан bytecode77 22 August 2018 в 05:02
поделиться

Решение представляет собой шаблон, обычно известный как Post / Redirect / Get

9
ответ дан David Snabel-Caunt 22 August 2018 в 05:02
поделиться

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

На стороне PHP после отправки формы успешно выполните перенаправление. Например. header ('Местоположение: http://www.example.com/form.php ');

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

0
ответ дан Mangirdas Skripka 22 August 2018 в 05:02
поделиться

Лучший способ обработки форм - использовать самообучение и перенаправление. Что-то вроде этого:

if (isset($_POST)) {
  // Perform your validation and whatever it is you wanted to do
  // Perform your redirect
}

// If we get here they didn't submit the form - display it to them.

Использование рамки CodeIgniter :

function index() {
  $this->load->library('validation');
  // Your validation rules

  if ($this->form_validation->run()) {
    // Perform your database changes via your model
    redirect('');
    return;
  }
  // The form didn't validate (or the user hasn't submitted)
  $this->load->view('yourview');
}
6
ответ дан Michael Wales 22 August 2018 в 05:02
поделиться

Это работает для меня, если я использую либо заголовок (), либо exit () в конце моего кода, например, после сохранения некоторых данных.

1
ответ дан Misterk 22 August 2018 в 05:02
поделиться

Вы можете переписать форму-submit в AJAX-путь. Если вам нужно показать HTML-контент, верните его в формате JSON и вставьте с помощью JavaScript (например, jQuery.)

2
ответ дан ShiftedReality 22 August 2018 в 05:02
поделиться

Я решил это (в php):

  1. в форме добавить уникальный идентификатор (id + counter), не основанный на time () (!!!) [/ ​​g1]
  2. в отдельный файл (postform.php), который проверял сеанс с этим уникальным идентификатором
  3. a) если не был найден сеанс с уникальным идентификатором: сообщение в базу данных и заполнение сеанса с уникальным идентификатором b ), если был найден сеанс с уникальным идентификатором: ничего не делать
  4. после перенаправления 3a / 3b на страницу результатов с заголовком ('Местоположение: http://mydomain.com/mypage ' )

Результат: нет повторных действий по обновлению / откидыванию и только повторное уведомление предупреждения с двойным щелчком (но не повторное действие)

1
ответ дан stema 22 August 2018 в 05:02
поделиться
  • 1
    Спасибо, Пауль, у меня есть основная идея, почему мы не должны использовать отправку формы на той же странице. Предыдущие времена я использовал форму submit на той же странице. После обработки формы я перенаправляю ее на себя с некоторым параметром get. – Dinesh Patra 23 July 2015 в 10:04
Другие вопросы по тегам:

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