0

I have a scenario where i have 2 tables i.e users and request and i am asking the user to fill a form, in which along with other data he has to fill email also. Now i want that if the user enters an email it should simply add the data in users table and pick the last insert id and then go ahead and save the data+last inserted id in request table and display the message

Your account is created..

Till here i have done the coding, but the part where i am stuck is

I want that if the user enters an email that is already present in users table then the code should pick the id that is present against that email and store it along with form data in the request table and display the message

"Request is submitted but you already have an account, please login to check furthur details "

users table

id  name          email
1   sam        [email protected]
2   demo_user  [email protected]

request table

id       email    userid
1     demo@gmail   2

Controller

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');
            }

    }

Model

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;
    }

View

<?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(); ?>
1
  • what's the problem here?? just don't insert whenever userdata passes validation....check if any user exist in db associated with that data and act accordingly.. Commented Aug 17, 2016 at 6:46

2 Answers 2

2

is_unique Returns FALSE if the form element is not unique to the table and field name in the parameter.

Syntax :

is_unique[table.field]

Example :

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

This will solve your problem

Sign up to request clarification or add additional context in comments.

Comments

0

In your controller before you call this $this->user_model->instant_submit() add one more condition to check if email id already exist or not like below.

Controller

   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');
                }

        }

Now in your model create a function which can check the data of user

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;
     }
}

Note : Remember it will send false if user not found so it will create a new entry of that user.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.