如何在CodeIgniter

时间:2015-07-18 12:52:07

标签: php codeigniter

我有一个用于注册用户的html表单。我想在codeIgniter中应用一个条件,如果有人写了数据库中已存在的2个输入字段(firstname和lastname),则不允许插入数据。 就像我可以写

$this->form_validation->set_rules('firstname', 'First Name', 'required|is_unique[student.firstname]');
$this->form_validation->set_rules('lastname', 'Last Name', 'required|is_unique[student.lastname]');

如何申请?两者都应该是独一无二的,但已经存在。我想要“组合独特的价值”

示例:

  

名字:阿里

     

姓氏:Mohyudin

如果有人在两个字段中再次写入相同内容,那么我不想在数据库中插入数据,但如果有人写了类似的内容:

  

名字:阿里

     

姓氏:Imran

然后我应该接受用户。

3 个答案:

答案 0 :(得分:8)

您可以使用验证回调

来完成此操作
$this->form_validation->set_rules('firstname', 'First Name', 'required|callback_check_user');// call callback function

$this->form_validation->set_rules('lastname', 'Last Name', 'required');

检查名字和最后一个组合的组合

function check_user() {
    $first_name = $this->input->post('firstname');// get fiest name
    $last_name = $this->input->post('lastname');// get last name
    $this->db->select('user_id');
    $this->db->from('student');
    $this->db->where('firstname', $first_name);
    $this->db->where('lastname', $lase_name);
    $query = $this->db->get();
    $num = $query->num_rows();
    if ($num > 0) {
        return FALSE;
    } else {
        return TRUE;
    }
}

答案 1 :(得分:0)

一个简单的解决方案是添加自定义验证方法。

如果您还没有已在application/libraries目录中创建名为MY_Form_validation.php(区分大小写)的文件,请执行以下操作:

class MY_Form_validation extends CI_Form_validation
{

    public function __construct($rules = array())
    {
        parent::__construct($rules);
    }
}

然后在该文件中你可以有类似的东西:

    public function unique_user_name()
    {

        $firstname = $this->CI->input->post('firstname');
        $lastname = $this->CI->input->post('lastname');

        $check = $this->CI->db->get_where('users', array('firstname' => $firstname, 'lastname' => $lastname), 1);

        if ($check->num_rows() > 0) {

            $this->set_message('unique_user_name', 'This name already exists in our database');

            return FALSE;
        }

        return TRUE;
    }

最后你的规则将是:

$this->form_validation->set_rules('firstname', 'First Name', 'trim|required');
$this->form_validation->set_rules('lastname', 'Last Name', 'trim|required|unique_user_name');

希望这有帮助!

答案 2 :(得分:0)

也许您对我的自定义is_unique函数感兴趣。 在这里。

您可以通过两种方式使用它:

1. is_unique[table_name.field_to_check.id_field_name.id_field_value] //<-- unique 1 field only


2. is_unique[table_name.field_to_check.id_field_name != 'id_field_value' and anotherIdName='theValue'] //<-- custom where 

只需将此代码保存在文件中,将其命名为MY_Form_Validation.php,并将其放在libraries目录下。然后你可以把那些is_unique

//is_unique[table_name.field_to_check.id_field_name.id_field_value] <-- unique 1 field only
//is_unique[table_name.field_to_check.id_field_name != 'id_field_value' and anotherIdName='theValue'] <-- custom where 
class MY_Form_validation extends CI_Form_validation {
    public function is_unique($str, $field)
    {
        $hasil = true;

        try {
            //hanya validasi jika ada isinya. jika tidak ada isinya, tidak usah divalidasi.
            //karena kalau memang tidak boleh kosong, bisa kasih validasi required
            if ($str) {
                $x = substr_count($field, '.');
                if(strpos($field, "=") > 0) {
                    list($table, $field, $where) = explode('.', $field);
//                    list($table, $field, $id_field, $id_val, $where) = explode('.', $field);

                    $is_unique = 0;

                    if ($where) {
                        $logos = "select * from $table where $field =? and $where ";
                    } else {
                        $logos = "select * from $table where $field =?  ";
                    }

                    $data = array($str);
                    $qq = $this->CI->db->query($logos, $data);

                    if (is_log_query()) {
                        $logos = $this->CI->db->last_query();
                        log_to_file($logos);
                    }

                    $row = $qq->row();
                    if ($row) {
                        if ($row->id) {
//                            if ($row->$id_field == $id_val) {
//                                $is_unique = 1; //berarti jika edit miliknya sendiri
//                            } else {
//                                //berarti id milik record lain
//                            }
                        } else {
                            //berarti sudah ada di xuser_confirmed
                        }
                    } else {
                        $is_unique = 1; //belum ada sama sekali
                    }

                    $hasil = (bool)$is_unique;

                }
                else {
                    if ($x >= 3) {
                        list($table, $field, $id_field, $id_val) = explode('.', $field);

                        $is_unique = 0;

                        if ($id_field && $id_val) {
                            $logos = "select * from $table where $field =? and $id_field != '$id_val' ";
                        } else {
                            $logos = "select * from $table where $field =?  ";
                        }

                        $data = array($str);
                        $qq = $this->CI->db->query($logos, $data);

                        if (is_log_query()) {
                            $logos = $this->CI->db->last_query();
                            log_to_file($logos);
                        }

                        $row = $qq->row();
                        if ($row) {
                            if ($row->id) {
                                if ($row->$id_field == $id_val) {
                                    $is_unique = 1; //berarti jika edit miliknya sendiri
                                } else {
                                    //berarti id milik record lain
                                }
                            } else {
                                //berarti sudah ada di xuser_confirmed
                            }
                        } else {
                            $is_unique = 1; //belum ada sama sekali
                        }

                        $hasil = (bool)$is_unique;


                    } 
                    else if ($x == 1) {
                        list($table, $field) = explode('.', $field);
                        $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
                        $hasil = $query->num_rows() === 0;
                    }
                }
            }

        }catch (Exception $e) {
            die($e->getTraceAsString());
        }
        return $hasil;
    }
}