Собственно вот и обещанная мной функция для обработки данных, поступающих от пользователя. Для получения одной переменной вызываем так (какие аргументы передавать думаю и так ясно):
<?php $var = import_var('var','G','INT',3); ?>
Для получения одновременно нескольких однотипных переменных вызов функции немного отличается:
<?php extract(import_var(array('var1','var2','var3'),'G','INT',3)); echo $var1; echo $var2; echo $var3; ?>
Вот код функции:
<?php function import_var($name,$source,$type,$maxlen=0) { $retarr=array(); if(is_array($name)) { // если нужно обработать массив с именами foreach($name as $v) { $retarr[$v] = import_var($v,$source,$type,$maxlen); // рекурсивно запускаем себя же } if(sizeof($retarr)>0) return $retarr; // возвращаем массив } // если нужно обработать одну переменную switch($source) { case 'G': if (isset($_GET[$name])) { $var=$_GET[$name]; // из GET } break; case 'P': if (isset($_POST[$name])) { $var=$_POST[$name]; // из POST } break; case 'C': if (isset($_COOKIE[$name])) { $var=$_COOKIE[$name]; // из Cookie } break; } if(!isset($var)) return false; // если переменная существует if(is_array($var)) return false; // и если это не массив... if(get_magic_quotes_gpc()) $var = stripslashes($var); // убираем лишние бэкслэши if(empty($var)) return false; // если переменная пуста if ($maxlen>0) $var = substr($var,0,$maxlen); //обрубаем лишнее switch($type) { // теперь обрабатываем в соответствии с типом case 'INT' : // число integer return is_integer($var) ? $var : intval($var); break; case 'NUM' : // число integer или float return is_numeric($var) ? $var : false; break; case 'HTML' : // текст, в котором могут содержаться тэги return trim(htmlspecialchars($var)); break; case 'SQL' : // строка, которая попадет в SQL-запрос return mysql_real_escape_string(htmlspecialchars($var)); break; case 'MAIL' : // email-адрес return preg_match('/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{2,4}$/',$var) ? $var : false; break; case 'ALPHA' : // только буквенные символы return preg_match("/^[а-яА-ЯёЁa-zA-Z]+$/",$var) ? $var : false; break; case 'ALPHANUM' : // числовые и буквенные символы return preg_match("/^[а-яА-ЯёЁa-zA-Z0-9]+$/",$var) ? $var : false; break; case 'MD5' : // md5-хэш return preg_match("/^[a-fA-F0-9]{32}+$/",$var) ? $var : false; break; case 'SHA1' : // sha1-хэш return preg_match("/^[a-fA-F0-9]{40}+$/",$var) ? $var : false; break; case 'BOOL': // булева величина return ($var=="1" || $var=="true" || $var=="on") ? true : false; break; } } ?>
Хочу отметить, что данная функция не принимает массивы данных, так как их обработка весьма затруднительна, ввиду того, что элементы могут иметь разные типы данных, и одним вызовом функции корректно обработать весь массив никак не получится.
Жду Ваших комментариев с предложениями по поводу дополнительных типов данных, которые также могут быть востребованы.
Leave a Reply