Да, если это .NET RegEx-движок. .Net поддерживает конечный конечный автомат, поставляемый с внешним стеклом. см. подробности
Ваш метод может работать теоретически, но есть намного более простой способ.
После отправки формы успешно выполните перенаправление. Неважно, где это сделать, но он очистит $ _POST.
header('Location: http://www.example.com/form.php');
В вашем случае это звучит так, как будто вы хотите перенаправить на страницу, на которой вы уже находитесь. Добавьте URL-адрес $ _GET в URL-адрес, если вы хотите отобразить подтверждающее сообщение.
Надеюсь, что это поможет,
Tom
Попробуйте мой собственный, возможно, это не лучшее решение (сделано быстро), но я тестировал его, и он работает. Протестировано в 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>
Лучший метод, который я нашел, - использовать 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 («Местоположение: ....);
Надеюсь, это поможет :)
Использовать расположение заголовка после успешного действия после публикации
header('Location: '.$_SERVER['HTTP_REFERER']);
Решение представляет собой шаблон, обычно известный как Post / Redirect / Get
Переадресация заголовка после публикации необходима, но недостаточно.
На стороне PHP после отправки формы успешно выполните перенаправление. Например. header ('Местоположение: http://www.example.com/form.php ');
Но этого недостаточно. Некоторые пользователи дважды нажимают ссылки (doubleclick). Требуется JavaScript, который отключил бы кнопку отправки после первого щелчка.
Лучший способ обработки форм - использовать самообучение и перенаправление. Что-то вроде этого:
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');
}
Это работает для меня, если я использую либо заголовок (), либо exit () в конце моего кода, например, после сохранения некоторых данных.
Вы можете переписать форму-submit в AJAX-путь. Если вам нужно показать HTML-контент, верните его в формате JSON и вставьте с помощью JavaScript (например, jQuery.)
Я решил это (в php):
Результат: нет повторных действий по обновлению / откидыванию и только повторное уведомление предупреждения с двойным щелчком (но не повторное действие)