2014-01-22 37 views
0

我已經嘗試了幾乎所有在我的知識,並在網上找到,但沒有任何工作。我想要做的是在添加新記錄時我想檢查字段值是否已經在數據庫表中。如果不是add add throw錯誤信息。Codeigniter:公司獨特的驗證不起作用

我也嘗試過與is_usnique但它不允許修改數據,因爲它正在考慮表單值存在。

表名是位置
Coloumn名字是位置
輸入字段名稱爲位置

我曾嘗試下面的代碼在我的控制器

public function _unique_poscode() 
{   
    $id = $this->uri->segment(4); 
    $this->db->where('position', $this->input->post('position'));   
    !$id || $this->db->where('id !=', $id); 
    $poses = $this->positions_model->get(); 

    if (count($poses)) { 
     $this->form_validation->set_message('_unique_poscode', '%s should be uinique'); 
     return FALSE; 
    } 

    return TRUE; 
} 

並設置規則我的型號如下

public $rules    = array(  
    'position' => array(
      'field' => 'position', 
      'label' => 'Position Code', 
      'rules' => 'trim|required|max_length[10]|callback__unique_poscode|xss_clean' 
     ), 
    'label' => array(
      'field' => 'label', 
      'label' => 'Position Label', 
      'rules' => 'trim|required|max_length[50]|xss_clean' 
     ),            

    ); 

但無論我做什麼,它都不起作用,即使它存在於表格中也會添加記錄。

任何人都可以幫我解決這個問題嗎?非常感謝。

+1

你不需要爲這個已經有funcion由笨作出回調。 – Kyslik

+0

你能否給我提供一些參考代碼或任何參考鏈接,看看如何鍛鍊? –

+0

你有沒有試過在規則上使用'is_unique ['table_name'。'field_name']'? – fawwaz

回答

0

你缺少參數

public function _unique_poscode($p) 
{   

    $this->form_validation->set_message('_unique_poscode', '%s should be uinique'); 
    $q = $this->db->get_where('positions', array('position' => $p)); 
    return ($q->num_rows() > 0) ? TRUE : FALSE; 

} 

,並在規則

...|callback__unique_poscode|trim


以及它是如何通過笨做的是作爲一個規則,請參見本作more

is_unique[table.column]

+0

感謝您的快速回復。 BUt它將如何考慮'is_unique'中的'_unique_poscode'? –

+0

請看我的編輯是否符合您的需求 – Kyslik

+0

我很欣賞您的努力,但這不起作用 –

0

只需將此添加到規則並檢查。

is_unique[TABLENAME.COLUMNNAME] 

根據您的一個應該是,

is_unique[positions.position]