Intereting Posts
Настройка размеров изображения в HTML Получение значений атрибутов HTML «способ DOM 0» Как получить элементы html из тега объекта? Лучшая альтернатива, чем & nbsp; для отображения пустых ячеек таблицы HTML? Html Agility Pack – удалить элемент, но не innerHtml Python – beautifulsoup, применяется в каждом текстовом файле в папке и создает новый текстовый файл Как изменить цвет изображения SVG при наведении курсора? Использование jQuery, как получить координаты кликов на целевом элементе Почему «element.innerHTML + =» плохой код? Изображение фонового изображения HTML смещено на x пикселей из центра Параметр php wordwrap cut при работе со странными символами Что вы называете тегами, которые не нуждаются в конечном теге? Javascript – голова, тело или jQuery? «Таблица стилей не была загружена, потому что ее тип MIME,« text / html »не является« text / css » Найти абсолютную или относительную позицию текста (буквы или слова) или в html?

PHP header () перенаправляет переменные POST

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

HTML будет выглядеть так …

action.php будет выглядеть так …

 if(error_check($_POST['one']) == true){ header('Location: form.php'); // Here is where I need the data to POST back to the form page. } else { // function to insert data into database header('Location: posted.php'); } 

В случае ошибки, мне нужно, чтобы POST вернулся на первую страницу. Я не могу использовать GET, потому что вход будет слишком большим. Я не хочу использовать СЕССИЮ, если это возможно. Это возможно?

Solutions Collecting From Web of "PHP header () перенаправляет переменные POST"

Если вы не хотите использовать сеансы, единственное, что вы можете сделать, это POST на той же странице. В любом случае, ИМО является наилучшим решением.

 // form.php < ?php if (!empty($_POST['submit'])) { // validate if ($allGood) { // put data into database or whatever needs to be done header('Location: nextpage.php'); exit; } } ?> 
...

Это можно сделать более элегантным, но вы получите идею …

 // from http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => array( 'method' => 'POST', 'content' => $data )); if ($optional_headers !== null) { $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $url, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; } 

Невозможно перенаправить POST в другое место. Когда вы отправили запрос, браузер получит ответ от сервера, а затем будет выполнен POST. Все это – новый запрос. Когда вы укажете заголовок местоположения, браузер всегда будет использовать метод GET для извлечения следующей страницы.

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

Было бы полезно проверить данные формы перед отправкой через POST. Вы должны создать функцию JavaScript, чтобы проверить форму на наличие ошибок, а затем отправить форму. Это предотвратит отправку данных снова и снова, возможно, замедляя работу браузера и используя объем передачи на сервере.

Редактировать:

Если безопасность является проблемой, выполнение запроса AJAX для проверки данных будет наилучшим способом. Ответ от запроса AJAX определит, должна ли форма быть отправлена.

Используйте шаблон smarty для вашего материала, а затем просто установите массив POST в качестве массива smarty и откройте шаблон. В шаблоне просто выделите массив так, чтобы он прошел:

 if(correct){ header("Location: passed.php"); } else { $smarty->assign("variables", $_POST); $smarty->display("register_error.php"); exit; } 

Я еще не пробовал это, но я собираюсь попробовать это как решение и дам вам знать, что я нахожу. Но, конечно, этот метод предполагает, что вы используете smarty.

Если нет, вы можете просто воссоздать свою форму там на странице с ошибкой и эхо-информацией в форму или вы можете отправить обратно не важные данные в get и получить их

ех.

 register.php?name=mr_jones&address==...... echo $_GET[name];