Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] walidacja pól
Forum PHP.pl > Forum > Przedszkole
krystian1991x
Witam mam pytanie jak inaczej czyli prościej zrobić walidacje która sprawdza czy pola formularza zostały wszystkie wypełnione ja zrobiłem coś takiego ale niezbyt mi to odpowiada

  1.  
  2. if($_POST['login'] == ""|| $_POST['login2'] == "" || $_POST['login3'] == "" || $_POST['login4'] == "") {
  3.  
  4.  
  5.  
  6.  
  7. }else {
  8.  
  9. }
Fifi209
Zrób tablicę z kluczami, które chcesz sprawdzić potem przeleć foreach + isset ew. empty
krystian1991x
jakiś przykład ? snitch.gif
Ramzaa
Cytat(krystian1991x @ 18.09.2010, 13:32:45 ) *
jakiś przykład ? snitch.gif

if (isset($_POST['cos'])) { }
krystian1991x
raczej chodziło mi o to jak stworzyć te tablice z kluczem ;P

Zdecydowałem że jednak zrobię sobie to tak ale ta konstrukcja nie wiedzieć czemu nie jest prawidłowa
krispak
Cytat
Zdecydowałem że jednak zrobię sobie to tak ale ta konstrukcja nie wiedzieć czemu nie jest prawidłowa

Tzn jak bo nie wiem, o ktora konstrukcje chodzi?
krystian1991x
  1. <?php
  2.  
  3. require('libs/Smarty.class.php');
  4. require('cfg.php');
  5.  
  6. $smarty = new Smarty;
  7.  
  8. $login = htmlspecialchars(mysql_escape_string($_POST['login']));
  9. $name = htmlspecialchars(mysql_escape_string($_POST['name']));
  10. $last_name = htmlspecialchars(mysql_escape_string($_POST['last_name']));
  11. $password1 = htmlspecialchars(mysql_escape_string($_POST['pw1']));
  12. $password2 = htmlspecialchars(mysql_escape_string($_POST['pw2']));
  13. $email1 = htmlspecialchars(mysql_escape_string($_POST['email1']));
  14. $email2 = htmlspecialchars(mysql_escape_string($_POST['email2']));
  15. $phone1 = htmlspecialchars(mysql_escape_string($_POST['phone1']));
  16. $phone2 = htmlspecialchars(mysql_escape_string($_POST['phone2']));
  17.  
  18. if(isset($_POST['register'])) {
  19.  
  20. if(!empty($_POST['login'])) { if(!empty($_POST['name'])) {
  21. if(!empty($_POST['last_name'])) { if(!empty($_POST['pw1'])) {
  22. if(!empty($_POST['pw2'])) { if(!empty($_POST['email1'])) {
  23. if(!empty($_POST['email2'])) { if(!empty($_POST['phone1'])) {
  24. if(!empty($_POST['phone2'])) { if(empty($_POST['adres'])) {
  25.  
  26. if(preg_match('#^[A-Za-z0-9_-]+$#', $login) && strlen($login) > 5 || strlen($login) < 17 ) {
  27. if(preg_match('#^[A-Za-z_-]+$#', $name) && strlen($name) > 3 || strlen($name) < 17) {
  28. if(preg_match('#^[A-Za-z_-]+$#', $last_name) && strlen($last_name) > 3 || strlen($last_name) < 32) {
  29. if(preg_match('#^[A-Za-z0-9_-]+$#', $pw1) && strlen($pw1) > 5 || strlen($pw1) < 17 ) {
  30. if(preg_match('#^[A-Za-z0-9_-]+$#', $pw2)) {
  31. if(preg_match('#^[+0-9_-]+$#', $phone1) && strlen($phone1) == 9) {
  32. if(preg_match('#^[+0-9_-]+$#', $phone2) && strlen($phone1) > 8 || strlen($phone1) < 12) {
  33.  
  34. echo "Teoretycznie dziala";
  35.  
  36. } else{ echo "Numer telefonu stacjonarnego nie jest poprawny";}
  37. } else{ echo "numer telefonu komórkowego nie jest poprawny";}
  38. } else{ echo "Haslo nie jest poprawne";}
  39. } else{ echo "Haslo nie jest poprawne";}
  40. } else{ echo "Nazwisko nie jest poprawne";}
  41. } else{ echo "Imie nie jest poprawne";}
  42. } else{ echo "login nie jest poprawny";}
  43.  
  44.  
  45. } else { echo "Podaj adres"; } } else { echo "Podaj telefon stacjonarny"; }
  46. } else { echo "Podaj telefon"; } } else { echo "Powtórz email"; }
  47. } else { echo "Podaj email"; } } else { echo "Powtórz haslo"; }
  48. } else { echo "Podaj haslo"; } } else { echo "Podaj nazwisko"; }
  49. } else { echo "Podaj imie"; } } else { echo "Podaj login"; }
  50.  
  51. }
  52.  
  53. $smarty->assign('login', $login);
  54. $smarty->assign('name', $name);
  55. $smarty->assign('last_name', $last_name);
  56. $smarty->assign('password1', $password1);
  57. $smarty->assign('password2', $password2);
  58. $smarty->assign('email1', $email1);
  59. $smarty->assign('email2', $email2);
  60. $smarty->assign('phone1', $phone1);
  61. $smarty->assign('phone2', $phone2);
  62.  
  63. $smarty->display('register.tpl');
  64.  
  65. ?>
jak do tej pory tak u mnie to wygląda jak to zrobię to będę myślał czy da się łatwiej i jak Bo mi nic innego do głowy nie przychodziło
Wicepsik
1. Po co używasz funkcji mysql_escape_string, htmlspecialchars jak i tak potem sprawdzasz zmienne wyrażeniami regularnymi ?
2. Sprawdzenie długości znaków możesz załatwić na poziomie wyrażeń regularnych: http://pl.wikibooks.org/wiki/PHP/Podstawy_...%84_regularnych
Fifi209
Bardziej chodziło mi o coś takiego:

  1. $klucze = array('login', 'password', 'last_name', 'pw');
  2.  
  3. foreach ($_POST as $key => $value) {
  4. if (in_array($key, $klucze)) {
  5. if (empty($value)) {
  6. die('Wypełnij wszystkie pola!');
  7. }
  8. }
  9. }


Zamiast wyrażeń w wielu przypadkach możesz użyć: ctype_ lub filter_var

Ale trzymając się pierwszej koncepcji możesz zrobić np.
  1. $keys = array('login' => '#^[\w\d]{5,20}$#', 'password' => '#^[\w\d]{5,20}$#');
  2.  
  3. foreach ($_POST as $key => $value) {
  4. if (array_key_exists($key, $keys)) {
  5. if (!preg_match($keys[$key], $value)) {
  6. die('Coś poszło nie tak');
  7. }
  8. }
  9. }


Albo dodatkowo rozbudować o błędy:
  1. $keys = array('login' => array('reg' => '#^[\w\d]{5,20}$#', 'err' => 'Login zawiera niedozwolone znaki!'), 'password' => array('reg' => '#^[\w\d]{5,20}$#', 'err' => 'Hasło zawiera niedozwolone znaki'));
  2.  
  3. foreach ($_POST as $key => $value) {
  4. if (array_key_exists($key, $keys)) {
  5. if (!preg_match($keys[$key]['reg'], $value)) {
  6. die($keys[$key]['err']);
  7. }
  8. }
  9. }


Wszystko pisane z palca, nie testowałem.
krystian1991x
wytłumaczy mi ktoś ten zapis ?

  1. '#^[\w\d]{5,20}$#'

krystian1991x
oh nie prosiłem o linki bo to sobie umiem wyszukać ... od tego mamy google ! a forum chyba służy do czegoś innego ? szkoda że niektórzy mylą wyszukiwarki z forami ...
Fifi209
Skoro potrafisz sobie sam wyszukać to po co na forum zadajesz takie pytania?

Jakiś większy problem, że to jest po angielsku? Trudno, taka praca programisty.
krystian1991x
Wujek ! ty se uważaj haha.gif Po co zadaje na forum ? bo od tego ono jest nie wiem po co było zakładane forum mogli po prostu zrobić przekierowanie do manuala smile.gif
Fifi209
\w
Cytat
any "word" character


\d
Cytat
any decimal digit


# #
Cytat
When using the PCRE functions, it is required that the pattern is enclosed by delimiters. A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.

Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.


^ $

{1,3}
Zapis taki oznacza: minimum jeden znak, maksimum trzy znaki.
krystian1991x
da się w zakresie tej tablicy jeszcze sprawdzić takie rzeczy jak czy login jest zajęty oraz czy pola z haslami sie zgadzają ?

a i gdzie mam teraz umieścić zapytanie ?
  1. foreach ($_POST as $key => $value) {
  2. if (array_key_exists($key, $keys)) {
  3. if (!preg_match($keys[$key]['reg'], $value)) {
  4. $error = $keys[$key]['err'];
  5. }
  6. }
  7. }

utworzyć else dla tego warunku ?

  1. if (!preg_match($keys[$key]['reg'], $value)) {
  2. $error = $keys[$key]['err'];
  3. }
Fifi209
Ja to podsunąłem jako pomysł do sprawdzania czy pole jest puste, ew. czy zawiera dozwolone znaki.
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.