Я использовал скрытые поля и сеансы. Я стараюсь сохранять все значения формы в текстовом файле в конце каждого этапа. Затем, если что-то происходит на любом этапе, я могу выбрать, что делать с данными, сохраненными в текстовом файле.
Например, если вы хотите, чтобы вы могли захватить адрес электронной почты на первой странице. Если форма не будет завершена (как на всех этапах успешно завершена), вы можете отправить электронное письмо потенциальному пользователю со ссылкой на форму регистрации на соответствующем этапе. Будущему пользователю не нужно было заполнять все поля, которые они заполняли, и у вас появляется возможность вернуть их в качестве пользователя.
Я обычно использую текстовый файл как способ по умолчанию для сохранения всех данных с любого этапа многоступенчатой формы. В конце формы я могу обработать данные в БД и удалить текстовый файл. Чтобы поймать частично завершенные регистрации, я могу написать скрипт, который выполняется через cronjob, который запускается каждую минуту. Я всегда сохраняю временную метку в файле данных, представляющем последний раз, когда файл был обновлен. Если временная метка больше, чем за X минут, вы запустили ее, не завершив скрипт регистрации или просто удали ее.
Сохранение данных на каждом этапе прост. После первого этапа вы создаете $dataFile
с $dataFile = file_put_contents(json_encode($data));
, где $data = array('timestamp'=>...) + $_POST;
. На каждом этапе после первого я использую $data = json_decode(file_get_contents($dataFile), TRUE) + $_POST;
и $data['timestamp'] = ...;
. Затем используйте file_put_contents, чтобы сохранить его обратно в файл. Очевидно, вам нужно будет отслеживать переменную $ dataFile, но это легко сделать с помощью скрытых полей или данных сеанса.
Файл будет доступен только за X минут до его обработки и удаления, но если вы хотите иметь безопасность в текстовом файле в течение этого короткого периода времени, я бы предложил искать шифр или создать свой собственный вариант на простой шифр Цезаря. Используйте шифр в именах полей, а также значения.
В декабре я работал над вопросом о многоэтапных формах в последнем CodeIgniter для себя. Я не могу сказать, что это общепринятая передовая практика, но текстовый файл хорошо работал для меня в прошлом. Я разместил здесь несколько примеров кода для многоступенчатой формы: Multi-Stage Form Example.
'flashdata' будет только последним для одной страницы. Почему бы просто не использовать [сеансы CI] (http://ellislab.com/codeigniter/user-guide/libraries/sessions.html)? –
См. Это :: http: //stackoverflow.com/questions/5083014/multi-step-page-form-in-php-codeigniter –
@AaronW. Возможно, я тоже искал предложения, какой был лучший способ. –