Codeigniter 3 应用程序错误:登录用户的头像不会实时更新



我正在使用Codeigniter 3.1.8和Bootstrap 4开发一个基本的博客应用程序

该应用程序具有用户(作者(帐户。在会话被破坏之前显示登录的照片(头像(有一个问题,因为我显示了会话中的头像(header.php视图(:

<?php if ($this->session->userdata('user_avatar')): ?>
<img src="<?php echo base_url('assets/img/authors/') . $this->session->userdata('user_avatar'); ?>" class="avatar" />
<?php else: ?>  
<img src="<?php echo base_url('assets/img/authors/') . 'default-avatar.png' ?>" class="avatar" />
<?php endif ?>

这在当时似乎是一个好主意,一个简单而合乎逻辑的化身显示实现,直到更新问题暴露出来。当然,我不得不承认,我必须注销并再次登录才能在网站标题中看到我的头像(

在我的模型中:

public function update_user($avatar, $id) {
$data = [
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'email' => $this->input->post('email'),
'bio' => $this->input->post('bio'),
'avatar' => $avatar
];
$this->db->where('id', $id);
return $this->db->update('authors', $data);
}

在登录控制器中,我有:

public function login() {  
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required|trim');
$this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');
if ($this->form_validation->run()) {
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->load->model('Usermodel');
$current_user = $this->Usermodel->user_login($email, $password);
// If we find a user
if ($current_user) {
// If the user found is active
if ($current_user->active == 1) {
$this->session->set_userdata(
array(
'user_id' => $current_user->id,
'user_email' => $current_user->email,
'user_avatar' => $current_user->avatar,
'user_first_name' => $current_user->first_name,
'user_is_admin' => $current_user->is_admin,
'user_active' => $current_user->active,
'is_logged_in' => TRUE
)
);
// After login, display flash message
$this->session->set_flashdata('user_signin', 'You have signed in');
//and redirect to the posts page
redirect('/');  
} else {
// If the user found is NOT active
$this->session->set_flashdata("login_failure_activation", "Your account has not been activated yet.");
redirect('login'); 
}
} else {
// If we do NOT find a user
$this->session->set_flashdata("login_failure_incorrect", "Incorrect email or password.");
redirect('login'); 
}
}
else {
$this->index();
}
}

什么是易于实现的错误修复?

根据代码点火器会话文档,您可以使用以下内容:

$this->session->set_userdata('user_avatar', $new_user_avatar);

当然,你需要在你的代码中,在你显示头像的地方添加这个。

对于$new_user_avatar,您甚至需要在头像更新后重新查询数据库,或者在上传文件后获得表单后简单地更新会话。

根据您的代码:

  1. 在登录控制器中,您正在数组中设置会话
  2. 使用模型中的updateuser,您正在更新您的头像
  3. 您正在会话的页眉视图中显示

您的问题是如何更新头像。在使用update_user模型时,您有两个选项:1.您还使用特定化身更新会话。2.你运行这个功能

$current_user = $this->Usermodel->user_login($email, $password); array['user_avatar'] = $current_user->first_name

所以最终的解决方案是:

CCD_ 4应该在控制器中的CCD_ 5之后(线91(。

相关内容

  • 没有找到相关文章

最新更新