Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Dodatkowe odświeżenie podczas logowania
benzulli
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


  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ć.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 15:01