2017-06-30 2 views
1

Ich bin neu in Codeignter. Ich versuche, Login-Register damit zu machen. während der Überprüfung if($user -> email) gibt es Fehler sagen, versuchen, Eigenschaft von Nicht-Objekt dieser Linie zu bekommen. Wie kann ich es loswerden? Ich habe Registerabschnitt erfolgreich gemacht, aber beim Versuch, mich einzuloggen, gab es Fehler. der Controller-Code ist hier,Codeigniter Versuch, Eigenschaft von Nicht-Objekt-Fehler in Login-Controller zu bekommen

public function home() { 

    $this->load->helper('url'); 
    $this->load->library('form_validation'); 
    $this->load->library('session'); 

    $this->form_validation->set_rules('username', 'Username', 'required'); 
    $this->form_validation->set_rules('password', 'Password', 'required|min_length[5]'); 

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

     $username = $_POST['username']; 
     $password = md5($_POST['password']); 

     $this->db->select('*'); 
     $this->db->from('users'); 

     $this->db->where(array('username' => $username, 'password' => $password)); 

     $query = $this->db->get(); 

     $user = $query->row(); 

     if ($user->email) { 

      $this->session->set_flashdata("Success", "You have successfully logged in"); 

      $_SESSION['user_logged'] = TRUE; 

      $_SESSION['username'] = $user->username; 

      redirect('profile', 'refresh'); 
     } else { 

      $this->session->set_flashdata("Error", "No such account in database"); 
     } 
    } 
    $this->load->view('login'); 
} 

Vielen Dank für Ihre Hilfe.

+0

zuerst überprüfen Sie Ihre '' '$ user''' mit Werten oder nicht. Überprüfen Sie auch, ob es Array oder Objekt ist. – kishor10d

+0

Es könnte sich auch lohnen, '$ _POST []' durch '$ this-> input-> post()' zu ersetzen, da dies eine Nullprüfung für Sie durchführt. – kgrwhite

+1

MD5 wird aus Sicherheitsgründen als defekt angesehen und ist nicht ausreichend für das Hashing von Kennwörtern. Verwenden Sie ['password_hash()'] (http://us3.php.net/manual/en/function.password-hash.php) und ['password_verify()'] (http://us3.php.net/ manual/de/function.password-verify.php) stattdessen. Wenn Sie eine Version von PHP vor Version 5.5 verwenden, können Sie [dieses Kompatibilitäts-Paket] (https://github.com/ircmaxell/password_compat) verwenden. –

Antwort

0

Sie erhalten einen Fehler, wenn $ user leer ist, bedeutet, dass für den angegebenen Benutzernamen und das Kennwort kein Datensatz gefunden wurde. Verwenden

if(!empty($user->email)) instead of if ($user->email)      
+0

Fehler wird nicht angezeigt, aber können Sie erklären, warum Flash-Nachricht nicht angezeigt wird, danke –

+0

Wie zeigen Sie Flash-Nachricht in Sicht – hrishi

Verwandte Themen