Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obsługa wielostronicowego formularza
Forum PHP.pl > Forum > PHP
onlyX
Stworzyłem przed chwilą szkielet skryptu obsługi kilkustronicowego formularza.
Prosiłbym, żebyście przyjżeli się kodowi i sprawdzili czy jest on logicznie poprawny i czy nie zawiera błędów:
  1. <?
  2. //
  3. // Rejestracja nowego uzytkownika
  4. //
  5. require 'includes/class_quick.php';
  6. $quick = new quick;
  7.  
  8. // jeśli zalogowany
  9. if($_SESSION['log']) {
  10. header(&#092;"Location: index.php\");
  11. }
  12.  
  13. if(!$_POST['reg_page']) {
  14. //wyświetl regulamin
  15. $quick->smarty->assign(&#092;"reg_page\",\"1\");
  16. $quick->smarty->display('../templates/register_reg.tpl');
  17. }
  18. else if($_POST['reg_page']==1) {
  19. //wyświetl formularz rejestracyjny
  20. $quick->smarty->assign(&#092;"reg_page\",\"2\");
  21. $quick->smarty->display('../templates/register_form.tpl');
  22. }
  23. else if($_POST['reg_page']==2) {
  24. //procedury sprawdzenia danych
  25. //jęsli dane są poprawne
  26. //wyśqietl potwierdzenie wprowadzonych danych
  27. $quick->smarty->assign(&#092;"reg_page\",\"3\");
  28. $quick->smarty->display('../templates/register_confirm.tpl');
  29. // jeśli dane nie są poprawne
  30. //wróć do formularza
  31. $quick->smarty->assign(&#092;"reg_page\",\"2\");
  32. $quick->smarty->display('../templates/register_form.tpl');
  33. }
  34. else {
  35. //jeśli dane wymagane (login, hasło, confirm, email) zostały podane
  36. //utworzenie nowego użytkownika w bazie danych
  37. //INSERT INTO ...
  38. //wyświetl podziękowania
  39. $quick->smarty->assign(&#092;"info\",\"Dziękujemy za rejestrację, za chwile zostaniesz przeniesiony do strony logo
    w
  40. nia.\");
  41. $quick->smarty->display('../templates/register_confirm.tpl');
  42. unset($_POST['reg_page'])
  43. //jeśli nie wróć do formularza
  44. $quick->smarty->assign(\"reg_page\",\"2\");
  45. $quick->smarty->display('../templates/register_form.tpl');
  46. }
  47.  
  48. ?>


Mam też kilka pytań:
- W jaki sposób zabrać się do sprawdzania poprawności danych?
Myślałem o funkcachi sprawdzających każde pole z osobna (czy jest liczbą, czy jest e-mailem, itp.) i zwracających prawdę lub fałsz. Potem bym sprawdzał tylko czy wszędzie jest true. Jeśli byłoby false wtedy wracałoby do formularza i wyświetlała nad nim informacje o niepoprawnych danych.
sf
Proponowana konstrukcje moją masz tutaj :

http://forum.php.pl/index.php?showtopic=20...ndpost&p=124020
onlyX
Twoje rozwiązanie od mojego różni się w zasadzie tylko tym, że zmienną $id (w moim przypadku $reg_page) przekazuję poprzez $_POST w hidden polu formularza.

Dodam jeszcze że dane do sprawdzenia w trzecim kroku chce przekazać przez $_POST, a do potwierdzenia i wysłania do bazy w kroku 4-tym użyję sesji.
sf
Ja znalazłem trochę więcej różnic ...

1) użycie switch" title="Zobacz w manualu PHP" target="_manual, ponieważ bez sensu pisać if else if else if else
2) Twoja próba sprawdzania we funkcji... czyli do każdego pola będzie osobna funckja? po co? odrazu sprawdzam w każdym case czy zmienna jest błędna, nie potrzebuje odwoływać się do funkcji ... chyba, że napiszesz coś bardziej skomplikowanego do sprawdzenia poprawności email to wtedy tak, ale czy jest liczba... do tego nie trzeba pisać funkcji
3) w moim rozwiązaniu wyświetalnie formularza odbywa się po sprawdzeniu danych zależnie od zmiennej krok, a nie w każdym case sprawdzam if, który formularz mam wyświetlić... oszczędność pisania bo tylko jeden raz występuje echo $err;, a nie w każdym if

no i znalazłem jednego buga... (EDIT: zaleznie od tego jak wyglada kod strony bo tej czesci kodu nie widac tongue.gif jesli to jest reg_page=0 to zadziala, jesli zmienna nie jest ustawiona to wywali notice jak napisalem tongue.gif)

  1. <?php
  2. if(!$_POST['reg_page'])
  3. ?>


to wyrzuca notice ... winksmiley.jpg jak już to użyj isset

albo inne rozwiązanie jest takie :

(int)@$_POST['reg_place'] wtedy zwraca 0 jesli nic nie zdefiniowalismy, albo jest to litera czy inny znak od liczby :]
onlyX
1) Do switch nie jestem przyzwyczajony, to jest mój pierwszy większy skrypt i do tej pory ograniczałem się tylko do if i else if.
2) Jeśli chodzi o sprawdzanie danych za pomocą funkcji to planuje stworzyć kilka do kilku pól (np. funkcja sprawdzania maili do pól: e-mail, tlen i icq).
3) W moim wypadku formularz ma 3 strony, ale dane podaje się tylko na jednej stronie, dlatego dane sprawdzane są raz przed potwierdzeniem i drugi raz na wszelki wypadek (tylko czy są wszystkie wymagane) przed zapisaniem w bazie danych.

