Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronicowanie formularza
Forum PHP.pl > Forum > PHP
riffraff
Temat Stronicowanie Formularza
Witam,

Chciałbym zapytać o Wasze zdanie na pewien problem 

1) Wyjaśnienie problemu
2) Jaki sposób lepszy pod względem bezpieczeństwa
3) Jak wykonać przycisk wróć

ad. 1) Mam wykonać formularz który będzie zawierał wiele komórek do wypełnienia przez użytkownika. Dlatego chcę go podzielić na kilka mniejszych formularzy wyświetlających się jeden po drugim. Nie chcę używać ani cookies ani sesji, więc wszystko robię w jednym pliku - formularz.php, dołączając plik z klasą formularz_klasy.php który zajmuje się generowaniem odpowiednich stron formularza.

formularz.php
  1. <html>
  2. .
  3. .
  4.  
  5. <body>
  6. <?php
  7. include('formularz_klasy.php');
  8. ?>
  9. </body>
  10. </html>



formularz_klasy.php


  1. <?php
  2. <?php
  3. class form
  4. {
  5.  var $data = array();
  6.  
  7.  function form($dane)
  8.  {
  9.      $this->data = $dane; // przekazanie tablicy $_POST do tablicy $this->data używanej wewnątrz klasy
  10.  
  11.  
  12.      // jeśli zostały zapisane zmienne z obu czesci formularza to wyświetl strone trzecia
  13.  
  14.      if(isset($this->data['imie']) && isset($this->data['nazwisko']))
  15.      {
  16.          $this->DrawForm3();
  17.      }
  18.  
  19.      // jeśli została zapisana zmienna z pierwszej czesci formularza to wyswietl nastepna czesc 
  20.      elseif(isset($this->data['imie']))
  21.          $this->DrawForm2();
  22.  
  23.      // jeśli nie wpisano jeszcze zadnej zmiennej to wyswietl pierwsza czesc formularza
  24.      else
  25.          $this->DrawForm1();
  26.  }
  27.  
  28.  function DrawForm1()
  29.  {
  30.      //formularz z pierwszej strony 
  31.  
  32.      echo '<form action="formularz.php" method="post">'
  33.      .'<table cellpadding="1" cellspacing="1">'
  34.      .'<tr>'
  35.      .'<td>Imie</td>'
  36.       
  37.          //ktorego celem jest pobranie danej 'imie'
  38.          .'<td><input type="text" name="imie" value="'.$this->data['imie'].'"></td>'
  39.  
  40.      .'</tr>'
  41.      .'<tr>'
  42.      .'<td colspan = "2"><input type="submit" value="Wyślij"></td>'
  43.      .'</tr>'
  44.      .'</table>'
  45.      .'</form>';
  46.  }
  47.  
  48.  function DrawForm2()
  49.  {
  50.      //formularz z drugiej strony 
  51.  
  52.      echo '<form action="formularz.php" method="post">'
  53.      .'<table cellpadding="1" cellspacing="1">'
  54.      .'<tr>'
  55.      .'<td>Nazwisko</td>'
  56.       
  57.          //ktorego celem jest pobranie danej 'nazwisko' ...
  58.          .'<td><input type="text" name="nazwisko" value="'.$this->data['nazwisko'].'"></td>'
  59.  
  60.      .'</tr>'
  61.      .'<tr>'
  62.      .'<td colspan = "2"><input type="submit" value="Wyślij"></td>'
  63.      .'</tr>'
  64.       
  65.          //...oraz zapamietanie danych z formularza z pierwszej strony( $_POST['imie']  )
  66.          .'<input type="hidden" name="nazwisko" value="'.$this->data['imie'].'">'
  67.  
  68.      .'</table>'
  69.      .'</form>';
  70.  }
  71.  
  72.  function DrawForm3()
  73.  {
  74.      //wyswietlenie obu zmiennych
  75.      echo 'Nadawca: '.$this->data['imie']
  76.      .'</br>Odbiorca: '.$this->data['nazwisko'];
  77.  }
  78.  
  79. }
  80. $formularz = new form($_POST);
  81. ?>



ad. 2)


Na takiej zasadzie chciałbym wykonać całość. Chciałbym się dowiedzieć jaki jest wasz punkt widzenia, czy jest to zły sposób na akwizycję danych i dlaczego, czy lepiej wszystko wrzucić do jednego wora i cały formularz zawrzeć na jednej stronie, i w czym takie podejście jest lepsze od sposobu dzielonego. Szczególnie interesuje mnie abyście popatrzyli na oba sposoby pod kątem bezpieczeństwa.

ad. 3)

Jeżeli chodzi o sposób 'dzielony' to czy macie jakiś pomysł na wykonanie przycisku 'wróć do poprzedniej strony i popraw dane'

Czekam na uwagi i propozycje.


ps. Sorry że tak dużo do przetrawienia na jeden post, starałem się uprościc kod jak tylko moglem
ps2. to mój pierwszy post więc proszę o wyrozumiałość
jarek04
ad.3
Dodaj pole ukryte z numerem strony i przycisk wróć jeżeli ktoś wcisnął wróć wtedy wyświetl strona - 1, jezeli przechodzi dalej to strona + 1. jeżeli strona jest równa 3 wtedy koniec formularza.

Co do pytania bezpieczeństwo to nie widzę wielkiej różnicy czy to będzie jeden formularz czy rozwiązanie z 3 różnymi. W obu przypadkach poziom bezpieczeństwa jest identyczny i zależy głównie od tego jak obsłużysz dane które zostały przesłane przez użytkownika. Jedyną denerwującą użytkownika rzeczą może być to że jak nie dojdzie do końca to straci wcześniej wpisane dane i będzie musiał zaczynać od nowa. Moze warto wprowadzić opcje zapisu jego informacji w sesji lub ciasteczkach aby kiedy przerwie z jakiś powodów uzupełnianie formularza a potem będzie chciał dokończyć to nie będzie musiał wpisywać wszystkiego od nowa.
kitol
Wygeneruj jedną stronę zawierającą cały formularz podzielony na sekcje ukryte (oprócz pierwszej) za pomocą display:none.
Sekcje przełączaj za pomocą JS.
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.