Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dodatkowe odświeżenie podczas logowania
Forum PHP.pl > Forum > Przedszkole
benzulli
  1. <?php
  2. ?>
  3. <body>
  4. <?php
  5. if($_SESSION['logged'])
  6. {
  7. ?>
  8. To info wyskakuje, kiedy jesteś zalogowany.
  9. <form method="post">
  10. <input type="submit" value="Wyloguj" name="logout">
  11. </form>
  12. <?php
  13. if($_POST['logout'])
  14. {
  15. echo '<meta http-equiv="refresh" content="0">';
  16. }
  17. }
  18. else
  19. {
  20. ?>
  21. To info wyskakuje, kiedy nie jesteś zalogowany (wraz z formularzem). </br>
  22. <form method="post">
  23. <input type="text=" name="email">
  24. <input type="password" name="password">
  25. <input type="submit" name="login" value="Zaloguj">
  26. </form>
  27. <?php
  28.  
  29. require_once "connect.php";
  30. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  31. if ($connect->connect_errno!=0)
  32. {
  33. echo "Error: ".$connect->connect_errno;
  34. }
  35. else
  36. {
  37. if($_POST['login'])
  38. {
  39. $email = htmlentities($_POST['email']);
  40. $password = htmlentities(md5($_POST['password']));
  41.  
  42. $ask = sprintf("SELECT * FROM accounts WHERE email='%s' AND password='%s'", mysqli_real_escape_string($connect,$email), mysqli_real_escape_string($connect,$password));
  43. if($result = @$connect->query($ask))
  44. {
  45. if($result->num_rows == 1) {
  46. $array = $result->fetch_assoc();
  47. $_SESSION['logged'] = true;
  48. $_SESSION['username'] = $array['email'];
  49. $_SESSION['role'] = $array['role'];
  50. $result->close();
  51. }
  52. else
  53. {
  54. echo "Błędne hasło/nazwa użytkownika.";
  55. }
  56. }
  57. }
  58.  
  59. $connect->close();
  60. }
  61. }
  62. ?>
  63. </body>
  64. </html>
  65. <?php
  66. ?>


Sprawa ma się następująco: kiedy loguję się na stronę i naciskam przycisk "zaloguj", to po odświeżeniu nadal pokazuje się pusty formularz, a dopiero jak znowu refreszne, wtedy już odczytuje, że sesja "jest". To samo z wylogowaniem, jak zniszczę sesję, to dalej jestem przez jedno odświeżenie strony "zalogowany". Otóż problem da się rozwiązać wpisując magiczną regułę:
  1. echo '<meta http-equiv="refresh" content="0">';


lecz mnie interesuje jak rozwiązać ten problem (bo coś czuję, ze bardzo łatwo da się to zrobić) nie stosując po prostu dodatkowego odświeżenia. Według mnie, wszystko powinno działać, bo jak ustawisz sesję, wysyłasz formularz, strona się refreszuje i powinno już być ok, a tymczasem trzeba kolejny raz zrefreszować.

Pyton_000
Bo najpierw masz sprawdzanie warunków czy jesteś zalogowany a potem dopiero podejmowana akcja.
Czyli Twój Flow wygląda tak:
- Odpalasz stronkę - widzisz formularz zalogowania
- wypełniasz i robisz "zaloguj" Formularz się wysyła, sprawdzany jest warunek czy jesteś zalogowany. Nie jesteś więc pokazujesz znowu formularz. Dalej sprawdzasz czy jest $_POST, jest więc działasz i logujesz.
- Potem ręcznie odświeżasz stronę i znowu sprawdzasz warunek na zalogowanie. Uff już się zalogowałeś.


Z Wylogowaniem będziesz miał tak samo.

Musisz odwrócić kod (formularze na końcu a kod logujący na początku)
benzulli
No rozumiem, ale według tego, co powiedziałeś, powinno działać dobrze, a problem z wylogowaniem nadal jest.

  1. <?php
  2.  
  3. require_once "connect.php";
  4. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  5. if ($connect->connect_errno!=0)
  6. {
  7. echo "Error: ".$connect->connect_errno;
  8. }
  9. else
  10. {
  11. if($_POST['login'])
  12. {
  13. $email = htmlentities($_POST['email']);
  14. $password = htmlentities(md5($_POST['password']));
  15. $ask = sprintf("SELECT * FROM accounts WHERE email='%s' AND password='%s'", mysqli_real_escape_string($connect,$email), mysqli_real_escape_string($connect,$password));
  16. if($result = @$connect->query($ask)) // szuka usera, ktory ma taki sam email i haslo w bazie
  17. {
  18. if($result->num_rows == 1)
  19. {
  20. $array = $result->fetch_assoc();
  21. $_SESSION['logged'] = true;
  22. $_SESSION['username'] = $array['email'];
  23. $_SESSION['role'] = $array['role'];
  24. $result->close(); }
  25. else
  26. {
  27. echo "Błędne hasło/nazwa użytkownika.";
  28. }
  29. }
  30. }
  31.  
  32. $connect->close();
  33. }
  34. if($_POST['logout'])
  35. {
  36. }
  37. ?>
  38. <!DOCTYPE HTML>
  39. <html lang="pl">
  40. <head>
  41. <meta charset="utf-8" />
  42. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  43. <link rel="stylesheet" type="text/css" href="css/styles.css">
  44. <title></title>
  45. </head>
  46.  
  47. <body>
  48. <?php
  49. if($_SESSION['logged'])
  50. {
  51. ?>
  52. To info wyskakuje, kiedy jesteś zalogowany.
  53. <form method="post">
  54. <input type="submit" name="logout" value="Wyloguj">
  55. </form>
  56. <?php
  57. }
  58. else
  59. {
  60. ?>
  61. To info wyskakuje, kiedy nie jesteś zalogowany (wraz z formularzem). </br>
  62. <form method="post">
  63. <input type="text=" name="email">
  64. <input type="password" name="password">
  65. <input type="submit" name="login" value="Zaloguj">
  66. </form>
  67. <?php
  68. }
  69. ?>
  70. </body>
  71. </html>
  72. <?php
  73. ?>
Pyton_000
zrób sobie po
  1. if($_POST['logout'])
  2. {
  3. }

  1. var_dump($_SESSION, $_POST);
benzulli
Po naciśnięciu przycisku pojawia się:

  1. ["logged"]=> &bool(true)


natomiast, gdy jestem zalogowany, znaku ampersand nie ma, jest sama wartość bool(true). Z tego co wyczytałem, oznacza to, że zmienna tak jakby jest ta sama, lecz przyjmuje inną wartość (choć dlaczego potem jest bool(true)) to nie mam pojęcia.

Dzięki wielkie Pyton_000 za dotychczasową pomoc smile.gif
Pyton_000
To nie jest cały dump zdaje się tylko jego 1 element.
benzulli
  1. array(3) { ["logged"]=> bool(true) ["username"]=> string(21) "abc" ["role"]=> string(5) "admin" } array(3) { ["email"]=> string(21) "abc@abc.pl" ["password"]=> string(9) "123" ["login"]=> string(7) "Zaloguj" }
  2.  
  3. array(3) { ["logged"]=> &bool(true) ["username"]=> &string(21) "abc@abc.pl" ["role"]=> &string(5) "admin" } array(1) { ["logout"]=> string(7) "Wyloguj" }
nospor
  1. if($_POST['logout'])
  2.  
  3. {
  4.  
  5. $_SESSION['logged'] = false;
  6. }
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.