2012-07-05 39 views
0

我在一個頁面中有兩個表單,它們是註冊表單和登錄表單,我爲每個表單定義了一個名稱,所以我可以單獨發佈它,但是我怎樣才能只寫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

OK,.................... – vzhen

回答

4

從邏輯上講,當您在按鈕值上分支時,您需要使用代碼調用它兩次。

這就是說,爲了整潔,你可以將它們發送給不同的動作(目前你幾乎是這樣做的)。登錄表單/ users/login,然後將登記表格發送給/ users/create或/ 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

我剛修好了一個錯字,也許是這樣嗎?如果不是,你可以在任何地方發佈你的代碼?例如對於'set_value()'來顯示'email'值的例子爲 –

+0

。這條線是什麼? –

0

我有很多困難使用CI驗證類與多種形式(即在同一頁面內的登錄表單和訂閱表單),但我找到了一個解決方案...希望它會有所幫助。 :coolsmile:

這裏如何繼續:在您定義驗證規則之前,測試發佈的提交按鈕或其他隱藏的輸入,它們可以定義發佈到控制器的表單。然後,您可以根據您可以發佈的每種表單定義驗證規則。

遵循這個 - https://github.com/EllisLab/CodeIgniter/wiki/Validation-and-multiple-forms