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:
скопировать код в буфер обмена
скопировать код в буфер обмена
- /*
- //sample of array-validation rules:
- $rgKeysRequired = array(
- 'row_number' =>array('type'=>'int','empty'=>false, 'maxlength'=>null, 'format'=>null),
- //
- 'app_id_main' =>array('type'=>'string','empty'=>false, 'maxlength'=>null, 'format'=>null),
- 'reg_id_main' =>array('type'=>'string','empty'=>false, 'maxlength'=>null, 'format'=>null),
- 'tarrif_code' =>array('type'=>'numeric','empty'=>false, 'maxlength'=>1, 'format'=>null),
- 'status' =>array('type'=>'string','empty'=>false, 'maxlength'=>2, 'format'=>null),
- 'msisdn_main' =>array('type'=>'numeric','empty'=>false, 'maxlength'=>11, 'format'=>'/^79\d{9,9}$/'),
- 'account' =>array('type'=>'string','empty'=>false, 'maxlength'=>12, 'format'=>null),
- 'amount' =>array('type'=>'float','empty'=>true, 'maxlength'=>null, 'format'=>null),
- 'app_count' =>array('type'=>'int','empty'=>true, 'maxlength'=>8, 'format'=>null),
- 'tarrif_main' =>array('type'=>'string','empty'=>false, 'maxlength'=>90, 'format'=>null)
- );
- */
- class Data_Validator
- {
- protected $rgFields;
- 'int'=>0,
- 'double'=>1,
- 'numeric'=>2,
- 'string'=>3
- );
- function __construct($rgFields)
- {
- $this->rgFields=$rgFields;
- }
- protected function setCoverType($data)
- {
- $sData=(string)$data;
- if((string)((int)$data)===$sData)
- {
- return (int)($sData);
- }
- if((string)((double)$data)===$sData)
- {
- return (double)($sData);
- }
- return $sData;
- }
- protected function getCoverType($data)
- {
- $sData=(string)$data;
- if((string)((int)$data)===$sData)
- {
- return 'int';
- }
- if((string)((double)$data)===$sData)
- {
- return 'double';
- }
- return 'string';
- }
- protected function checkDataType($data, $type)
- {
- //int < double < numeric < string
- return $this->rgTypesRule[$this->getCoverType($data)]<=$this->rgTypesRule[$type];
- }
- function validate($rgDataCheck)
- {
- //first, integrity validation:
- foreach($this->rgFields as $field => $rgValidator)
- {
- //check data existing:
- if(!$rgValidator['empty'] && (!array_key_exists($field, $rgDataCheck) || !isset($rgDataCheck[$field])))
- {
- return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on empty-checking');
- }
- //check data type:
- if(!$rgValidator['empty'] && !$this->checkDataType($rgDataCheck[$field], $rgValidator['type']))
- {
- return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on type checking: expecting '.$rgValidator['type']);
- }
- //check length if present:
- {
- return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on maxlength checking: longer than '.$rgValidator['maxlength']);
- }
- //check format. This could be slow - depending of pattern difficulty, so this check is last:
- if(!$rgValidator['empty'] && isset($rgValidator['format']) && !preg_match($rgValidator['format'], $rgDataCheck[$field]))
- {
- return array('valid'=>false, 'trace'=>'Validator of field ['.$field.'] returns failing on format checking: expecting format '.$rgValidator['format']);
- }
- }
- }
- }
Гм... разьезжается из-за слишком узкого поля для кода php.
Не знаю как сделать лучше, опробовал вроде все.