0
votes

I am getting the following error during fetching of database value:

A PHP Error was encountered
Severity: 4096

Message: Object of class stdClass could not be converted to string

Filename: controllers/User.php

Line Number: 184

Backtrace:

File: >Localdrive:\xampp\htdocs\MyRootFolder\application\controllers\User.php Line: 184 Function: _error_handler

File: Localdrive:\xampp\htdocs\MyRootFolder\application\controllers\User.php Line: 151 Function: run

File: Localdrive:\xampp\htdocs\MyRootFolder\index.php Line: 315 Function: require_once

My Controller:

public function changePassword()
 {
    $this->logged_in();

    $data['title'] = "Change Password";

    $this->form_validation->set_rules('oldpass', 'Current Password', 'required|callback_password_check');
    $this->form_validation->set_rules('newpass', 'New Password', 'required');
    $this->form_validation->set_rules('passconf', 'Confirm Password', 'required|matches[newpass]');

    $this->form_validation->set_error_delimiters('<div class="error">','</div>');

    if($this->form_validation->run() == false){

        $user= $this->session->userdata('user');
        $data['user'] = $user;

    $this->load->view('header', $data);
    $this->load->view('change_password', $data);
    $this->load->view('footer', $data);
 }
 else{

        $email = $this->session->userdata('email');
        $newpass = $this->input->post('newpass');
        //$this->User_model->update_user($id, $sessArray)

         
   $this->User_model->update_user($id, array('password' => password_hash($newpass), PASSWORD_BCRYPT));

        

        redirect('User/logout');

 }

}

 public function password_check($oldpass)
{

    //print($oldpass);
    //exit();
    $email = $this->session->userdata('email');
 $user = $this->User_model->get_user($email);
 print($user);
        exit();

    //print($oldpass);
    //exit();

    

    if(password_verify($oldpass, $user['password']) == true){


    $this->form_validation->set_message('password_check', 'The {field} does not match');

    return false;
    }

    return true;
}

My Model:

function getData(){
    $query = $this->db->where('register');
    return $query;
}

public function get_user($email)
{
    $this->db->where('email', $email);
    $query = $this->db->get('register');
    return $query->row();
}

public function update_user($email, $sessArray)
{

    //$this->db->set($data);
    $this->db->where('email', $email);
    $this->db->update('register', $sessArray);
}

My View:

<div class="row justify-content-center" style="margin-top: 50px;">
<div class="col-4">
    <h1><?php echo $title ?></h1>
    <?php echo form_open('User/changePassword', array('id' => 'passwordForm'))?>
        <div class="form-group">
            <input type="password" name="oldpass" id="oldpass" class="form-control" placeholder="Current Password" />
            <?php echo form_error('oldpass', '<div class="error">', '</div>')?>
        </div>
        <div class="form-group">
            <input type="password" name="newpass" id="newpass" class="form-control" placeholder="New Password" />
            <?php echo form_error('newpass', '<div class="error">', '</div>')?>
        </div>
        <div class="form-group">
            <input type="password" name="passconf" id="passconf" class="form-control" placeholder="Confirm Password" />
            <?php echo form_error('passconf', '<div class="error">', '</div>')?>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-success">Change Password</button>
        </div>
    <?php echo form_close(); ?>
</div>
1

1 Answers

0
votes

You are requesting the data as an object in your model but trying to us it as an array. Either change this line: if(password_verify($oldpass, $user->password) == true){ to use the fetch as object or change get_user func to return $query->row_array(); to use it as an array. P.s.: for debug use var_dump both for array and object instead of print