Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz z wieloma etapami
Forum PHP.pl > Forum > PHP
Lethys
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ę?
nospor
$_SESSION[krok] == $_SESSION[krok]+1;
Poczytaj w manualu co oznacza
=
a co oznacza
==
No już takie podstawy naprawdę mógłbyś znać.
Lethys
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
nospor
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ć.
qasz
Zmien w naglowku :
  1. if(!isset($_SESSION['krok'])) $_SESSION['krok'] = 0;
Adi32
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.
Pilsener
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ą.
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.