Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]logowanie
Forum PHP.pl > Forum > Przedszkole
eminiasty
Dlaczego po logowaniu wchodzi do czesci oznaczonej jako //2 skoro powinno chyba wchodzic w //1 i zwracac komunikat logowania?

Kontroler:

  1. function login()
  2. {
  3. $this->form_validation->set_rules('login_log', 'Login', 'trim|required|callback_checkLoginLog');
  4. $this->form_validation->set_rules('password_log', 'Hasło', 'trim|required|callback_checkPasswordLog');
  5.  
  6. if ($this->form_validation->run() == FALSE) {
  7. //nie zalogowany
  8. $this->session->set_flashdata('item', array('message' => validation_errors(), 'class' => 'danger'));
  9. redirect("/");
  10.  
  11. } else {
  12.  
  13. $login = $this->input->post('login');
  14. $password = $this->input->post('password');
  15.  
  16. $result = $this->Model_User->login($login, $password);
  17.  
  18. if ($result) {
  19. //1
  20. $this->session->set_flashdata('item', array('message' => 'Zalogowany!', 'class' => 'success'));
  21. redirect("/");
  22. }
  23. else{
  24. //2
  25. echo 'sss';
  26. }
  27.  
  28.  
  29. }
  30. }


Model:

  1. public function login($login, $password)
  2. {
  3. //pobranie hash
  4. $this->db->select('password');
  5. $this->db->from('user');
  6. $this->db->where('login', $login);
  7.  
  8. $query = $this->db->get();
  9. if ($query->num_rows() == 1) {
  10.  
  11. $result = $query->result_array();
  12. foreach ($result as $item) {
  13. if(password_verify($password,$item['password'])) {
  14. return TRUE;
  15. }
  16. else{
  17. return FALSE;
  18. }
  19. }
  20. }
  21. else{
  22. return FALSE;
  23. }
  24.  
  25.  
  26. }



//

W postaci:

  1. $this->Model_User->login($login, $password);
  2. $this->session->set_flashdata('item', array('message' => 'Zalogowany!', 'class' => 'success'));
  3. redirect("/");


działa ok, dalczego?
nospor
Cytat
Dlaczego po logowaniu wchodzi do czesci oznaczonej jako //2


bo login() zwraca false, dosc logiczne, nieprawdaz?
eminiasty
przy wpisaniu dobrego hasla powinien zrocic true?
nospor
Co powinien a co zwraca to dwie rozne rzeczy. Juz moglbys sie tego nauczyc. Twoja funkcja login() zwraca false w dwoch miejscach. Zdebuguj te miejsca a bedziesz wiedzial czemu zwraca false.
eminiasty
Nie rozumiem tego dlatego po kolei, rozbije na kwałki i może ktoś mnie oswieci:

//to w modelu - czesci obslugujacej
  1.  
  2. ..
  3. //pobieram hash na podstawie wpisanego loginu
  4. if ($query->num_rows() == 1) {
  5. //jesli login jest to idziemy dalej
  6. $result = $query->result_array();
  7. foreach ($result as $item) {
  8. //weryfikacja czy wpisane haslo, zgadza sie z hashem z bazy
  9. if(password_verify($password,$item['password'])) {
  10. return TRUE; //jesli tak no to zwracam TRUE, inaczej zaloguj sie czy zrob cos tam
  11. }
  12. else{
  13. return FALSE; //jesli nie to odrzucam
  14. }
  15. }
  16. }
  17. else{
  18. return FALSE;
  19. }
  20.  


//przechodze do kontrolera

  1.  
  2. //pobieram odpowiednio login i haslo z formularza
  3. $login = $this->input->post('login');
  4. $password = $this->input->post('password');
  5.  
  6. //przypisuje wywolanie metody do zmiennej
  7. $result = $this->Model_User->login($login, $password);
  8.  
  9. //a tu jest zonk? bo metoda ktora zwraca mi true nie dziala
  10. //czyli sprawdzam czy $result jest true tak jak to bylo w modelu po zalogowaniu
  11. if ($result) {
  12. //1
  13. $this->session->set_flashdata('item', array('message' => 'Zalogowany!', 'class' => 'success'));
  14. redirect("/");
  15. }
  16. //czesc 2 mozna nawet wyrzucic
  17. //najwazniejsze jest ze $result nie przyjmuje true , gdzie to ginie?!
  18.  
nospor
Ale ty nie pisz komentarzy do funkcji, bo to jej nie debuguje.... Ty rob var_dump() na kazdym etapie to bedziesz wiedzial co sie pieprzy.
eminiasty
var_dump($result) mowi ze jest NULL, ale nie moge zrozumiec dlaczego?

wartosc z modelu wgl nie dochodzi do kontrolera?
markonix
To debuguj model...

$result = $query->result_array();

Jeżeli tutaj nie ma tablicy, to następujący foreach się nie wykona ani razu więc jest opcja że nie zostanie zwrócony true lub false.
W ogóle CI to popularny FW, zainstaluj jakiegoś gotowca do logowania...
eminiasty
....

  1. $this->form_validation->set_rules('login_log', '


  1. $login = $this->input->post('login');


kocham takie błędy, dziękuję zainteresowanym
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.