首页 > 解决方案 > 在 CodeIgniter 类 stdClass 的 CodeIgniter 对象上出现错误无法转换为 CodeIgniter 中的字符串

问题描述

在获取数据库值期间出现以下错误:

遇到 PHP 错误
严重性:4096

消息:stdClass 类的对象无法转换为字符串

文件名:控制器/User.php

行号:184

回溯:

文件:>Localdrive:\xampp\htdocs\MyRootFolder\application\controllers\User.php 行:184 功能:_error_handler

文件:Localdrive:\xampp\htdocs\MyRootFolder\application\controllers\User.php 行:151 功能:运行

文件:Localdrive:\xampp\htdocs\MyRootFolder\index.php 行:315 功能:require_once

我的控制器:

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

我的模型:

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

我的观点:

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

标签: phpmysqlcodeigniter

解决方案


您将数据作为模型中的对象请求,但尝试将其作为数组使用。更改此行:if(password_verify($oldpass, $user->password) == true){将 fetch 用作对象或将 get_user func 更改return $query->row_array();为将其用作数组。Ps:用于调试var_dump,用于数组和对象而不是打印


推荐阅读