Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja "wyloguj" nie działa.
jerry1984
post 3.05.2011, 21:32:19
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 3
Dołączył: 4.12.2010

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


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
Go to the top of the page
+Quote Post
mat-bi
post 3.05.2011, 21:34:54
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


No i panie masz książkowy błąd - literówka w linii 17
Go to the top of the page
+Quote Post
kadlub
post 3.05.2011, 21:57:33
Post #3





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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



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.  
Go to the top of the page
+Quote Post
mat-bi
post 3.05.2011, 22:04:40
Post #4





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


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
Go to the top of the page
+Quote Post
jerry1984
post 3.05.2011, 22:07:36
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 3
Dołączył: 4.12.2010

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


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

Ten post edytował jerry1984 3.05.2011, 22:10:58
Go to the top of the page
+Quote Post
Dipter
post 3.05.2011, 22:07:36
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


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
Go to the top of the page
+Quote Post
kadlub
post 3.05.2011, 22:08:05
Post #7





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


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
Go to the top of the page
+Quote Post
mat-bi
post 3.05.2011, 22:11:48
Post #8





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


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);
Go to the top of the page
+Quote Post
Dipter
post 3.05.2011, 22:13:41
Post #9





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


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
Go to the top of the page
+Quote Post
mat-bi
post 3.05.2011, 22:16:22
Post #10





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


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");
Go to the top of the page
+Quote Post
jerry1984
post 3.05.2011, 22:17:31
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 3
Dołączył: 4.12.2010

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


specool.gif Działa jak w szwajcarskim zegarku.

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

Pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.06.2024 - 19:02