Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja "wyloguj" nie działa.
Forum PHP.pl > Forum > Przedszkole
jerry1984
Witam

Próbowałem zmodyfikować książkowy skrypt wylogowania się, lecz po wciśnięciu przycisku "Wyloguj" nadal jestem zalogowany.
Skrypt ogółem działa, zasada wykrywania czy jest zalogowany użytkownik czy odwiedził nas "Gość".
Oto skrypt z którym się borykam:
  1. <?php
  2. require_once './user/conn.inc.php';
  3.  
  4. function redirect($url) {
  5. if (!headers_sent()) {
  6. header('Location: http://' . $SERVER['HTTP_HOST'] .
  7. dirname($_SERVER['PHP_SELF']) . '/' . $url);
  8. } else {
  9. die ('Nie mogę przekierować.');
  10. }
  11. }
  12.  
  13. if (isset($_SESSION['user_logged'])) {
  14. echo "<div>";
  15. echo "Witaj: " . $_SESSION['user_logged'] ;
  16. echo "&nbsp;";
  17. echo "<a href=\"index.php?action=wylogyj\">Wyloguj</a>";
  18. echo "</div>";
  19. } else {
  20. echo "Witaj: Gościu";
  21. }
  22.  
  23. if (isset($_REQUEST['action'])) {
  24. switch($_REQUEST['action']) {
  25. case 'wyloguj';
  26.  
  27. redirect('index.php?id=main');
  28. break;
  29. }
  30. }
  31.  
  32.  
  33.  
  34. ?>


Proszę o podpowiedz gdzie tkwi błąd. Przejrzałem sporo przykładów i nie wiedziałem aby ktoś używał do wylogowania funkcji switch.
Może nie powinienem w taki sposób pisać tego typu skryptów.

Z góry dziękuję
Pozdrawiam
mat-bi
No i panie masz książkowy błąd - literówka w linii 17
kadlub

linijki od 23 do 33 zastąp tym
  1. if (isset($_GET['action'])) {
  2.  
  3.  
  4.  
  5. redirect('index.php?id=main');
  6.  
  7. }
  8.  
mat-bi
Kadlub, a jak będzie miał ?action=login, to też ma mu niszczyć sesję?

Co do switch'a, można taką konstrukcje zastosować, zwykle jednak uzywa się jej zamiast rozbudowanych instrukcji if...elseif..else
jerry1984
specool.gif miałeś rację ale jestem sciana.gif

Mam jeszcze jedno pytanko, w sprawie "redirect" po przekierowaniu wywala mi błąd dopisuje do ścieżki Url backslash: \ i wygląda to tak:

Kod
http://localhost\/index.php?id=main


a nie widzę żeby znów miał błąd literowy.

Pozdrawiam
Dipter
Błędem jest to co podał mat-bi.
kadlub - Bardzo inteligentnie, teraz przy każdej wykonanej akcji będzie niszczyć sesję i przenosić do głównej strony. Chyba jasno widnieje instrukcja switch i stan wyrażenia "wyloguj".

Popraw linie 17 - ?action=wylogyj -> ?action=wyloguj
kadlub
Cytat(mat-bi @ 3.05.2011, 22:04:40 ) *
Kadlub, a jak będzie miał ?action=login, to też ma mu niszczyć sesję?

Co do switch'a, można taką konstrukcje zastosować, zwykle jednak uzywa się jej zamiast rozbudowanych instrukcji if...elseif..else

ja nie widzę żeby tu przypisywał inną wartość a jak chce to sprawdzić to tak jak mówisz niech da jeszcze if
mat-bi
Cytat
Błędem jest to co podał mat-bi.


Mogę wiedzieć, na jakiej podstawie tak sądzisz? W końcu podałeś to samo, co ja blink.gif

Co do jerry'ego podaj wynik:

  1. var_dump($_SERVER);
Dipter
mat-bi
Źle mnie zrozumiałeś ;P Przyznałem Ci rację.

dirname() jest niepotrzebny, poza tym przed zmienną url daj tylko slasha. Bez hostu i niczego ;P
mat-bi
Tak jak coś - zgaduję, że korzystasz z Wina wink.gif

rzeczywiście, $_SERVER jest w tym jak piąte koło u wozu, wystarczy:

  1. header("Location : $url");
jerry1984
specool.gif Działa jak w szwajcarskim zegarku.

Dziękuje mat-bi pomogłeś mi bardzo.

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