Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Formularz w dwóch krokach
Forum PHP.pl > Forum > Przedszkole
Turson
Podzieliłem formularz dodawania ogłoszenia na 2 etapy.
W I etapie jest formularz i następuje walidacja danych.
W II etapie też jest formularz.

Jeśli I formularz przejdzie walidację, dane zapisuję w sesji i następuje przekierowanie do drugiego etatpu (inna podstrona). Tutaj pojawia się problem.
Strona ma załadować formularz TYLKO jeśli formularz I przeszedł walidacje. I właśnie nie wiem jak to sprawdzić...

Próbowałem coś takiego: po udanej walidacji $_SESSION["ok"] =1 i potem w II formularzu ifem sprawdzić czy równe jest 1 i wtedy już wiadomo co. Jest jednak ale... użytkownik może cofnąć stronę a następnie wejść w formularz II pomijając formularz I a i tak wyświetli mu się formularz II bo ok==1 zapisane w sesji.
Jakieś pomysły?
b4rt3kk
Jeśli w pierwszym formularzu zwalidowane dane są zapisane w sesji to w czym problem? Dalej tam są. Nawet jak user cofnie się o stronę to dane z sesji nigdzie sobie nie uciekną, chyba, że ponownie prześle wcześniejszy formularz, wtedy w takim przypadku ustawiasz flagę na 0. Inaczej cały czas masz poprawne dane, które śmiało możesz wykorzystać przy zapisie do bazy.
Turson
Nie chodzi o przesłanie danych, tylko jak sprawdzić na drugiej stronie, że na poprzedniej formularz został prawidłowo wypełniony.
Formularz I działa tylko w obrębie tej strony i dane z $_POST pozostają tylko tam. Jeśli wszystko jest ok za pomocą header przekierowuję na inną stronę. Na tej innej stronie muszę mieć możliwość sprawdzenia czy formularz I został wypełniony prawidłowo.
b4rt3kk
To czego nie rozumiesz? Jeśli formularz został prawidłowo wypełniony to ustawiasz flagę na 1, natomiast jeśli ktoś się wróci do formularza i go źle wypełni, czyli np. $errors == true, to znów ustawiasz flagę na 0 i kolejna strona nie powinna się wyświetlić. Sam fakt powrotu do poprzedniej strony ma dla Ciebie jakieś znaczenie w kolejnych krokach? Co się dzieje z tymi danymi z pierwszej strony?

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $errors == false)
  2. $_SESSION['flaga'] = true; else $_SESSION['flaga'] = false;
Turson
Rozumiem, zapisze w sesji true. Ale jeśli ktoś np. wejdzie w inną podstronę, a potem bezpośrednio po linku na II formularz to go zobaczy, bo w sesji dalej jest zapisane true. Ma go zobaczyć tylko kiedy ja go przekieruję
b4rt3kk
  1. if ($_SERVER['HTTP_REFERER'] == 'strona przekierowania')


Adres poprzedniej podstrony możesz również trzymać w sesji.
Turson
Widzę, że się nie rozumiemy cool.gif Ciężko to wyjaśnić, więc może dlatego mi nie wyszło.

Zacznę od nowa.
Piszę kod dodawania nowego ogłoszenia do strony z ogłoszeniami.
Proces dodawania rozdzieliłem na 2 etapy, by było przejrzyściej w kodzie.

W I etapie np. form1.php mam pewnien formularz. Submit wykonuje się na tej samej stronie. Po przejściu walidacji formularza dane z niego zapisuję w sesji. Jeśli wszystko poszło dobrze, przekierowuję za pomocą header na form2.php. Jest to II etap dodawania ogłoszenia.
Ale form2.php ma wyświetlić kolejny formularz gdy formularz z I etapu (form1.php) został pomyślnie uzupełniony. Kiedy tak się nie stało, formularz ma się nie pokazać.
Jak mam sprawdzić w drugim formularzu czy pierwszy formularz został poprawnie uzupełniony? Dane z I form. trzymam w sesji i nie chodzi tu o nie.

W form1.php po pomyślnej walidacji nie mogę zrobić takiego triku, że w sesji dodam np. $_SESSION["pomyslnie"]=true a potem w form2.php sprawdze if($_SESSION["pomyslnie"], bo równie dobrze użytkownik mógł wypełnić dobrze pierwszy formularz i go przekierowało na drugi a on w tym czasie zrezygnował i przeszedł następnie na stronę główną. Idąc tym tokiem może bez problemu wejść w formularz form2.php bo w sesji dalej trzyma $_SESSION["pomyslnie"]==true
Greg0
Więc b4rt3kk ci dobrze napisał że w sesji możesz tez trzymać adres z którego ktoś przychodzi, jeśli jest inny niż form1 to form2 się nie wyświetla.
Druga opcja jest taka (gorsza) że na każdej innej podstronie zawsze $_SESSION["pomyslnie"] ustawiasz na FALSE. Jeśli masz zaimplementowane breadcrumbs na stronie sprawa staję się jeszcze prostsza.
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.