Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Walidacja formularza (funkcje)
Forum PHP.pl > Forum > Przedszkole
peja1990
  1. $error = array();
  2. global $error;
  3.  
  4. function validateNames($value) {
  5. if(!ereg("^[A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30} [A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30}$", $value) && strlen($value) < 3)
  6. return $error[] = 1;
  7. }
  8.  
  9. function validateEmail($value) {
  10. if(filter_var($value, FILTER_VALIDATE_EMAIL) === FALSE && strlen($value) == 0)
  11. return $error[] = 1;
  12. }
  13.  
  14. function validateSubject($value) {
  15. if(empty($value))
  16. return $error[] = 1;
  17. }
  18.  
  19. function validateContent($value, $min) {
  20. if(empty($min)) $min = 10;
  21. if(strlen($value) < $min)
  22. return $error[] = 1;
  23. }
  24.  
  25. function validateCaptcha($code, $security) {
  26. if(strtolower($code) != strtolower($security))
  27. return $error[] = 1;
  28. }
  29.  
  30. echo validateSubject('');
  31. echo validateContent('', '');
  32. echo '>>>'.sizeof($error).'<<<'; // Tutaj chcę mieć ilo¶ć errorów, ale ci±gle jest zero :(


Co tutaj więcej pisać ?! ... sad.gif

Do każdej funkcji dodałem globaln± zmienn± $error i działa wink.gif
Nikto¶
Ciekawi mnie ja zwracasz napis o błędzie ,dla konkretnego pola.
Nie powinno być:
return $error[0] = 1;
return $error[1] = 1;
return $error[2] = 1; itd.?
peja1990
Cytat(Nikto¶ @ 4.05.2012, 20:48:25 ) *
Ciekawi mnie ja zwracasz napis o błędzie ,dla konkretnego pola.
Nie powinno być:
return $error[0] = 1;
return $error[1] = 1;
return $error[2] = 1; itd.?


heh wink.gif
Poprzez wywołanie funkcji echem smile.gif
echo funkcja(tekst);

Aktualna wersja kodu:
  1. $error = array();
  2.  
  3. function validateNames($value) {
  4. if(!ereg("^[A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30} [A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30}$", $value) && strlen($value) < 3) {
  5. global $error;
  6. return $error[] = 1;
  7. }
  8. }
  9.  
  10. function validateEmail($value) {
  11. if(filter_var($value, FILTER_VALIDATE_EMAIL) === FALSE && strlen($value) == 0) {
  12. global $error;
  13. return $error[] = 1;
  14. }
  15. }
  16.  
  17. function validateSubject($value) {
  18. if(empty($value)) {
  19. global $error;
  20. return $error[] = "puste pole #1";
  21. }
  22. }
  23.  
  24. function validateContent($value, $min) {
  25. if(empty($min)) $min = 10;
  26. if(strlen($value) < $min) {
  27. global $error;
  28. return $error[] = "puste pole #2";
  29. }
  30. }
  31.  
  32. function validateCaptcha($code, $security) {
  33. if(strtolower($code) != strtolower($security)) {
  34. global $error;
  35. return $error[] = 1;
  36. }
  37. }


Gra i buczy smile.gif
jeżeli chcę sprawdzić poprawno¶ć pola formularza/tekstu to wywołuję funkcję np.
  1. echo validateSubject($_POST['subject'])

jeżeli pole jest błędnie wypełnione to dostaję tre¶ć błędu smile.gif
wNogachSpisz
Dramat... Płacz i zgrzytanie zębów... Dur brzuszny i gor±czka krwotoczna...

Cytat(peja1990 @ 4.05.2012, 20:39:45 ) *
function validateNames($value) {
if(!ereg("^[A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30} [A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30}$", $value) && strlen($value) < 3)
return $error[] = 1;
}

eregi się nie używa, ta funkcja nie będzie za chwile wspierana, w nowszych wersjach php jej użycie produkuje warning..
Ale to jeszcze nic, najgorsze jest to że walisz w skrypcie znakami które nie s± ASCII. To nie ma prawa zadziałać, poczytaj sobie trochę o kodowaniu, o unicode, o stronach kodowych, może zrozumiesz w czym problem.


Global też się raczej nie używa, a na pewno nie w ten sposób.
Nikto¶
Może Ľle mi się wydaje, ale ta wiadomo¶ć tekstowa o błędzie jest prawdopodobnie jednolita dla każdego pola.
ciekawskiii
ereg sie juz nie uzywa, od tego jest preg_match
kaem
Zacznij używać klas, stosowanie globali nie jest wskazane. Stwórz sobie na pocz±tek klase (pisane z palca):
  1. class Validate
  2. {
  3.  
  4. prrivate $errors = array(); // tablica na błędy
  5.  
  6. // tutaj te Twoje funkcje przerobione, np:
  7. public function validateSubject($value) {
  8. if(empty($value))
  9. {
  10. $this->setError('subject', 'warto¶ć nie może być pusta')
  11. return false;
  12. }
  13. return true;
  14. }
  15.  
  16. public function setError($name, $msg) // ustaw error
  17. {
  18. $this->errors[$name] = $msg;
  19. }
  20. public function getErrors()
  21. {
  22. return $this->errors;
  23. }
  24. public function countErrors() // ile errorów
  25. {
  26. return count($this->errors);
  27. }
  28. }



Oczywi¶cie taka klasa jest prymitywna, ale z czasem sobie j± rozbudujesz albo jeszcze lepiej - napiszesz od nowa z zupełnie innym podej¶ciem (bardzo wskazane).
peja1990
No fajnie wink.gif
Dzięki za uwagi tongue.gif
A jak by¶cie w takim razie ułożyli warunek preg_match() dla walidacji imienia i nazwiska by przepuszczała tylko tak± formę "Imię Nazwisko"
Czyli pierwsza litera imienia i nazwiska musi być duża, reszta mała + spacja...
Tak jak mam to zrobione w swoim kodzie z eregami smile.gif
peja1990
Cytat(greycoffey @ 4.05.2012, 23:13:06 ) *


Dzięki ale już dawno sobie z tym poradziłem:
  1. preg_match("/^[A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30}[ ][A-Z٦]{1}[a-z±ęół¶żĽćń]{1,30}$/", $value)


Może ten sposób nie należy do 'najładniejszych' ale przynajmniej jest skuteczny wink.gif
Dzięki wszystkim za odpowiedzi,
pozdrawiam.

_____
EDIT:
Zasłużone pomógł poleciały smile.gif
wNogachSpisz
Cytat(peja1990 @ 5.05.2012, 02:20:40 ) *
Może ten sposób nie należy do 'najładniejszych' ale przynajmniej jest skuteczny wink.gif

Wła¶nie że nie jest skuteczny. Przestanie działać którego¶ dnia bez ostrzeżenia.
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.