Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Formularz z wieloma etapami
Lethys
post 4.04.2012, 09:23:02
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Witam,

Tworzę wielo stopniowy formularz rejestracyjny. Tzn. krok 1 -> krok 2 itp.


Mam problem z przechodzeniem pomiędzy kolejnymi krokami.

Wymyśliłem aby to zrobić przy pomocy sesji. W sesji zapisywać będę jaki jest obecnie krok oraz wszelskie inne informacje przesyłane formularzem.


Obecnie wyląda to tak:

Na początku strony mam

  1. <?php
  2. $_SESSION[krok] = 0;
  3. ?>



W nagłówku sekcji strony z treścią mam:

  1. <?php
  2. // to raczej tylko dla mnie żebym widział czy działa przechodzenie między krokami
  3.  
  4. echo $_SESSION[krok];
  5. ?>



Póżniej jest wyśweitlanie treści dla odpowiedniego kroku np.:

  1. <?php
  2. if ($_SESSION[krok] == 0){
  3. echo '
  4. <div class="mws-panel-content">
  5. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque non leo convallis nibh tristique commodo. Cras tincidunt hendrerit pharetra. Etiam erat magna, egestas sed placerat at, congue sed nisi. Nullam eget varius leo. Integer at justo a velit imperdiet pulvinar. Sed magna mi, sodales sit amet aliquet ac, eleifend eget sem. Nam ipsum lectus, fringilla sed rutrum ac, tempus in orci. Pellentesque condimentum dui a elit rutrum at posuere tellus dignissim. Aliquam erat volutpat. Suspendisse potenti. Sed convallis convallis tellus, id volutpat leo euismod in. Curabitur dapibus commodo vehicula. Nullam varius, lacus at porta pellentesque, dolor massa rutrum lorem, vehicula dapibus dui erat nec mi. Donec condimentum lectus ut ligula condimentum et luctus orci pharetra. Fusce semper tempor dui, vitae sollicitudin mauris volutpat in. Aliquam erat volutpat.</p>
  6. </div>';
  7.  
  8. }
  9. ?>


Następnie buttony z przechodzeniem pomiędzy stronami:

  1. <?php
  2.  
  3. $dalej = $_SERVER['PHP_SELF'] . '?akcja=' . dalej;
  4. $wstecz = $_SERVER['PHP_SELF'] . '?akcja=' . wstecz;
  5.  
  6. if ($_SESSION[krok] == 0){
  7.  
  8. echo '<a href='.$dalej.'><input value="Dalej" class="mws-button green" /></a>';
  9.  
  10. }else{
  11.  
  12. echo '<a href='.$wstecz.'><input value="Wróć" class="mws-button gray left" /></a>
  13. <a href='.$dalej.'><input value="Dalej" class="mws-button green" /></a>';
  14. }
  15.  
  16. ?>


oraz na końcu kod do buttonów (chwilowo prowizorka):

  1. <?php
  2. if ($akcja == dalej){
  3.  
  4. $_SESSION[krok] = $_SESSION[krok]+1;
  5.  
  6.  
  7. }
  8.  
  9.  
  10. ?>


Cały problem polega na tym, że $_SESSION[krok] jest zawsze równe 0, czyli przechodzenie między następnymi krokami po prostu nie działa. Co źle robię?

Ten post edytował Lethys 4.04.2012, 10:34:19


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post 4.04.2012, 09:32:26
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$_SESSION[krok] == $_SESSION[krok]+1;
Poczytaj w manualu co oznacza
=
a co oznacza
==
No już takie podstawy naprawdę mógłbyś znać.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Lethys
post 4.04.2012, 10:33:15
Post #3





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


No wiem, że w warunkach się piszę == a w zmiennych =.

Ale to nic nie zmienia bo jak zapiszę $_SESSION[krok] = 0; to i tak nie działa sad.gif


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
nospor
post 4.04.2012, 10:42:25
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A startujesz w ogole sesje?
1) Pokaz caly kod
2) Włacz wyswietlanie błędów
No zgadywać mamy co jest nie tak. Pomoż nam troche. Tyle czasu na forum to pewne podstawy analizy mógłbyś zrobić i nam podać.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
qasz
post 4.04.2012, 15:09:50
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 2
Dołączył: 18.05.2010
Skąd: Norwich

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


Zmien w naglowku :
  1. if(!isset($_SESSION['krok'])) $_SESSION['krok'] = 0;


Ten post edytował qasz 4.04.2012, 15:10:09
Go to the top of the page
+Quote Post
Adi32
post 4.04.2012, 15:46:16
Post #6





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Daj gdzieś na starcie:



Potem:

  1. if (!$_SESSION[krok]) $_SESSION[krok]=1;
  2.  
  3. if ($_POST[submit]) {
  4. $_SESSION[krok]++;
  5. }
  6.  
  7. if ($_POST[wstecz]) {
  8. $_SESSION[krok]--;
  9. }
  10.  
  11. include 'formularz_krok'.$_SESSION[krok].'.html';
  12.  


Coś w ten deseń.

Przydałoby się jeszcze zbierać informacje z każdego formularza. Ja zazwyczaj wrzucam wszystko w sesje ale należy pamiętać, że zaśmiecanie sesji nie jest etyczne.

Ten post edytował Adi32 4.04.2012, 15:47:56


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Pilsener
post 4.04.2012, 22:54:20
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Po co sesje? To moim zdaniem komplikowanie prostego zadania...

Formularz rozbijamy na etapy więc powinniśmy wyjść z założenia, że to jeden formularz a nie kilka.
Dlatego formularz powinien być cały a na poszczególnych etapach powinniśmy jedynie zmieniać typy inputów z np. text na hidden (tak by były widocznie jedynie inputy dla bieżącego etapu), można to okodować w klasie samego formularza (a numer etapu przekazywać w konstruktorze lub bezpośrednio pobierać go sobie z get/post), jeśli mamy dobry framework nie sprawi nam także problemów walidacja czy filtrowanie każdego etapu.

Potem można zabawkę rozbudować o fajne zakładki, przyciski wstecz-naprzód by ewentualnie coś jeszcze poprawić a do przechowywania danych proponuję użyć ciastek. W ten sposób nawet jak komuś zerwie połączenie to będzie mógł odtworzyć ostanie machinacje o ile ciastka się zachowają.
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: 28.06.2025 - 06:07