会话

时间:2017-08-16 14:47:16

标签: codeigniter session

问题是当我点击“保存”按钮时,数据会列在数据库中。在这种情况下,用户的名字在头部保持不变,只有当我执行logged_in时它才会改变。如何在不离开仪表板的情况下在会话的帮助下更改名称。

型号:

function get_user_by_id($id){
    $user = $this->ci->db
        ->where($this->identifier_field, $id)
        ->get($this->user_table);

    $user_details = $user->row();
    return $user_details;
}

function get_user($data)
{
    $this->ci->db->select('*');
    $this->ci->db->from('users');
    $this->ci->db->where('id', $data);
    $query = $this->ci->db->get();
    $result = $query->result();
    return $result;
}

// Update Query For Selected Student
    function update_user($id, $data)
    {
        $this->ci->db->where('id', $id);
        $this->ci->db->update('users', $data);
    }

控制器:

function show_user()
{
    $data = array(
        'lang' => $lang,
        'test_condition' => false,
        'reg_condition' => false,
        'current_page' => '',
        'head_title' => $lang['profile']
    );

    $id = $this->session->userdata('identifier');
    $data['user'] = $this->authentication->get_user_by_id($id);
    /*$data['single_user'] = $this->authentication->get_user($id);*/
    $this->load->view('profile', $data);
}

function profile()
{
    $id = $this->input->post('id');
    if (isset ($id)) {
        $data = array(
            'email' => $this->input->post('email'),
            'birthday' => $this->input->post('birthday'),
            'first_name' => $this->input->post('first_name'),
            'last_name' => $this->input->post('last_name'),
            'language_id' => $this->input->post('language'),

        );
        $this->authentication->update_user($id, $data);
    }
    $this->show_user();
}

2 个答案:

答案 0 :(得分:0)

根据我对这个问题的理解,这就是你的问题所在

function profile(){

$id = $this->input->post('id');
if (isset ($id)) {
    $data = array(
        'email' => $this->input->post('email'),
        'birthday' => $this->input->post('birthday'),
        'first_name' => $this->input->post('first_name'),
        'last_name' => $this->input->post('last_name'),
        'language_id' => $this->input->post('language'),

    );
    $this->authentication->update_user($id, $data);
}
$this->show_user();
}

现在让我解释为什么我感觉如此,

首先,在您的个人资料功能中,您从帖子数据中定义了$ id,但是查看了show_user方法,您从会话中定义了$ id

$id = $this->session->userdata('identifier');

接下来检查是否设置了$ id,现在是否设置了$ id,调用show_user函数

$this->show_user();

现在这意味着,如果未设置$ id,则不执行更新过程,但仍然调用show_user函数,也就是说数据库中的值不会更改,但是您调用show_function显示更新的详细信息

解决方案:首先,您应该从会话中定义$ id而不是发布。然后在if块中插入show_user函数调用,因此只有在更新完成时才会调用它,否则执行其他操作。所以你的个人资料功能应该是这样的

function profile(){ 

    $id = $this->session->userdata('identifier');
    if ($id != null) {
        $data = array(
            'email' => $this->input->post('email'),
            'birthday' => $this->input->post('birthday'),
            'first_name' => $this->input->post('first_name'),
            'last_name' => $this->input->post('last_name'),
            'language_id' => $this->input->post('language'),

        );

        $this->authentication->update_user($id, $data);

        redirect(base_url('classname/show_user'));

    }else{
        //do something else
    }

}

我希望这会帮助你。如果您发现任何困难,请发表评论并进行排序

答案 1 :(得分:0)

单击“保存”按钮时。使用它:

$this->db->insert_id();

尝试获取最后插入的ID并使用搜索查询找到该记录,如下所示:

$query = $this->db->get_where('table_name',array('id'=>last inserted id));
$query = $query->row_array();

然后在此更新会话的帮助下:

$this->session->set_userdata('session name',$query);