Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Problem z walidacją formularza
--Marian--
post
Post #1





Goście







Witam,
mam problem z walidacją formularza.
Stworzyłem formularz który dodaje mi wydarzenia do bazy.
Problem w tym, ze nawet jak nic nie wpiszę do formularza, to mi wysyła go i wyswietla komunikat że dodało wydarzenie do bazy,
czego oczywisscie fizycznie nie wykonało. Jeśli podam wszystkie pola, to wydarzenie normalnie jest dodawane do bazy,
chciałbym też mieć możliwość wypełnienia nie wszystkich pól formularzai żeby dodawane zostało wydarzenie do bazy z mniejszą iloscią danych.
Przesyłam kody:

[formularz]

  1.  
  2. <form method="GET" action="dodawanieNiestac.php">
  3. <div class="form">
  4. <legend>Dodaj Wydarzenie</legend>
  5.  
  6. <span>Nazwa Wydarzenia</span>
  7. <input type="text" class="add" name="nazwa" />
  8.  
  9. <span>Inna informacja</span>
  10. <input type="text" class="add" name="inna"/>
  11.  
  12. <span>Numer Zjazdu</span>
  13. <input type="text" class="add" name="numerZ"/>
  14.  
  15. <span>Data Rozpoczęcia</span>
  16. <input type="text" class="add" name="dataR"/>
  17.  
  18. <span>Data Zakończenia</span>
  19. <input type="text" class="add" name="dataZ"/>
  20.  
  21. <input type="submit" class="button" value="Wyślj" />
  22. </div>
  23. </form>
  24.  
  25.  




[Obrabianie formularza]


  1.  
  2. $nazwa=$_GET['nazwa'];
  3. $inna=$_GET['inna'];
  4. $numerZ=$_GET['numerZ'];
  5. $dataR=$_GET['dataR'];
  6. $dataZ=$_GET['dataZ'];
  7.  
  8. $data = $dataR;
  9.  
  10.  
  11.  
  12.  
  13. if(isset($_GET['nazwa']) && isset($_GET['dataR']) && isset($_GET['dataZ']) && isset($_GET['numerZ']))
  14. {
  15.  
  16. $result = mysqli_query($con,"SELECT * FROM niestacjonarne WHERE wydarzenie='".$nazwa."' AND data='".$data."'");
  17. $row=mysqli_fetch_array($result,MYSQLI_NUM);
  18.  
  19. if ($row == 0 )
  20. {
  21. while ($data <= $dataZ)
  22. {
  23. mysqli_query($con,"INSERT INTO niestacjonarne (numer_zjazdu, data, wydarzenie) VALUES ('".$numerZ."', '".$data."', '".$nazwa."')");
  24.  
  25. $data = strtotime($data . '+ 1 day');
  26. }
  27. echo "Dodałeś nowe wydarzenie do bazy !";
  28. echo"<p><a href='logowanie.php'>Powrót</a></p>";
  29.  
  30. }
  31. else
  32. {
  33. require_once('logowanie.php');
  34. echo "Istnieje już takie wydarzenie w tym dniu !";
  35. }
  36.  
  37. }
  38. elseif(isset($_GET['nazwa']) && isset($_GET['dataR']) && isset($_GET['dataZ']) && isset($_GET['inna']) && isset($_GET['numerZ']))
  39. {
  40. $result = mysqli_query($con,"SELECT * FROM niestacjonarne WHERE wydarzenie='".$nazwa."' AND data='".$data."'");
  41. $row=mysqli_fetch_array($result,MYSQLI_NUM);
  42.  
  43. if ($row == 0 )
  44. {
  45. while ($data <= $dataZ)
  46. {
  47. mysqli_query($con,"INSERT INTO niestacjonarne (numer_zjazdu, data, wydarzenie, dodatek) VALUES ('".$numerZ."', '".$data."', '".$nazwa."', '".$inna."')");
  48.  
  49. $data = strtotime($data . '+ 1 day');
  50. }
  51. echo "Dodałeś nowe wydarzenie do bazy !";
  52. echo"<p><a href='logowanie.php'>Powrót</a></p>";
  53.  
  54. }
  55. else
  56. {
  57. require_once('logowanie.php');
  58. echo "Istnieje już takie wydarzenie w tym dniu !";
  59. }
  60. }
  61.  
  62.  
  63. elseif(isset($_GET['nazwa']) && isset($_GET['dataR']) && isset($_GET['dataZ']))
  64. {
  65. $result = mysqli_query($con,"SELECT * FROM niestacjonarne WHERE wydarzenie='".$nazwa."' AND data='".$data."'");
  66. $row=mysqli_fetch_array($result,MYSQLI_NUM);
  67.  
  68. if ($row == 0 )
  69. {
  70. while ($data <= $dataZ)
  71. {
  72. mysqli_query($con,"INSERT INTO niestacjonarne (data, wydarzenie) VALUES ('".$data."', '".$nazwa."')");
  73.  
  74. $data = strtotime($data . '+ 1 day');
  75. }
  76. echo "Dodałeś nowe wydarzenie do bazy !";
  77. echo"<p><a href='logowanie.php'>Powrót</a></p>";
  78.  
  79. }
  80. else
  81. {
  82. require_once('logowanie.php');
  83. echo "Istnieje już takie wydarzenie w tym dniu !";
  84. }
  85. }
  86.  
  87. else
  88. {
  89. require_once('logowanie.php');
  90.  
  91. }
  92.  
  93.  
  94.  
  95.  
  96.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


