// Проверки
function filter_input($txt,$key=0,$par=false) {
// даннаяч функция целиком сперта из мана по пхп
$search = array ("'<"."script[^>]*?".">.*?<"."/script".">'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги
"'([\r\n])[\s]+'", // Вырезает пробельные символы
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // интерпретировать как php-код
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
return preg_replace($search, $replace, $txt);
}
function filter_html($str,$key=0,$par=false) {
return htmlspecialchars($str,ENT_QUOTES,'cp1251');
}
function reduce_length($str,$key=0,$par=false) {
if ($par) {
return substr($str,0,$par-1);
}
return $str;
}
function make_integer($str,$key=0,$par=false) {
return intval($str);
}
function make_float($str,$key=0,$par=false) {
return floatval($str);
}
function validate_post($_NOT_EMPTY,$_VALS,$valid_admin) {
global $_POST;
global $_ADM_ERRORS;
if (empty($_POST)) {
return true;
}
foreach ($_VALS as $_KEY=>$_VAL) {
foreach ($_VAL as $k=>$v) {
$_is_array = is_array($_POST[$k]);
if (!$_is_array) {
$temp = $_POST[$k];
unset($_POST[$k]);
$_POST[$k][] = $temp;
}
if ($_KEY == 'untag') {
array_walk_recursive($_POST[$k],'filter_input');
}
elseif ($_KEY == 'text') {
if (!$valid_admin) {
array_walk_recursive($_POST[$k],'filter_html');
}
array_walk_recursive($_POST[$k],'addslashes');
}
elseif ($_KEY == 'int') {
array_walk_recursive($_POST[$k],'make_integer');
}
elseif ($_KEY == 'float') {
array_walk_recursive($_POST[$k],'make_float');
}
if (!empty($v)) {
array_walk_recursive($_POST[$k],'reduce_length',$v);
}
if (!$_is_array) {
$temp = $_POST[$k][0];
unset($_POST[$k][0]);
$_POST[$k] = $temp;
}
}
}
foreach ($_NOT_EMPTY as $k=>$v) {
if (empty($_POST[$v])) {
errors_add('','Не заполнено поле "'.$k.'"');
}
}
if (!empty($_ADM_ERRORS)) {
return false;
}
return true;
}
// Прямое задание переменных к фильтрации
$_NOT_EMPTY = array(
'Заголовок новости'=>'hdr',
'Текст новости' =>'text',
);
$_VALS = array(
'untag' => array('hdr'=>0),
'text' => array('hdr'=>255,'text'=>10240),
'int' => array('type'=>0,'userid'=>0,'active'=>0),
'float' => array(),
);
// Вызов, $valid_admin = true | false
validate_post($_NOT_EMPTY,$_VALS,$valid_admin);