Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка числового ввода [2]
Форумы портала PHP.SU » PHP » Регулярные выражения » Проверка числового ввода

Страниц (2): « 1 [2]
 

16. EuGen - 20 Марта, 2011 - 23:05:43 - перейти к сообщению
В общем, по валидации могу представить небольшую простецкую функцию, которая на основании валидатора проверяет корректность значения. Но не ранее, чем завтра.
17. vsll - 20 Марта, 2011 - 23:14:44 - перейти к сообщению
Да, давайте
18. DlTA - 20 Марта, 2011 - 23:41:23 - перейти к сообщению
Vasiliya почитайте о методах взлома баз данных, методах защиты и способах отслеживания попыток взлома.
19. vsll - 21 Марта, 2011 - 14:58:10 - перейти к сообщению
DlTA пишет:
Vasiliya почитайте о методах взлома баз данных, методах защиты и способах отслеживания попыток взлома.
Это к чему?
20. EuGen - 21 Марта, 2011 - 15:07:49 - перейти к сообщению
Не знаю к чему. Вот обещанный валидатор:
PHP:
скопировать код в буфер обмена
  1.  
  2. /*
  3. //sample of array-validation rules:
  4. $rgKeysRequired = array(
  5.         'row_number'    =>array('type'=>'int','empty'=>false, 'maxlength'=>null, 'format'=>null),
  6.         //
  7.         'app_id_main'   =>array('type'=>'string','empty'=>false, 'maxlength'=>null, 'format'=>null),
  8.         'reg_id_main'   =>array('type'=>'string','empty'=>false, 'maxlength'=>null, 'format'=>null),
  9.         'tarrif_code'   =>array('type'=>'numeric','empty'=>false, 'maxlength'=>1, 'format'=>null),
  10.         'status'        =>array('type'=>'string','empty'=>false, 'maxlength'=>2, 'format'=>null),
  11.         'msisdn_main'   =>array('type'=>'numeric','empty'=>false, 'maxlength'=>11, 'format'=>'/^79\d{9,9}$/'),
  12.         'account'       =>array('type'=>'string','empty'=>false, 'maxlength'=>12, 'format'=>null),
  13.         'amount'        =>array('type'=>'float','empty'=>true, 'maxlength'=>null, 'format'=>null),
  14.         'app_count'     =>array('type'=>'int','empty'=>true, 'maxlength'=>8, 'format'=>null),
  15.         'tarrif_main'   =>array('type'=>'string','empty'=>false, 'maxlength'=>90, 'format'=>null)
  16.         );
  17. */
  18. class Data_Validator
  19. {
  20.     protected $rgFields;
  21.     protected $rgTypesRule=array(
  22.         'int'=>0,
  23.         'double'=>1,
  24.         'numeric'=>2,
  25.         'string'=>3
  26.     );
  27.  
  28.     function  __construct($rgFields)
  29.     {
  30.         $this->rgFields=$rgFields;
  31.     }
  32.  
  33.     protected function setCoverType($data)
  34.     {
  35.         $sData=(string)$data;
  36.         if((string)((int)$data)===$sData)
  37.         {
  38.             return (int)($sData);
  39.         }
  40.         if((string)((double)$data)===$sData)
  41.         {
  42.             return (double)($sData);
  43.         }
  44.         return $sData;
  45.     }
  46.    
  47.     protected function getCoverType($data)
  48.     {
  49.         $sData=(string)$data;
  50.         if((string)((int)$data)===$sData)
  51.         {
  52.             return 'int';
  53.         }
  54.         if((string)((double)$data)===$sData)
  55.         {
  56.             return 'double';
  57.         }
  58.         return 'string';
  59.     }
  60.  
  61.     protected function checkDataType($data, $type)
  62.     {
  63.         //int < double < numeric < string
  64.        
  65.         return $this->rgTypesRule[$this->getCoverType($data)]<=$this->rgTypesRule[$type];
  66.     }
  67.  
  68.     function validate($rgDataCheck)
  69.     {
  70.         //first, integrity validation:
  71.         foreach($this->rgFields as $field => $rgValidator)
  72.         {
  73.             //check data existing:
  74.             if(!$rgValidator['empty'] && (!array_key_exists($field, $rgDataCheck) || !isset($rgDataCheck[$field])))
  75.             {
  76.                 return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on empty-checking');
  77.             }
  78.             //check data type:
  79.            
  80.             if(!$rgValidator['empty'] && !$this->checkDataType($rgDataCheck[$field], $rgValidator['type']))
  81.             {
  82.                 return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on type checking: expecting '.$rgValidator['type']);
  83.             }
  84.             //check length if present:
  85.             if(!$rgValidator['empty'] && isset($rgValidator['maxlength']) && strlen((string)$rgDataCheck[$field])>$rgValidator['maxlength'])
  86.             {
  87.                 return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on maxlength checking: longer than '.$rgValidator['maxlength']);
  88.             }
  89.             //check format. This could be slow - depending of pattern difficulty, so this check is last:
  90.             if(!$rgValidator['empty'] && isset($rgValidator['format']) && !preg_match($rgValidator['format'], $rgDataCheck[$field]))
  91.             {
  92.                 return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on format checking: expecting format '.$rgValidator['format']);
  93.             }
  94.         }
  95.         return array('valid'=>true, 'trace'=>null);
  96.     }
  97. }
  98.  


Гм... разьезжается из-за слишком узкого поля для кода php.
Не знаю как сделать лучше, опробовал вроде все.
21. vsll - 21 Марта, 2011 - 15:19:31 - перейти к сообщению
Профессионально, сами писали?
Это из ядра этого сайта? Подмигивание
22. EuGen - 21 Марта, 2011 - 15:22:01 - перейти к сообщению
Это мой простой валидатор. Естественно, код мой - так как движок и фреймворк я использую собственный.
23. vsll - 21 Марта, 2011 - 15:25:22 - перейти к сообщению
Что-то у меня "скопировать код в буфер обмена" ни в одном браузере не работает, может я не так делаю, как бы скопировать чтобы без номеров строк, а то код большой, замучаешься потом править
(Добавление)
Всё, скопировла, а если будут вопросы, то здесь можно будет спросить?
24. EuGen - 21 Марта, 2011 - 15:37:17 - перейти к сообщению
Разумеется, для того я и размещаю здесь код.
Думаю, на место в "пользовательских функциях" он не тянет - простой слишком.
25. vsll - 21 Марта, 2011 - 15:42:34 - перейти к сообщению
Радость Всё гениальное - просто
Мне тут на месяц рогом рыть....
26. EuGen - 21 Марта, 2011 - 15:58:16 - перейти к сообщению
Не стоит себя недооценивать, здесь нет ничего сложного (наоборот, есть некоторые недочеты), уверен, Вы разберетесь быстро.
27. Champion - 21 Марта, 2011 - 18:59:03 - перейти к сообщению
Vasiliya пишет:
это интимные места моего сайта,
Мм, интимные места) Уже убрали, а мне не показали.
EuGen пишет:
Гм... разьезжается из-за слишком узкого поля для кода php.
Не знаю как сделать лучше, опробовал вроде все.
Можно в файрбаге поменять стиль у diva с кодом - пошире сделать).
Vasiliya пишет:
DlTA пишет:
Vasiliya почитайте о методах взлома баз данных, методах защиты и способах отслеживания попыток взлома.
Это к чему?
К тому, для чего данные фильтровать. И не только к БД это относится.

 

Powered by ExBB FM 1.0 RC1