Создание многостраничной формы PHP с сессиями - PullRequest
2 голосов
/ 13 октября 2010

Мне нужно создать довольно обширную форму с PHP / MySQL с большим количеством условной логики, которая в конечном итоге заканчивается отправкой в ​​базу данных MySQL. Таким образом, в основном пользователь делает свой первый выбор с помощью радиокнопки (должно быть потому, что они «выбирают» изображения), а затем перенаправляется на следующую «страницу» формы на основе этого представления. Это представление ТАКЖЕ должно быть сохранено в сеансе или файле cookie, потому что в конце формы я соберу все их входные данные и заполню строку в базе данных. Каким должен быть мой подход? Прямо сейчас я пишу формы, которые сохраняют данные POST в СЕССИИ, а затем заполняют строку базы данных в конце, но как только я ввожу условную логику от страницы к странице, сеансы прерываются и не отправляются. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Походит на классический интерфейс "волшебника".Быстрый поиск в Google поднял это, но я не уверен, что это хорошо.

http://www.phpclasses.org/browse/file/8308.html

2 голосов
/ 13 октября 2010

Я сделал именно это с системой психологического тестирования из 250 вопросов. Как только вы обдумаете это, это не так уж сложно. Решение, которое я использовал, заключалось в том, чтобы выводить в виде сложенных элементов div, а не беспокоиться о том, чтобы делать отдельные страницы и отправлять сообщения в сессию - это чище. Кнопка отправки действует на каждом элементе div, но она отправляет только последний элемент - функция показывает следующий элемент div и скрывает текущий элемент div при нажатии на каждой другой «странице». Используя переменные и PHP-математику, я могу настроить тест на разные комбинации - например, 1 страница из 250, 5 страниц из 50 и т. Д. Ваша самая сложная логика заключается в построении страницы с соответствующим количеством вопросов и создании уверен, что div'ы эффективно озаглавлены для работы с вашим скриптом show / hide. В моем случае я использую функциональность JQuery для показа / скрытия. Работает как шарм.

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

1 голос
/ 13 октября 2010

Преимуществом сохранения всех данных в одном обновлении в конце мастера является простота. Преимущество записи в БД после каждого шага состоит в том, что пользователь может вернуться и завершить работу мастера позже - вы не привязаны к текущему сеансу пользователя.

Если вы склонны придерживаться подхода «вставить в конец», я бы порекомендовал идею bpeterson76 об использовании JS для отображения / скрытия разделов в физической форме синглов - просто убедитесь, что у вас есть контроль над пользователем Кнопка «Назад», в противном случае пользователь может потерять все свои ответы.

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