【问题标题】:How codeigniter's is_unique[] workcodeigniter 的 is_unique[] 是如何工作的
【发布时间】:2016-01-10 10:49:24
【问题描述】:

我已经检查了 codeigniter 的文档,但没有关于它的特殊页面或信息。我只想知道它是如何工作的。我有这段代码,它正在工作!,我想知道当无法访问任何模型或数据库时 is_unique 是如何工作的。 codeigniter 中是否有任何类 is_unique 使用它根据表名和您提供给它的字段等信息来检索数据? 这就是代码:

视图中的电子邮件输入:

echo form_input('email_address', set_value('email_address'), 'placeholder="Email"');

还有控制器:

function create_member()
    {
        $this->load->library('form_validation');

        // field name, error message, validation rules
        $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email|is_unique[membership.email]');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');

        $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');

        if($this->form_validation->run() == FALSE)
        {
            $this->load->view('pages/signup_form');
        }

        else
        {           
            $this->load->model('admin/Users_model');

            if($query = $this->Users_model->create_member())
            {
                $this->load->view('pages/signup_successful');           
            }
            else
            {
                $this->load->view('pages/signup_form');         
            }
        }

    }

她是模特:

function create_member()
    {

            $new_member_insert_data = array(
                'email' => $this->input->post('email_address'),         
                'user_name' => $this->input->post('username'),
                'pass_word' => md5($this->input->post('password'))                      
            );
            $insert = $this->db->insert('membership', $new_member_insert_data);
            return $insert;

    }

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您可以在以下位置找到此函数的源代码:system/libraries/Form_validation.php,这似乎是从系统类调用的唯一实例 is_unique

    代码:

        /**
         * Is Unique
         *
         * Check if the input value doesn't already exist
         * in the specified database field.
         *
         * @param   string  $str
         * @param   string  $field
         * @return  bool
         */
        public function is_unique($str, $field)
        {
            sscanf($field, '%[^.].%[^.]', $table, $field);
            return isset($this->CI->db)
                ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
                : FALSE;
        }
    

    “函数 sscanf() 是 printf() 的输入模拟。sscanf() 从字符串 str 中读取并根据指定格式对其进行解释,该格式在 sprintf() 的文档中有所描述。” - PHP Docs

    sscanf() 正在运行以将数据库与表名分开。

    然后该函数检查数据库连接是否存在,选择参数中提供的表,并搜索表以返回该条目是否存在。使用 三元运算符 (?:),语法为 boolean expression ? if true : if false;

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 2012-12-06
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多