簡體   English   中英

CodeIgniter 的 is_unique 總是說值已經存在

[英]CodeIgniter's is_unique always saying value already exists

我正在使用 CodeIgniter 的表單驗證,我花了很多時間試圖解決這個問題,但沒有運氣。 我有這個領域:

<input type="text" name="user" id="user" length="20" placeholder="Username">

我用它來驗證:

$this->form_validation->set_rules('user', 'Username', 'trim|required|min_length[3]|max_length[20]|alpha_dash|is_unique[users.user]');

我的數據庫有一個表users並且user是其中的一個字段,所以我不知道我做錯了什么,或者問題是什么。 該表是空的(但我也試過它有記錄)並且在 phpmyadmin 中選擇了“ unique ”圖標。 我知道 db 連接工作正常,因為如果我刪除該規則並輸入其他有效數據並提交表單,那么用戶將被添加到數據庫中。

除非 is_unique 使用另一個我沒有配置的數據庫配置文件? 我真的不知道。 這有點令人沮喪,我想我也可以放棄使用框架......

你的幫助會很棒! 謝謝。

這可能/可能無濟於事:您似乎運行表單驗證加載數據庫。 還有一個拼寫錯誤uses.user

在 Transact-SQL 中,“USER”一詞是一個特殊詞。 嘗試使用像這樣的反引號包圍 uses.user:

`users.user`
...看看是否有幫助。

嘗試這個 :-

$this->form_validation->set_rules('user', 'Username', 'trim|required|min_length[3]|max_length[20]|alpha_dash|unique[users.user]');

它需要加載數據庫。

$this->load->database();

我知道您的問題很老,但我最近在自定義表單驗證中遇到了類似的問題,經過一些認真的調試后,我找到了原因和解決方法。

顯然,CI 核心有一個小錯誤:在調用is_unique表單驗證方法時,數據庫庫沒有實例化(至少在最新版本的 CI 中),從而阻止實際執行檢查並始終返回false作為驗證結果。

這是表單驗證庫( system/libraries/Form_validation.php )的解決方法

public function is_unique($str, $field)
{
    sscanf($field, '%[^.].%[^.]', $table, $field);

    // add the following line
    $this->CI->load->database();

    return isset($this->CI->db)
        ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
        : FALSE;
}

通過在注釋后添加該行,您將確保為is_unique方法正確實例化了數據庫庫,並且您將使其工作。 如果沒有該行, isset($this->CI->db)檢查將始終返回 false

您也可以將該行放在庫的構造函數中,但隨后您將在所有不必要的表單驗證規則中實例化數據庫庫(只有is_unique需要它)。

以您的代碼為例, is_unique驗證規則通過在用戶數據庫表中查找名為user_name的字段來工作。 如果存在具有相同值的字段,則驗證為 false。

為確保它僅在用戶提交新值時運行,您可以根據從數據庫中提取的值來檢查發布的值$this->input->post('user_name')以填充表單。 如果它們相同,則不要驗證is_unique

if($this->input->post('user_name') != $original_value) {
   $is_unique =  '|is_unique[users.user_name]'
} else {
   $is_unique =  ''
}

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM