Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja formularza
Forum PHP.pl > Forum > PHP
sebekzosw
Witam,

piszę z prośbą o pomoc.

mam taki fragment kodu:

  1. class FormValidator
  2. {
  3. private $data = array();
  4.  
  5. function addValidation($name, $value, $parms = false)
  6. {
  7. if($parms)
  8. $this->data['parms'][$name] = $value;
  9. else
  10. $this->data[$name] = $value;
  11.  
  12. return $this;
  13. }
  14.  
  15. function isNumeric()
  16. {
  17.  
  18. }
  19. }
  20.  
  21. $parm = new FormValidator;
  22. $parm->loadArray(array('parms' => array('test3' => 'test5')));
  23. $parm->addValidation('name', 'value')->isNumeric();
  24. $parm->addValidation('name2', 'value', true);
  25. $parm->addValidation('name3', 'value', true);


Działać ma to tak, że dodaje do tablicy dane, jednak od razu chciałbym to sprawdzać:

$parm->addValidation('name', 'value')->isNumeric();

jednak nie wiem jak przekazać wartość do funkcji isNumeric tak jak powyżej pokazałem. Wiem, że mogę zapytać Google, jednak nie wiem co wpisać. Jak dokonać sprawdzenia pola? smile.gif
Spawnm
Hmm opisz czym ma się różnić 'parms' od reszty.
isNumeric() ma zwrócić bool, sypnąć wyjątkiem, ustawić jakiś $this->_error czy jak?

Na szybko to daj dodatkowy parametr protected $_lastName i tam zapisuj $name.
No i w tym przypadku jeszcze wymuszasz protected $_isParms.
Parametry ustawiasz na początku metody addValidation
sebekzosw
  1. class FormValidator
  2. {
  3. private $data = array();
  4. private $_Temp;
  5.  
  6. function loadArray($array)
  7. {
  8. $this->data = array_merge($this->data, $array);
  9. }
  10.  
  11. function checkOption($name, $add = true, $parms = false)
  12. {
  13. $this->_Temp = '';
  14.  
  15. if(isset($_POST[$name]))
  16. {
  17. if($add)
  18. {
  19. if($parms)
  20. $this->data['parms'][$name] = $_POST[$name];
  21. else
  22. $this->data[$name] = $_POST[$name];
  23. }
  24.  
  25. $this->_Temp = $_POST[$name];
  26. }
  27.  
  28.  
  29. return $this;
  30. }
  31.  
  32. function isEmpty($info = '')
  33. {
  34. if(empty($this->_Temp))
  35. echo $info;
  36.  
  37. return $this;
  38. }
  39.  
  40. function checkLength($min, $max, $info = '')
  41. {
  42. if(mb_strlen($this->_Temp, 'UTF-8') > $max || mb_strlen($this->_Temp, 'UTF-8') < $min)
  43. echo $info;
  44.  
  45. return $this;
  46. }
  47.  
  48. public function __destruct()
  49. {
  50. echo '<pre>';
  51. print_r($this->data);
  52. }
  53. }
  54. $_POST['pole1'] = '';
  55. $_POST['pole2'] = 'wartosc2';
  56. $_POST['pole3'] = 'wartosc3';
  57.  
  58. $parm = new FormValidator;
  59. $parm->loadArray(array('parms' => array('test3' => 'test5')));
  60. $parm->checkOption('pole1')->isEmpty('Uzupełnij pole 1')->checkLength(6, 10, 'blad2');
  61. $parm->checkOption('pole2', false, true)->isEmpty('Uzupełnij pole 2');
  62. $parm->checkOption('pole3', true, true)->isEmpty('Uzupełnij pole 3');


Da się zrobić, że w momencie sprawdzania:

$parm->checkOption('pole1')->isEmpty('Uzupełnij pole 1')->checkLength(6, 10, 'blad2');

jak isEmpty zwróci false to funkcja checkLength się nie wywoła? w funkcji isEmpty dla testów dałem return false; ale to daje mi błąd:


Fatal error: Call to a member function checkLength() on a non-object in D:\xampp\htdocs\form.php on line 67


Dobra, już sobie poradziłem... smile.gif
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.