Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z walidacją formularza
Forum PHP.pl > Forum > Przedszkole
-Marian-
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.  
b4rt3kk
W którym miejscu pojawia się problem?
gitbejbe
  1. <input type="submit" class="button" value="Wyślj" />


Przycisk submit ma być Twoim warunkiem wywołania skryptu walidacji. Tak więc dodaj do tego submit name="cos tam" i w pierwszym warunku zamiast:
  1. if(isset($_GET['nazwa']) && isset($_GET['dataR']) && isset($_GET['dataZ']) && isset($_GET['numerZ']))

wstaw
  1. if(isset($_GET['nazwa przycisku']))


po za tym sugeruje robić to za pomocą metody POST
-Marian-
Właśnie problem, polega na tym, że nie mogę zlokalizować w tym kodzie, miejsca błędu.
W tym przypadku , akurat musze wykorzystać metodę _GET.

Dodałem też dodatkową instrukcję if sprawdzającą przycisk i dalej mam ten sam problem, że wysyłam pusty formularz.
Chciałbym właśnie, aby mi przełądowało stronę, na ponowne wprowadzenie danych do formularza.

Nie wiem jak sobie z tym poradzić :/
gitbejbe
przecież napisałem Tobie....
Twój problem to
  1. if(isset($_GET['nazwa']) && isset($_GET['dataR']) && isset($_GET['dataZ']) && isset($_GET['numerZ']))


za każdym razem to ten warunek u Ciebie decyduje o tym, co robić dalej. Po za tym, zobacz jak wygląda URL po wysłaniu pustego formularza. jeśli sa w nim wypisane zmienne bez wartości to się nie dziw, ze spełnia sie powyższy warunek bo zmienne GET istnieją (łał)
Kolejnym błędem, jest sam ten skrypt. Nie chciałbym natrafić na "coś takiego", tym bardziej podawać w takim czymś swoje dane.

nie wiem tez dalczego napisałeś, że masz problem z walidajcą formularza, skoro Ty nic tak naprawdę nie walidujesz.
Kompletnie nic nie sprawdzasz, po za tym czy istnieją zmienne GET.

Napisałbym,żebyś przewertował manuala lub przeanalizować gotowe skrypty walidacji ale zrób do końca ten skrypt po swojemu a z czasem sam zobaczysz co to za potwór i może zmotywujesz się do większego wysiłku ;d

edit:

własnie... jeszcze jedno. Sprawdz - bo ja nie mam juz czasu a sam nie pamietam bo dawno dawno nie używałem GET, czy zmienne tworzą się w URL mimo tego, że sa puste. Jeśli tak to jest twój problem. Zamiast warunków sprawdzających czy te zmienne istnieją, sprawdz lepiej czy te zmienne posiadaja odpowiednie dane i po kłopocie. Tak powinieneś zrobić, skoro piszesz, że jest to "walidacja" ;p
po zakończeniu dodania do bazy, wstaw header("location: jakis_plik.php");
Mimo wszystko radziłbym Tobie zmienić GET na POST.
-Marian-
Fakt, masz rację, trochę źle sprecyzowałem swój problem.
W takim razie zabieram się do roboty smile.gif

A powiedz mi, można jakoś sensownie
zrobić sprawdzanie pól w formularzu, ale tak, że nie wszystkie pola muszą być wypełnione aby formularz został wysłany poprawnie ?
Jeśli tak, to czy mógłbyś, oświecić mnię trochę swoją wiedzą ?

Pozdrawiam
Marian
b4rt3kk
Możesz sprawdzać poprawność danych jeśli określone pole nie jest puste. Tj. jeśli jest to dajmy na to nr telefonu, to czy wpisano tylko cyfry, czy wpisano ich odpowiednią ilość, itp. No i jeśli nie chcesz dodawać pustych wartości to ustal, które pola minimalnie muszą być wypełnione.
gitbejbe
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'; }
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.