tak jak napisał kolega wyżej.

To ty ustalasz co ma zawierać pole i które z nich ma być obowiązkowe do wypełnienia. Walidacja to mechanizm składająca się z 3 głównych kroków
- pobranie danych
- sprawdzenie danych
- wysyłka danych - czy jak to innaczej ująć ;p

lecąc od początku
walidacje zawsze zaczynaj od warunku. Najlepszym z nich jest sprawdzenie czy został wciśnięty submit. Najprostrze i najlepsze rozwiązanie. Dopiero w tym warunku pobierasz dane i robisz reszte rzeczy.

Każde pole sprawdzaj pod względem dozwolonych znaków. Email ma być emailem, tel ma być tel a imie czy nazwisko ma nie być puste, nie krótsze niż 3 naki i nie dłuższe od 20 + zawierać tylko litery. Do tego przydadzą Ci się wyrażenia regularne.

Dopiero jak wszystko jest ok, przechodzisz do zapisu do bazy danych i kończysz walidacje.

wskazówka: przed zapissem do bazy danych musisz postawić warunek w którym sprawdzisz czy wszystkie dane z formularza są poprawne. Wszystkie informacje o nieprawidłowym wypełnieniu formularza zapisuj do jednej zmiennej, łatwiej Ci będzie wyświetlić błędy i stworzyć odpowiedni warunek.
np:

stworz zmienną np $error = '';
i teraz każdy błąd dodawaj w ten sposób : $error.= 'tresc bledu<br>';
jeśli chcesz wyświetlić wszystkie błędy dajesz poprostu echo $error;
Też kiedyś byłem początkujący i pamietam, ze to bardzo mi pomogło, bo pisałem mase niepotrzebnych warunków i zmiennych ; )

i przed dodaniem do bazy dajesz warunek if(empty($error)) { //kod zapisu do bazy }

edit:
mały prezent ode mnie. Sprawdzenie maila ;p pewnie i tak byś szukał po googlach
if(preg_match('/^[a-zA-Z0-9.\-_]+\@[a-zA-Z0-9.\-_]+\.[a-z]{2,4}$/D', $email) == false) { $error.='Błędny adres email'; }

Ten post edytował gitbejbe 19.06.2013, 18:11:11
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: 30.12.2025 - 14:45