Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Początki w PHP OOP - logowanie
Forum PHP.pl > Forum > Przedszkole
Panicz74
Witam,

Potrzebuje pomocy. Staram się obiektowo napisać skrypt logowania. Nie wiem dlaczego zaraz po załadowaniu index.php zmienna $_SESSION['logged'] równa jest true oraz widzę napis "Zalogowano". Przecież nie wprowadzono jeszcze nic do formularza. Przez to nie może wykonać się funkcja login. Czy moglibyście jakoś mnie nakierować na dobre tory?

index.php:
  1. <?php
  2.  
  3. require_once 'core/init.php';
  4.  
  5. $logowanie = DB::getInstance();
  6.  
  7. $login = trim($_POST['login']);
  8. $password = trim($_POST['password']);
  9.  
  10. $logowanie->login($login, $password);
  11. print_r($_SESSION['logged']);
  12. if($_SESSION['logged'])
  13. {
  14. echo "Zalogowano";
  15. }
  16. else
  17. {
  18. echo "Nie zalogowano";
  19. }
  20. ?>


db.php:
  1. <?php
  2.  
  3. class DB
  4. {
  5. private static $_instance = null;
  6. private $_pdo,
  7. //konstruktor klasy BD,
  8. private function __construct()
  9. {
  10. try
  11. {
  12. $this->_pdo = new PDO('mysql:host=localhost;dbname=informator', 'root', '');
  13. echo "Connected";
  14. }
  15. catch(PDOException $e)
  16. {
  17. die($e->getMessage());
  18. }
  19. }
  20.  
  21. //sprawdߠczy klasa DB juߠistnieje,
  22. public static function getInstance()
  23. {
  24. if(!isset(self::$_instance))
  25. {
  26. self::$_instance = new DB();
  27. }
  28. return self::$_instance;
  29. }
  30.  
  31. public function login($login, $password)
  32. {
  33. if(!isset($_SESSION['logged']))
  34. {
  35. if(isset($_POST['submit']))
  36. {
  37. //$login = trim($_POST['login']);
  38. //$password = trim($_POST['password']);
  39.  
  40. try
  41. {
  42. $pdo = self::getInstance();
  43. $stmt = $pdo->prepare('SELECT * FROM users WHERE login = :login');
  44. $stmt->bindValue(':login', $login, PDO::PARAM_STR);
  45. $stmt->execute();
  46. $row = $stmt->fetch(PDO::FETCH_OBJ);
  47. $pass = $row->password;
  48. $usr = $row->login;
  49. if(password_verify($password, $pass) && $login ===$usr)
  50. {
  51. echo "Witaj ".$login;
  52. $_SESSION['logged'] = true;
  53. $_SESSION['login'] = $login;
  54. }
  55. else
  56. {
  57. echo "Podano nieprawidłowe dane";
  58. }
  59. }
  60. catch(PDOException $e)
  61. {
  62. echo "Połączenie nie mogło zostac utworzone" .$e->getMessage();
  63. }
  64. }
  65. }
  66.  
  67. }
  68. }
  69.  
  70. ?>

JohnnyB
Cytat
Nie wiem dlaczego zaraz po załadowaniu index.php zmienna $_SESSION['logged']

Może masz ustawione session.auto_start =1 w php.ini, poza tym nie podoba mi się kod funkcji login, sesję powinieneś startować na początku programu a nie w instrukcji if, nigdzie nie ustawiasz logged na false, więc jak raz się zalogujesz poprawnie, to ciągle będzie pamiętać, poszukaj jak ustawić aby sesja była usuwana po zamknięciu przeglądarki.
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.