Как я могу избежать потери информации между сеансами многошаговой формы с использованием PHP? - PullRequest
2 голосов
/ 22 февраля 2011

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

<form id="propertyform" method="post" action="industrial.php">
    <select class="element select small" id="element_1" name="property">
        <option value="" selected="selected"></option>
        <option value="industrial" >Industrial</option>
        <option value="land" >Land</option>
        <option value="office" >Office</option>
    </select>
</form>

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

Я разрабатываю продукт для рынка психологии, который проводит 250 вопросов психологического тестирования. Чтобы сделать тест не слишком сложным, я разбил форму на 25 сегментов вопросов, одновременно выводя ее в цикле через теги div с добавленным последовательным идентификатором (т. Е. Div1, div2, div3). Каждый div установлен для отображения: никто, кроме первого.

Затем я предоставляю пользователю кнопку, которая переключает текущий div + 1 (т. Е. Если бы он был на div 1, он делал бы $(#div2).show() и т. Д. Кнопки Назад делают противоположное.

Важной частью является то, что форма охватывает ВСЕ div. Тогда нужно просто поменять кнопку «вперед / назад» в конце кнопкой «Отправить».

Вуаля! Да, хай-тек. Но БЫСТРО .... и нет шансов НИКОГДА потерять значения, идущие вперед или назад.

Итак, грубый усеченный пример:

<form>
  <div id="div1">
     First 25 Questions
     <input type="button">shows next div</input>
  </div>
  <div id="div2" style="display:none">
    Second 25 Questions
    <input type="submit">Submit Form</input>
  </div>
</form>
1 голос
/ 22 февраля 2011

Вы устанавливаете значения в своих формах из своего сеанса?

Пример

<form id="step1">
     <input type="text" name="firstQuestion" id="firstQuestion" 
        <? if(isset($_SESSION['firstQuestion'])): ?> value="<?=$_SESSION['firstQuestion']?>" 
        <? endif; ?> >

     <select class="element select small" id="element_1" name="property"> 
          <option value="" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == ""): ?> selected="selected"<? endif; ?> ></option> 
          <option value="industrial" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "industrial"): ?> selected="selected"<? endif; ?>>Industrial</option> 
          <option value="land" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "land"): ?> selected="selected"<? endif; ?>>Land</option> 
          <option value="office" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "office"): ?> selected="selected"<? endif; ?>>Office</option>
     </select>
</form>
0 голосов
/ 22 февраля 2011

Чтобы предотвратить обновление и навигацию по истории от запуска обработки формы, добавьте что-то подобное в поток после , обработчик формы сделал свое дело:

header("Location: myStep2.php");

Это перенаправитпользователь myStep2.php и предотвращение вытеснения значений.

Предостережение: если вы будете следовать этому методу и вам нужно разрешить пользователям возвращаться на предыдущие страницы, вам потребуется предоставить меню навигации, кнопку,ссылка и т.д., которые позволят это.Нажатие «Назад» повторно передаст значения предыдущей страницы.

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