2012-07-05 6 views
0

У меня есть 2 формы на одной странице, которые являются регистрами и формами входа, и я определяю имя для каждой формы, поэтому я могу размещать его отдельно, но как я могу ТОЛЬКО писать 1 form_validation-run() ?Множественные формы и форма проверки в Codeigniter

public function index() 
{ 
    //load form_validation and session library 
    $this->load->library(array('form_validation','session')); 

    if ($this->input->post('register')) { 

     $this->form_validation->set_rules('first_name', 'First name', 'required'); 
     $this->form_validation->set_rules('last_name', 'Last name', 'required'); 
     $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); 
     $this->form_validation->set_rules('password', 'Password', 'required|min_length[6]'); 

     if ($this->form_validation->run() !== FALSE){ 
      // to create an account 
     } else { 
      $this->session->set_flashdata('msg', validation_errors('<div>','</div>')); 
      redirect('/','location'); 
     } 
    } elseif ($this->input->post('login')) { 

     $this->form_validation->set_rules('email', 'Email', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 

     if ($this->form_validation->run() !== FALSE) { 
      // to get login 

     } else { 
      $this->session->set_flashdata('msg', validation_errors('<div>','</div>')); 
      redirect('/','location'); 
     } 
    } 

    $this->load->view('templates/header'); 
    $this->load->view('pages/index'); 
    $this->load->view('templates/footer'); 
} 
+3

Научитесь принимать ответ –

+0

нормально, .................... – vzhen

ответ

4

Логично, что вам нужно дважды позвонить ему с кодом, когда вы разветвляетесь по значению кнопки.

Это означает, что для аккуратности вы можете отправлять их отдельным действиям (вы почти все это делаете в данный момент). форму входа в систему, например./users/login, а затем регистрационную форму, например./users/create or/users/save

4

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

// The empty array is there because 2nd param is for passing data 
$this->load->library('form_validation', array(), 'login_form'); 
$this->login_form->set_rules('email', 'Email', 'required'); 
$this->login_form->set_rules('password', 'Password', 'required'); 
if ($this->login_form->run()){ 
    // Process the form 
} 

Проделайте то же самое для регистрационной формы, просто назовите другое имя.

+0

Мой 'set_value()' функция не дает мне значения после использования вашего решения –

+0

Я только что установил опечатку, может быть, так оно и было? Если нет, вы можете разместить свой код где-нибудь? –

+0

, например, для 'set_value()' для отображения значения «email». Какая будет линия? –

0

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

Здесь, как действовать: Прежде чем определять правила проверки, проверьте опубликованную кнопку отправки или другие скрытые входы, которые могут определять, какая форма была отправлена ​​на ваш контроллер. Затем вы можете определить правила проверки в зависимости от каждой формы, которую вы можете опубликовать.

следить за этим - https://github.com/EllisLab/CodeIgniter/wiki/Validation-and-multiple-forms

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