2013-01-14 2 views
0

В настоящее время я работаю над веб-приложением, которое использует CodeIgniter, в частности, я создаю формы регистрации.CodeIgniter multi-step signup

Эта форма состоит из 3-х различных этапов, мне просто интересно, какой лучший способ был бы для сохранения информации между двумя шагами? Я только хочу сохранить всю информацию в базе данных после завершения последнего стапа.

Должен ли я использовать собственную сессию PHP для этого? Или я должен использовать CI flashdata?

+0

'flashdata' будет только последним для одной страницы. Почему бы просто не использовать [сеансы CI] (http://ellislab.com/codeigniter/user-guide/libraries/sessions.html)? –

+1

См. Это :: http: //stackoverflow.com/questions/5083014/multi-step-page-form-in-php-codeigniter –

+0

@AaronW. Возможно, я тоже искал предложения, какой был лучший способ. –

ответ

1

Я использовал скрытые поля и сеансы. Я стараюсь сохранять все значения формы в текстовом файле в конце каждого этапа. Затем, если что-то происходит на любом этапе, я могу выбрать, что делать с данными, сохраненными в текстовом файле.

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

Я обычно использую текстовый файл как способ по умолчанию для сохранения всех данных с любого этапа многоступенчатой ​​формы. В конце формы я могу обработать данные в БД и удалить текстовый файл. Чтобы поймать частично завершенные регистрации, я могу написать скрипт, который выполняется через 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.

+0

Можете ли вы объяснить, почему вы считаете, что лучший способ сохранить массив в файле как противоположный для сохранения в базе данных с чем-то вроде serialize (array())? Также, чтобы указать, у CI есть класс шифрования, который позволяет вам выбирать шифры. – Timmytjc

+0

Сначала я хочу предисловие к моему комментарию, сказав, что мой опыт полностью связан с моими собственными проектами с использованием настроек LAMP. Я полагаю, что мое смещение к текстовым файлам над БД можно проследить до неоптимальной настройки LAMP. В моих dev-блоках я обнаружил, что слишком много соединений DB (иногда ниже 1000) могут сбить мой четырехъядерный сервер Ubuntu. Я не нашел, что это правда на моем выделенном сервере, но я также сделал все, что мог, чтобы избежать этого. Я также обнаружил, что сохранение данных в БД происходит медленнее, чем в текстовый файл (опять же не протестированный на моем выделенном сервере). –

+0

На моем выделенном сервере я запускаю в основном сайты WordPress, которые могут связывать немало подключений MySQL. В результате этого опыта я контролирую количество подключений DB, которые я открываю с помощью любого инструмента. Самое легкое решение, которое я нашел, - это использовать текстовые файлы и выполнять последующий процесс через работу cron. Cronjob с 1 DB cxn может обрабатывать много текстового файла менее чем за минуту. Как правило, я могу обрабатывать обратную связь пользователей с текстовым файлом и 1 минута задержки на его получение в БД, это не проблема. –

0

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

+0

Я бы не рекомендовал этот процесс.Как бы вы защитили меня от манипулирования скрытыми входными значениями с помощью такой программы, как firebug и успешно завершив следующий шаг? Вам нужно будет проверить данные скрытой формы, как показано, что этот процесс бессмысленен. – Timmytjc

+0

@Timmytjc Спасибо за ваш отзыв. Я буду помнить об этом в будущем. – cartina

0

Я столкнулся с этим делом в моем последнем проекте, и я использовал сессию Codeigniter, чтобы сохранить данные, представленные после проверки в пользовательских данных сессии в виде массива на последнем этапе я отправить данные в БД

Смежные вопросы