CI框架表單驗證

一、CodeIgniter允許你爲單個表單域創建多個驗證規則,按順序層疊在一起,你甚至可以同時預先處理表單域數據。要設置驗證規則請使用set_rules() 函數:

  上面的函數使用 三個 參數作爲輸入:

  表單域的名字 - 就是你給表單域取的那個名字。

  一個此表單域的 "人性化" 名字,它將被插入到錯誤信息中。例如,如果你有一個表單域叫做“user”你可能給它一個人性化名字叫做“用戶名”。 注意: 如果你想讓表單域的名字保存在一個語言文件裏。

  爲此表單域設置的驗證規則。

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

  上面是一段示例代碼。

  


  

<?php
  class Form extends CI_Controller {
  function index()
  {
  $this->load->helper(array('form', 'url'));
  $this->load->library('form_validation');
  $this->form_validation->set_rules('username', 'Username', 
'required');
  $this->form_validation->set_rules('password', 'Password', 
'required');
  $this->form_validation->set_rules('passconf', 'Password 
Confirmation', 'required');
  $this->form_validation->set_rules('email', 'Email', 'required');
  if ($this->form_validation->run() == FALSE)
  {
  $this->load->view('myform');
  }
  else
  {
  $this->load->view('formsuccess');
  }
  }
  }
  ?>
  


  控制器的內容如上。

  二、使用數組設置驗證規則:

  


  

$config = array(
  array(
  'field' => 'username',
  'label' => 'Username',
  'rules' => 'required'
  ),
  array(
  'field' => 'password',
  'label' => 'Password',
  'rules' => 'required'
  ),
  array(
  'field' => 'passconf',
  'label' => 'Password Confirmation',
  'rules' => 'required'
  ),
  array(
  'field' => 'email',
  'label' => 'Email',
  'rules' => 'required'
  )
  );
  $this->form_validation->set_rules($config);

  


  三、級聯規則:

  $this->form_validation->set_rules('username', 'Username', 
'required|min_length[5]|max_length[12]');
  $this->form_validation->set_rules('password', 'Password', 
'required|matches[passconf]');
  $this->form_validation->set_rules('passconf', 'Password 
Confirmation', 'required');
  $this->form_validation->set_rules('email', 'Email', 
'required|valid_email');

  上面的代碼設置了一組規則:

  用戶名錶單域長度不得小於5個字符以及大於12個字符。

  密碼錶單域必須跟密碼確認表單域的數據一致。

  電子郵件表單域必須是一個有效郵件地址。

  四、預處理數據

  $this->form_validation->set_rules('username', 'Username', 
'trim|required|min_length[5]|max_length[12]|xss_clean');
  $this->form_validation->set_rules('password', 'Password', 
'trim|required|matches[passconf]|md5');
  $this->form_validation->set_rules('passconf', 'Password 
Confirmation', 'trim|required');
  $this->form_validation->set_rules('email', 'Email', 
'trim|required|valid_email');

  在上面的例子裏,我們“修整(trimming,去掉字符串兩端空白)”了數據,轉換密碼爲MD5,將用戶名通過“xss_clean”函數處理去掉了有害數據。

  任何PHP自身接收一個參數的函數都可以被用作一個規則,比如 htmlspecialchars, trim, MD5, 等。

  五、重新填充表單

  set_value('field name')

  不要忘記在set_value()函數中包含每個表單域的名字!

  


 

 <html>
  <head>
  <title>My Form</title>
  </head>
  <body>
  <?php echo validation_errors(); ?>
  <?php echo form_open('form'); ?>
  <h5>Username</h5>
  <input type="text" name="username" value="<?php echo 
set_value('username'); ?>" size="50" />
  <h5>Password</h5>
  <input type="text" name="password" value="<?php echo 
set_value('password'); ?>" size="50" />
  <h5>Password Confirm</h5>
  <input type="text" name="passconf" value="<?php echo 
set_value('passconf'); ?>" size="50" />
  <h5>Email Address</h5>
  <input type="text" name="email" value="<?php echo set_value('email'); 
?>" size="50" />
  <div><input type="submit" value="Submit" /></div>
  </form>
  </body>
  </html>
  


  六、設置錯誤信息

  $this->form_validation->set_message('rule', 'Error Message');

  你也可以重寫語言文件中的錯誤信息. 例如, 你可以這麼做來改變"required" 規則的信息:

  $this->form_validation->set_message('required', 'Your custom message here');

  七、更改錯誤定界符

  在默認情況下,表單驗證類會使用 (<p>) 標籤來分割每條錯誤信息,以達到分段效果。你可以自行對其進行定義。

  定界符統一更改

  如果需要全局更改錯誤定界符, 可以在你的控制器中,在表單驗證類加載之後添加如下代碼:

  $this->form_validation->set_error_delimiters('<div class="error">', '</div>');

  在此例中,我們將定界符由系統默認的 <p> 更改爲一個div標籤。

  定界符單獨更改

  表單驗證類所提供的兩種顯示錯誤驗證信息的函數,分別可以通過如下方法來設置它們的定界符:

  <?php echo form_error('field name', '<div class="error">', '</div>'); ?>

  或者:

  <?php echo validation_errors('<div class="error">', '</div>'); ?>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章