Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsługa wielostronicowego formularza, smarty + session + post
onlyX
post
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Grajewo

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sf
post
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) jesli to jest reg_page=0 to zadziala, jesli zmienna nie jest ustawiona to wywali notice jak napisalem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )

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


to wyrzuca notice ... (IMG:http://forum.php.pl/style_emoticons/default/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 :]

Ten post edytował sf 11.09.2004, 12:23:38
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 12:42