Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przekierowanie
Forum PHP.pl > Forum > Przedszkole
devbazy
Witam tutejszą społeczność

Od jakiegoś już czasu nurtuje mnie jedno zagadnienie, a mianowicie przekierowanie, którego zadaniem jest przeniesienie użytkownika na wybraną przez niego stronę, po ówczesnym zalogowaniu. Nie chodzi mi tutaj wcale o header("location: strona.php"), a coś całkowicie odmiennego - być może z tym związanego, nie wiem. Zasadę działania wytłumaczę na prostym przykładzie. Dany użytkownik próbuje wejść na stronę dostępną tylko dla zalogowanych - w adresie wpisuje: www.dana-strona.pl/index.php?strona=panel - po wykonaniu takowej operacji następuje przekierowanie do formularza logowania, jednak adres strony nieco się zmienia: www.dana-strona.pl/index.php?strona=logowanie&next=panel. Wpisując poprawne dane w formularzu przenosi nas do pierwotnie wpisanego adresu: www.dana-strona.pl/index.php?strona=panel. Mógłby mi ktoś pojętny wytłumaczyć na jakiej zasadzie to działa. Z góry dzięki za jakąkolwiek pomoc.

Fantazyn
Wchodzi sobie gość na stronę:
www.dana-strona.pl/index.php?strona=panel

  1. if($_SESSION['logged']) // jakiś warunek na sprawdzenie czy user jest zalogowany
  2. {
  3. //jak jest zalogowany to pozostaje na tej stronie
  4. }
  5. else {
  6. //a jak nie to wywala go do logowania
  7. header("location: www.dana-strona.pl/index.php?strona=logowanie&next=".$_GET['strona']);
  8. }

www.dana-strona.pl/index.php?strona=logowanie&next=panel

loguje się...

  1. if (user i hasło jest dobre) // logujemy sie i jest ok
  2. {
  3. if(isset($_GET['next'])){ //jest ustawione przekierowanie do którego ma wrócić user
  4. header("location: www.dana-strona.pl/index.php?strona=".$_GET['next']);
  5. }
  6. // tu coś się robi jak user zalogował się, ale nie przyszedł z żadnej strony
  7. }
  8. else {
  9. // nie zalogował się poprawanie
  10. }


Mam nadzieję, że o to Ci chodziło : )
potreb
Jeżeli nie zalogowany to powraca do formularza logowania, proste??

Taka sprawa a tak długie pytanie
bogdan89
ja jeszcze tylko dodam, że można użyć zmiennych środowiskowych w PHP, które zastąpią to wieśniackie: "(...)&next=panel";
potreb
Cytat(bogdan89 @ 15.09.2009, 20:04:37 ) *
ja jeszcze tylko dodam, że można użyć zmiennych środowiskowych w PHP, które zastąpią to wieśniackie: "(...)&next=panel";


Google też wieśniaki?
bogdan89
Cytat(potreb @ 15.09.2009, 22:36:32 ) *
Google też wieśniaki?


nie nazwałem wieśniakami tych co korzystają z takich rozwiązań.
Oni pewnie mają w tym jakieś swoje większe cele.

Ale jeśli chodzi o tylko i wyłącznie działające przekierowanie to można pozbyć się tej zmiennej.
devbazy
Cytat(potreb @ 15.09.2009, 22:36:32 ) *
Taka sprawa a tak długie pytanie


Mogłem napisać to prościej, ale czy aby na pewno wszyscy zrozumieliby o co mi dokładnie chodzi? Tego pewien być nie mogłem, dlatego wolałem umieścić większość informacji w jednej wypowiedzi, niżeli później to wszystko upraszczać, wyjaśniać. Fantazyn, Twoje rozwiązanie okazało się skuteczne, a myślałem, że okaże się to trudniejsze, dzięki za pomoc. Temat można oczywiście zamknąć.

----------------------------

Otóż mam kolejny problem. Chciałem zastosować pewną regułkę w pliku .htaccess, by URL wyglądał nieco lepiej, ale niestety wygląda na to, że po wykonaniu tej czynności - tablica $_GET nie przekazuje żadnej wartości.

Wygląda to mniej więcej tak (pokaże to na wcześniejszym przykładzie podanym przez Fantazyna):

Dana osoba wchodzi na stronę: www.dana-strona.pl/panel/informacje/

  1. if($_SESSION['logged']) // jakiś warunek na sprawdzenie czy user jest zalogowany
  2. {
  3. //jak jest zalogowany to pozostaje na tej stronie
  4. }
  5. else {
  6. //a jak nie to wywala go do logowania
  7. header("location: www.dana-strona.pl/logowanie/?next=/panel/info/");
  8. }


Logujemy się...

  1. 1.
  2. if (user i hasło jest dobre) // logujemy sie i jest ok
  3. 2.
  4. {
  5. 3.
  6. if(isset($_GET['next'])){ //jest ustawione przekierowanie do którego ma wrócić user
  7. 4.
  8. header("location: www.dana-strona.pl".$_GET['next']); //powinno przejść na stronę: www.dana-strona.pl/panel/info/ - jednak wygląda na to, że $_GET niczego nie przekazuje
  9. 5.
  10. 6.
  11. }
  12. 7.
  13. // tu coś się robi jak user zalogował się, ale nie przyszedł z żadnej strony
  14. 8.
  15. }
  16. 9.
  17. else {
  18. 10.
  19. // nie zalogował się poprawanie
  20. 11.
  21. }


Tak to wygląda w pliku .htaccess

  1. RewriteRule ^logowanie/?next=/([^-]+)/?$ ?strona=logowanie&next=$1 [L]


Liczę na jakieś wskazówki. Wiem, że mogłem namieszać. Kombinuje już z tym dłuższy czas i nie mogę wymyślić jakiegoś sensownego rozwiązania.

Odświeżam temat.
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.