- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
<?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;
}
}
?>
http://raz0r.name/releases/funkciya-dlya-obrabotki-vxodyashhix-dannyx/
mark 09.09.2011 04:19 # −2
sectus 09.09.2011 10:58 # 0
Nemoden 09.09.2011 04:34 # +3
А так-то вроде норм. Лишнего в функцию не подпихнешь, программист учел то, что magic_quotes могут быть включены и даже, что $name может быть массивом. Где откровенное говно-то?...
Может быть имелось ввиду излишнее кол-во очевидных комментариев типа ? + лишний.
sectus 09.09.2011 10:57 # −2
foGa 09.09.2011 06:08 # 0
Vasiliy 09.09.2011 08:51 # +3
Teddy_Brown 09.09.2011 08:41 # −1
Он божественнен. песпес.ы
eth0 09.09.2011 09:26 # 0
Lure Of Chaos 09.09.2011 09:40 # 0
sectus 09.09.2011 15:59 # 0
sectus 09.09.2011 10:52 # +1
* if ($maxlen>0) $var = substr($var,0,$maxlen); - нет работы с mb строками. Тихое обрезание строки. Это не очень страшно, но, если кто-то напишет Войну и Мир на твоём сайте, а сохранится только предисловие - будет обидно.
* Ненужная проверка в 9 строке. Если передать в $name пустой массив, то получим ошибку, вместо пустого массива на выходе.
* Нельзя различить два случая: передали переменную равную 0('') и не передали переменную вообще.
* Разное поведение типов INT и NUM.
* return is_integer($var) ? $var : intval($var); - бессмысленная проверка, ведь $var при входе в условие будет всегда строкой (если, конечно, не записать в эти массивы что-нибудь самому).
* Нет обработки _SERVER (ну и _REQUEST, но им можно и не пользоваться).
* Нельзя получить массив.
* И интересный тип HTML... ведь этот подход в целом, по замыслу автора, позволяет избежать sql инъекций, а этот тип как раз пропустит их.
sectus 09.09.2011 10:58 # 0
* чтобы пользоваться этой функцией нужно иметь подключение через mysql_connect
istem 10.09.2011 03:02 # 0
А, вот, спрашивается, sectus, какого х.я ты там забыл??!
sectus 11.09.2011 15:32 # 0
И автор комментировал этот пост последний раз "3. Январь 2010, 13:48", т.е. почти два года он поддерживал код.
istem 12.09.2011 10:10 # 0
shishi 25.08.2021 19:33 # 0