phpcodeignitersql-updatequery-builder

CodeIgniter's set() and where() methods not affecting the database and corrupting the next built query


I am getting the following db error but I am unsure why because its two different tables:

Unknown column 'userActiveCode' in 'where clause'

SELECT `coreCompanyName`, `coreContactName`, `coreContactEmail` FROM (`core`) WHERE `userActiveCode` = '85domiigJZ'

Filename:/core_model.php

Line: 18

Controller:

function confirm(){
        
        $activateCode = $this->uri->segment(3);
        
        if($activateCode == '')
        {
            $this->form_validation->set_message('userConfirmError', 'Sorry you did not have a correct Activation Code.');
        }
            $userConfirmed = $this->users_model->confirm_user($activateCode);
            
            if($userConfirmed){
                $this->form_validation->set_message('userConfirmed', 'Thanks your account is now active you may login!');
            }else{
                $this->form_validation->set_message('userRecord', 'I am sorry we do not have any details with that Activation Code');
            }
            $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
            $data['pageTitle'] = "User Confirm";
            $this->load->view('frontend/assets/header', $data);
            $this->load->view('frontend/user_confirm', $data);
            $this->load->view('frontend/assets/footer');
    }

Confirm Function:

function confirm_user($activateCode)
    {
     //Selects the userID where the given URI activateCode = ?
        
        $this->db->select('userID');
        $this->db->from('users');
        $this->db->where('userActiveCode', $activateCode);
        
        $result = $this->db->get();
        
        if($result->num_rows == 1)  // If the above result is = 1 then update the userActive row else it will fail
        {
            $this->db->set('userActive', 1);
            $this->db->where('userActiveCode', $activateCode);
            
            return TRUE;
        }else{
            return FALSE;
        }
        

Core Model:

function companyDetails()
    {
        static $details;
        
        if(!$details)
        {
            $this->db->select('coreCompanyName, coreContactName, coreContactEmail');
            $details = $this->db->get('core')->first_row();
        }
        return $details;
    }

Solution

  • You didn't finish the transaction to activate the user. Please try modifying the following code in UserModel::confirm_user:

    $this->db->set('userActive', 1);
    $this->db->where('userActiveCode', $activateCode);
    

    with

    $this->db->set('userActive', 1);
    $this->db->where('userActiveCode', $activateCode);
    $this->db->update('users');