Управление состоянием PHP WebApp с помощью SESSION - PullRequest
1 голос
/ 01 июля 2011

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

Прямо сейчас, когда шаг подтвержден и завершен, я переключаю $_SESSION['step'] на следующий шаг в строке и проверяю эту переменную при загрузке следующего шага, чтобы убедиться, что он действителен.Если пользователь пытается перейти к шагу, который находится вне последовательности, $_SESSION['step'] предотвращает загрузку шага.

Это правильный подход?Кроме того, после завершения шага я хочу, чтобы пользователь мог вернуться и редактировать значения, которые были введены на любом предыдущем шаге.Мой подход не допускает этого, так как я не уверен, как бы я изменил сессию на шаг, который они пересматривают, не зная, является ли это действительным запросом или нет.будет высоко ценится!

1 Ответ

2 голосов
/ 01 июля 2011

В этом подходе нет ничего плохого, хотя вы можете быть немного ограничены в том, что он работает не только для одной формы.Однако, если это всего лишь одно небольшое приложение, то не стоит беспокоиться.

Второй вопрос, я не уверен, что понимаю, но $ _SESSION может принять любой тип данных, включая массивы, поэтому просто заполните $ _SESSION с помощьюгде вы находитесь и что вы сделали в форме до сих пор;

$_SESSION['my_form'] = array (
   'current_step' = 'step_2',
   'step_1' = array ( // the form elements ),
   'step_2' = array ( // the form elements ),
   'step_3' = array ( // the form elements ),
   'step_4' = array ( // the form elements ),
) ;

Далее вы проводите проверку в каждой точке как обычно.Вы также можете поставить небольшой флажок в каждой форме, независимо от того, были ли они заполнены или нет;

   'step_2' = array (
      'complete' = true,
      // form elements / fields here
   ),

Еще один способ разрезать это - использовать одну из многих тысяч динамических форм.Например, используя JQuery, вы можете использовать плагин Accordion (из пользовательского интерфейса JQuery) для имитации всего этого всего лишь на одной HTML-странице.

...