使用codeigniter检查数据库中是否存在数据

时间:2016-08-17 06:40:46

标签: php codeigniter

我有一个场景,我有2个表,即用户和请求,我要求用户填写表格,其中还有其他数据,他还要填写电子邮件。现在我希望如果用户输入电子邮件,它应该只是在users表中添加数据并选择最后一个插入ID然后继续并将数据+最后插入的id保存在请求表中并显示消息

  

您的帐户已创建..

直到这里我已完成编码,但我遇到的部分是

我希望如果用户输入已存在于users表中的电子邮件,则代码应选择针对该电子邮件的ID,并将其与表单数据一起存储在请求表中并显示消息

  

"已提交申请,但您已拥有帐户,请登录   检查更多详情"

用户表

id  name          email
1   sam        sam@gmail.com
2   demo_user  demo@gmail.com

请求表

id       email    userid
1     demo@gmail   2

控制器

public function submit()
    {

        $this->form_validation->set_rules('email','Email','trim|required');

        if($this->form_validation->run() == FALSE)
            {   
                $erdata = array 
                    (
                        'error' => validation_errors()
                    );
                $this->session->set_flashdata($erdata);

                redirect('home/index');
            }   
        else
            {
                if($this->user_model->instant_submit())
                    {
                        $this->session->set_flashdata('msg','Your account is created'); 
                    }
                 else
                     {
                        echo "failed";
                     }
                redirect('home/index');
            }

    }

模型

public function instant_submit()
    {
        $userdata = array(
            'email' => $this->input->post('email')
        );

        $insert_data = $this->db->insert('users', $userdata);
        $lastid = $this->db->insert_id();

        $reqdata = array(
            'email' => $this->input->post('email'),
            'userid' => $lastid, 
            'status'=>'pending'
             );

        $insert_request = $this->db->insert('request', $reqdata);
        return $insert_data;
    }

查看

<?php if($this->session->flashdata('msg')): ?>
    <?php echo $this->session->flashdata('msg'); ?>
<?php endif; ?>

    <?php
        $reg_attributes = array('id'=>'form','role'=>"form");
        echo form_open('home/submit', $reg_attributes); 
    ?>


    <?php
        $data = array(
            'type'=>'text',
            'name'=>'email',
            'placeholder'=>'Email',
             'class'=>'form-control', 
            'id'=>'form-email'
        );

        echo form_input($data);                                            
    ?>


    <?php
        $data = array(
            'type'=>'submit',
            'class'=>'btn-primary',
            'name'=>'submit',
            'content'=>'Submit!'

        );

        echo form_button($data); 
    ?>


<?php echo form_close(); ?>

2 个答案:

答案 0 :(得分:2)

is_unique如果表单元素对参数中的表和字段名称不唯一,则返回FALSE

语法:

is_unique[table.field]

示例:

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

这将解决您的问题

答案 1 :(得分:0)

在您拨打此$this->user_model->instant_submit()之前,在您的控制器中添加一个条件,以检查电子邮件ID是否已存在,如下所示。

<强>控制器

   public function submit()
        {

            $this->form_validation->set_rules('email','Email','trim|required');

            if($this->form_validation->run() == FALSE)
                {   
                    $erdata = array 
                        (
                            'error' => validation_errors()
                        );
                    $this->session->set_flashdata($erdata);

                    redirect('home/index');
                }   
            else
                {
                    if(!$this->user_model->check_user_exist($this->input->post('email'))) {
                        if($this->user_model->instant_submit())
                        {
                            $this->session->set_flashdata('msg','Your account is created'); 
                        }
                         else
                         {
                            echo "failed";
                         }
                  } else {
                         //do whatever operation you want to do if user is already exist;
                        $this->session->set_flashdata('msg','Request is submitted but you already have an account, please login to check furthur details '); 
                 }

                    redirect('home/index');
                }

        }

现在,在您的模型中创建一个可以检查用户数据的函数

public function check_user_exist($email_id) {
     $this->db->select('id');
     $this->db->where('email',$email_id);
     $query = $this->db->get('users');
     $data = $query->row();
     if($query->num_rows() == 1) {
         return $data->id;
     } else {
         return false;
     }
}

注意:请记住,如果找不到用户,它将发送false,因此它将创建该用户的新条目。