2012-05-31 61 views
0

我正在嘗試使用codeigniter的表單驗證庫來驗證表單。我有一些問題,我需要幫助。 1.讓用戶填寫表單提交。
2.驗證庫在db表中找到重複項併爲這些項設置錯誤消息。
3.窗體顯示消息。
在這種方法中,我看到一個退步。假設表中有5個字段被設置爲唯一。所以驗證將運行查詢來查找5次唯一的字段。在codeigniter中使用mysql錯誤進行表單驗證

其他方法 它是讓用戶插入和db產生錯誤。在表單驗證庫中不調用callback_find_duplicate函數。表單已填充。在這種方法中,很難找到哪個字段是重複的,因此爲此設置錯誤消息將是麻煩的。最糟糕的情況是該用戶輸入重複的名稱。填寫表單,然後填寫電子郵件。然後,其他人繼續。
我需要找到有沒有辦法,或者我們可以寫一個查詢,它會查找所有字段的所有重複項。並且爲所有字段設置錯誤消息,而不用調用callback_find_duplicate五次。因爲我認爲調用單個查詢將需要更少的執行時間。

+0

我們可以看到您的形式,驗證和插入代碼? –

回答

1

即使form_validation是盛大和所有,我發現自己有時更喜歡其他解決方案。

補充一點:

庫/ My_Form_validation.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Form_validation extends CI_Form_validation { 

    /* Custom function to create errors manually 
    * */ 
    function create_error($str_field, $str_message) { 

     $str_message = t($str_message, $str_line); 

     $this->_field_data[$str_field] = 
     array('error' => $str_message, 
       'is_array' => FALSE, 
       'postdata' => $this->CI->input->post($str_field), 
       'rules' => '', 
       'field' => $str_field); 

     $this->_error_array[$str_field] = $str_message; 

    } 

} 

然後你就可以在控制器裏手工->run()之前運行它。

抓取查詢,你可以,並有一個,如果每個案例是這樣的:

$arr_uniques = array('email', 'name', 'snn'); // whatev 
foreach($arr_uniques as $h) 
    if ($row->$h == $this->input->post($h)) 
     $this->form_validation->create_error($h, "{$h} is not unique!"); 
+0

以及我已經創建了一個相同的解決方案,通過擴展codeigniter的驗證庫,並在form_validation-> run()成功時調用我的函數。 –

0

對數據庫的五次調用並不是很多。第一種方法是我會這樣做,而不是使CodeIgniter可以很好地處理的事情複雜化。

相關問題