Wprowadziłem kilka poprawek do kodu (nadal bez funkcji sprawdzania danych):
  1. <?
  2. //
  3. // Rejestracja nowego uzytkownika
  4. //
  5. require 'includes/class_quick.php';
  6. $quick = new quick;
  7.  
  8. // jeśli zalogowany
  9. if(@$_SESSION['log']) {
  10. header(&#092;"Location: index.php\");
  11. }
  12.  
  13. if(!isset($_POST['reg_place'])) {
  14. //wyświetl regulamin
  15. $quick->smarty->assign(&#092;"reg_page\",\"1\");
  16. $quick->template = 'register_reg.tpl';
  17. }
  18. else if($_POST['reg_page']==1) {
  19. //wyświetl formularz rejestracyjny
  20. $quick->smarty->assign(&#092;"reg_page\",\"2\");
  21. $quick->template = 'register_form.tpl';
  22. }
  23. else if($_POST['reg_page']==2) {
  24. //procedury sprawdzenia danych
  25. //jęsli dane są poprawne
  26. //wyśqietl potwierdzenie wprowadzonych danych
  27. $quick->smarty->assign(&#092;"reg_page\",\"3\");
  28. $quick->template = 'register_confirm.tpl';
  29. // jeśli dane nie są poprawne
  30. //wróć do formularza
  31. $quick->smarty->assign(&#092;"reg_page\",\"2\");
  32. $quick->template = 'register_form.tpl';
  33. }
  34. else {
  35. //jeśli dane wymagane (login, hasło, confirm, email) zostały podane
  36. //utworzenie nowego użytkownika w bazie danych
  37. //INSERT INTO ...
  38. //wyświetl podziękowania
  39. $quick->smarty->assign(&#092;"info\",\"Dziękujemy za rejestrację, za chwile zostaniesz przeniesiony do strony logo
    w
  40. nia.\");
  41. $quick->template = 'register_thx.tpl';
  42. unset($_POST['reg_page']);
  43. //jeśli nie wróć do formularza
  44. $quick->smarty->assign(\"reg_page\",\"2\");
  45. $quick->template = 'register_form.tpl';
  46. }
  47. $quick -> quick_end();
  48.  
  49. ?>
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.