Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> walidacja danych na podstawie warunku z tablicy
ktuvok
post
Post #1





Grupa: Zarejestrowani
Postów: 243
Pomógł: 0
Dołączył: 30.11.2003

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


Załóżmy, że jest taka tablica:

  1. <?php
  2.  
  3. $Tablica = array(
  4. '$Zmienna1' => ('$Zmienna1 > 45','Nieprawidłowa wartość!'),
  5. '$Zmienna3' => ('$Zmienna3 != 2005','Nieprawidłowy rok!')
  6. );
  7.  
  8. ?>


Chciałbym napisać pętlę, która dla każdej zmiennej przesłanej POST-em dokona sprawdzenia warunku, zawartego w tablicy i zwróci błąd w przypadku jego nie spełnienia. Zacząłem tak:
  1. <?php
  2.  
  3. foreach($_POST as $k=>$v)
  4. {
  5. if(array_key_exists($k, $_POST))
  6. {
  7. $Warunek = $Tablica[$k][0];
  8. if(eval($Warunek))
  9. {
  10. echo "Dla $k warunek $Warunek spełniony<BR>";
  11. }
  12. else
  13. {
  14. echo "Dla $k warunek $Warunek nie spełniony!<BR>";
  15. }
  16. }
  17. }
  18.  
  19. ?>


ale nie bardzo chce to działać... Proszę o wskazówki, jak to poprawnie napisać.

Pozdrawiam,
K
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
serafin
post
Post #2





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 23.11.2003
Skąd: Poznań

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


Ja bym to zrobil inaczej :]

  1. <?
  2. $conditions = array(
  3. );
  4.  
  5. $conditions['title'][] = 'length>1000';
  6. $conditions['title'][] = 'type:string';
  7. $conditions['title'][] = 'values:test:test:test';
  8.  
  9. $error = false;
  10.  
  11. foreach($_POST as $key => $val) {
  12. if(array_key_exists($key, $conditions)) {
  13.  foreach($conditions[$key] as $condition) {
  14.  preg_match('@^(length|values|type)?(:><=)?(.*?)@is', $condition, $subcondition);
  15.  
  16. switch($subcondition[1]) {
  17. case 'length':
  18. switch($subcondition[2]) {
  19. case '>':
  20. $error = !(strlen($val) > $subcondition[3]);
  21. break;
  22.  
  23. case '<':
  24. $error = !(strlen($val) < $subcondition[3]);
  25. break;
  26.  
  27. case '=':
  28. $error = !(strlen($val) = $subcondition[3]);
  29. break;
  30. }
  31. break;
  32.  
  33. case 'type':
  34. switch($subcondition[3]) {
  35. case 'string':
  36. $error = !(strlen(strval($val)) == strlen($val));
  37. break;
  38.  
  39. case 'int':
  40. $error = (intval($val) == 0);
  41. break;
  42. }
  43. break;
  44.  
  45. case 'values':
  46. $error = !in_array($val, explode($subcondition[3]));
  47. break;
  48.  
  49. }
  50.  
  51.  }
  52. }
  53. }
  54.  
  55. ?>


Ale ze jestem chory to pisze z palca i nie testuje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wskazowka jakas jest (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 21:44