Функция «header ()» php сбрасывает глобальные переменные? - PullRequest
5 голосов
/ 01 сентября 2011

Я разрабатываю скрипт php, который содержит html-форму.

Если не все поля заполнены правильно, скрипт выдаст сообщение об ошибке и перенаправит обратно на ту же страницу с функцией заголовка, установивпеременная ошибки в yes с помощью метода get:

header("Location: registration_page.php?error_empty=yes");

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

Я реализую эту функцию, как я обнаружил в этом другом вопросе:

Как сохранить значение в текстовом вводе после отправки?

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

Мой вопрос: кто-нибудь знает, отменяет ли функция заголовка глобальные переменные в массиве $ _REQUEST?

А знаете ли вы, какое решение я мог бы принять? Может быть, сессии?

Заранее спасибо,

Маттео!

Ответы [ 3 ]

8 голосов
/ 01 сентября 2011

$_COOKIES останется установленным, но $_POST & $_GET будет уничтожено, когда клиент перейдет на новую страницу.Если они должны быть сохранены, они должны сначала быть сохранены в $_SESSION перед вызовом перенаправления.

session_start();
$_SESSION['last_post'] = $_POST;
header("Location: http://example.com");
exit();

// On the redirected page, use the stored POST values and unset them in $_SESSION
session_start();
if (empty($_POST) && isset($_SESSION['last_post'])) {
  $post = $_SESSION['last_post'];
  unset($_SESSION['last_post']);
}
else $post = $_POST;
3 голосов
/ 01 сентября 2011

Кто-нибудь знает, отменяет ли функция заголовка глобальные переменные в массиве $ _REQUEST?

Нет, это не так. Файлы cookie ($_COOKIE) останутся.

Очевидно, $_GET будет содержать все, что у вас есть в перенаправлении (например: $_GET['error_empty'] = 'yes') and $ _ POST` будет пустым, потому что вы не публикуете.

Таким образом, $_REQUEST будет комбинацией $_COOKIE и новых установленных вами $_GET параметров.


Вы, вероятно, не должны использовать $_REQUEST в любом случае. Укажите, где именно вы ожидаете, что параметры вашего запроса будут ...

2 голосов
/ 01 сентября 2011

Нет, но делает новый запрос. Новый запрос означает новый $_REQUEST, который не обязательно содержит все старые данные. $_COOKIE все еще будет там, но $_GET и $_POST будут новыми, означая, что $_REQUEST будет отражать это. ($_FILES также будет пустым, и хотя его нет в `$ _REQUEST, будет сброшено другое значение, предоставленное пользователем).

Если вы хотите восстановить форму, вам нужно либо поместить все переменные в URL в заголовке, либо использовать $_SESSION или setcookie, а затем восстановить из $_GET, $_SESSION или $_COOKIES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...