Запоминание формы - PullRequest
       16

Запоминание формы

0 голосов
/ 27 апреля 2010

Извините, если раньше об этом спрашивали, но я чувствую, что моя ситуация немного отличается ...

У меня огромная форма (например, 50 вопросов, включающих флажки, выпадающие списки, текстовые поля и текстовые поля)

Когда пользователь отправляет форму и страница проверки выдает ошибку, есть ли простой способ сохранить введенную информацию?

Моя начальная форма находится в form.php, а затем действие формы - form_posted.php, прежде чем что-либо запускается в form_posted.php. У меня есть код проверки, который отправляет пользователя обратно в form.php с номером ошибки (например form.php? error = 3) если возникла проблема с каким-либо конкретным. Это сделано с

header("form.php?error=3")

так, когда я вернусь к form.php, существуют ли опубликованные переменные? даже если страница не была специально отправлена ​​с какими-либо опубликованными переменными.

Также, если это так, полностью ли безопасно сделать значение текстового поля таким, каким оно было раньше?

как <input type="text" value="php echo $_POSTED["username"] ?>">

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Вы должны использовать сессий , чтобы справиться с этим.В коде обработки формы установите каждый элемент (, который вы распознаете ) из массива $ _POST, в переменную сеанса, например:

session_start();

$_SESSION["myField"] = $_POST["myField"];
$_SESSION["myField2"] = $_POST["myField2"];

Теперь, если вы перенаправите обратно к исходномуСтраница формы (например, если есть ошибка), вы можете использовать, например:

<input type="text" name="myField" value="<?php echo $_SESSION["myField"]; ?>" />

для предварительного заполнения поля.Вам нужно будет добавить <?php session_start(); ?> вверху страницы формы, чтобы убедиться, что заданные переменные сеанса доступны для формы.

1 голос
/ 27 апреля 2010

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

Также было бы лучше не нарушать их представления о том, что будет делать кнопка обновления. Как пользователь, я ожидаю, что страница выдаст мне тот же результат, если обновлять страницу в 99% случаев. (Заметными исключениями являются формы с CAPTCHA и регистрационные формы, которые все еще должны хорошо реагировать на повторную подачу). Большинство браузеров спрашивают пользователя, уверены ли они, что хотят повторно отправить форму.

Если вы хотите использовать сеансы, вам нужно будет использовать функцию session_start () на обеих страницах. На странице формы, чтобы получить информацию о сеансе, и на странице отправки, чтобы сохранить ее в сеансе. Я не рекомендовал бы хранить весь массив $ _POST в переменной сеанса, вы не знаете, что там находится и сколько места это займет. Вы можете посмотреть на ответ richsage о том, как хранить информацию о $ _POST в $ _SESSION. Вы также можете подумать о том, чтобы сохранить нужные поля в массиве и использовать массив для сохранения информации следующим образом:

$allowed_fields = array('name', 'company', 'email');
foreach($allowed_fields as $field) {
  if(isset($_POST[$field])) {
    $_SESSION[$field] = $_POST[$field];
  }
}

При выводе обратно на форму обязательно экранируйте с помощью чего-то вроде htmlspecialchars () или htmlentities () "> htmlentities (), например так:

<input type="text" name="myField" value="<?php echo htmlspecialchars($_SESSION['myField']); ?>" />

В противном случае ваш код может быть подвержен XSS (межсайтовый скриптинг) .

0 голосов
/ 27 апреля 2010

Сессии это то, что вам нужно. Пожалуйста, не стесняйтесь читать прекрасное руководство :)

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