2017-08-16 3 views
0

Das Problem ist, dass, wenn ich auf die Schaltfläche Speichern klicke, die Daten in der Datenbank aufgelistet sind. In diesem Fall bleibt der Name des Benutzers im Kopf gleich, und nur wenn ich logged_in mache, ändert sich der Name. Wie kann ich den Namen mit Hilfe einer Sitzung ändern, ohne das Dashboard zu verlassen?Datenaktualisierung Codeigniter mit Sitzung

Modell:

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

Controller:

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(); 
} 
+0

Post die Variable, die Sie verwendet, um den Namen zu drucken., Oder senden Sie Ihren Kopf Blick Block, wo Sie den Namen drucken –

Antwort

0

Von meinem Verständnis dieser Frage, das ist, wo Ihr Problem

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

Jetzt mir liegt lassen erklären, warum ich so fühlen ,

Zunächst Funktion in Ihrem Profil, definiert Sie $ id aus Ihrem Post-Daten, sondern an Ihrem show_user Methode suchen, definiert Sie $ id von einer Sitzung

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

Weiter Sie überprüfen, ob $ id gesetzt ist, nun, ob nicht $ id gesetzt ist, wird die show_user Funktion

$this->show_user(); 

Nun rief das bedeutet, dass im Fall $ id nicht gesetzt ist, dann wird der Update-Vorgang nicht ausgeführt, aber Sie immer noch die show_user Funktion aufrufen, das heißt Sagen wir, die Werte in der Datenbank ändern sich nicht, aber Sie rufen die Funktion show_function auf, um die aktualisierten Details

anzuzeigen

Lösung: Zuerst sollten Sie $ ID aus Ihrer Sitzung und nicht aus dem Post definieren. Fügen Sie dann den Funktionsaufruf show_user in den if-Block ein, so dass dieser nur aufgerufen wird, wenn das Update abgeschlossen ist, andernfalls sollten Sie etwas anderes tun. So sollte Ihre Profilfunktion so sein

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 
    } 

} 

Ich hoffe, dass dir das hilft. Wenn Sie irgendwelche Schwierigkeiten finden, bitte kommentieren Sie und lassen Sie es

+0

Die Idee, die Sie gaben ein sehr cooles, aber das folgende Problem: _Error Nummer: 1452 Kann nicht hinzufügen oder ab Datum einer untergeordneten Zeile: Eine Fremdschlüsseleinschränkung schlägt fehl ('kyokushinkai_dev'''users', CONSTRAINT' users_ibfk_3' FREMDSCHLÜSSEL ('gender') REFERENZEN' genders' ('id')) _ – deadd1wer

+0

' function profile() { $ id = $ this-> session-> userdata ('Bezeichner'); if ($ id!= null) { $ data = array ( 'email' => $ this-> eingang-> post ('email'), 'birthday' => $ this-> input-> post ('birthday'), 'first_name' => $ this-> Eingabe-> post ('first_name'), 'last_name' => $ this-> Eingabe-> post ('last_name'), ); $ this-> authentication-> update_user ($ id, $ data); Umleitung (base_url ('show_user')); } sonst {$ this-> show_user(); } $ this-> show_user(); } ' – deadd1wer

+0

Aber das war nicht das Problem, das Sie umrissen haben. Ich gab Ihnen eine Lösung basierend auf Ihrer Anfrage –

0

Wenn Sie auf Speichern klicken. Verwendet, um diesen:

$this->db->insert_id(); 

Versuch die letzte Eingabe-ID zu erhalten und diese Aufzeichnung mit der Suchanfrage wie diese zu finden:

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

Und nach diesem Update der Sitzung mit Hilfe dieses:

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