Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Walidacja formularza (funkcje)
peja1990
post 4.05.2012, 19:39:45
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 4.12.2010

Ostrzeżenie: (10%)
X----


  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

Ten post edytował peja1990 4.05.2012, 19:45:56
Go to the top of the page
+Quote Post
Niktoś
post 4.05.2012, 19:48:25
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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.?
Go to the top of the page
+Quote Post
peja1990
post 4.05.2012, 19:50:05
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 4.12.2010

Ostrzeżenie: (10%)
X----


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

Ten post edytował peja1990 4.05.2012, 19:54:09
Go to the top of the page
+Quote Post
wNogachSpisz
post 4.05.2012, 19:52:44
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.

Ten post edytował wNogachSpisz 4.05.2012, 19:55:09
Go to the top of the page
+Quote Post
Niktoś
post 4.05.2012, 19:52:56
Post #5





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Może źle mi się wydaje, ale ta wiadomość tekstowa o błędzie jest prawdopodobnie jednolita dla każdego pola.
Go to the top of the page
+Quote Post
ciekawskiii
post 4.05.2012, 19:53:58
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


ereg sie juz nie uzywa, od tego jest preg_match


--------------------
Go to the top of the page
+Quote Post
kaem
post 4.05.2012, 19:57:24
Post #7





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

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


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).

Ten post edytował kaem 4.05.2012, 20:01:04
Go to the top of the page
+Quote Post
peja1990
post 4.05.2012, 20:47:28
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 4.12.2010

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
greycoffey
post 4.05.2012, 22:13:06
Post #9





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


http://php.net/manual/pl/intro.pcre.php
www.bitcetera.com/page_attachments/0000/0030/regex_in_a_nutshell.pdf
pluton.pol.lublin.pl/~beatap/PHP/PHP_w3.pdf
Go to the top of the page
+Quote Post
peja1990
post 5.05.2012, 01:20:40
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 4.12.2010

Ostrzeżenie: (10%)
X----


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

Ten post edytował peja1990 5.05.2012, 01:23:13
Go to the top of the page
+Quote Post
wNogachSpisz
post 5.05.2012, 10:16:05
Post #11





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 18:46