Codeigniter с использованием flashdata и form_validation - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь изучить PHP с codeigniter, столкнулся с проблемой.Пишу форму регистрации пользователя с валидацией формы.Если пользовательский ввод прошел проверку, он проверит базу данных, если электронная почта уже существует в базе данных.Если он существует, он должен показать ошибку пользователю.Я сохраняю эту ошибку в переменной сеанса flashdata и перенаправляю пользователя в форму регистрации.Но после перенаправления форма set_values ​​пуста.Я хочу, чтобы он был заполнен значениями, которые пользователь уже заполнил ранее.Если я использую $this->load->view('registration_form') .. значения полей заполняются так, как я хочу, но ошибка базы данных не отображается, поскольку это не новый вызов сервера.

Исчезают ли значения form_validation (set_value ()) приредирект?Если да, как я могу предварительно заполнить значения полей?

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

Если вы перенаправляете, когда форма, которая отправляет себе сообщение, является действительной, тогда да, вы потеряете set_value (), так как теперь в массиве $ _POST ничего нет - поэтому вы перенаправляете, поэтому пользователь не будет повторно отправлять формупри обновлении.

Вам нужно создать собственное правило проверки в функции обратного вызова на том же контроллере.См. Здесь http://codeigniter.com/user_guide/libraries/form_validation.html#callbacks

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

1 голос
/ 04 июня 2011

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

Так как set_value() и связанные функции читают только данные $_POST, они не будут сохранять значение после обновления.У вас есть несколько вариантов:

  1. Не перенаправлять, пока форма не будет действительной.
  2. Назначить массив $_POST переменной flashdata (сеанс) и скопировать его в$_POST массив вручную после перенаправления
  3. Напишите свою собственную группу функций, чтобы обрабатывать это либо с помощью flashdata, либо с данными сеанса, либо другим методом, и не используйте функции set_value().

Для скорейшего исправления используйте # 1.Мне не нравится ручная установка значений $_POST, поэтому я на самом деле не поддерживаю № 2, но это должно сработать.В долгосрочной перспективе - используйте № 3.Я обнаружил, что обработка форм CI часто отсутствует, и моя личная база кода взаимодействия с формами со временем значительно выросла.

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