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

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

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

<form name="example" action="action.php" method="POST"> <input type="text" name="one"> <input type="text" name="two"> <input type="text" name="three"> <input type="submit" value="Submit!"> </form> 

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, потому что вход будет слишком большим. Я не хочу использовать СЕССИЮ, если это возможно. Это возможно?

Если вы не хотите использовать сеансы, единственное, что вы можете сделать, это 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; } } ?> <form action="form.php"> <input name="foo" value="<?php if (!empty($_POST['foo'])) echo htmlentities($_POST['foo']); ?>"> ... </form> 

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

 // 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];