|
|
|
| Есть такая функция
<?
function check_url($str , $type)
{
$len = strlen($str);
if (($type == "id") OR ($type == "alf") OR ($type == "all"))
{
switch ($type)
{
case 'id' :
if ((preg_match("/[^0-9]+/" , $str)) || ($len > 5 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
case 'all' :
if (preg_match("/[^a-z_0-9]+/i" , $str) || ($len > 20 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
case 'alf' :
if (preg_match("/[^a-z_]+/i" , $str) || ($len > 10 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
}
}
else die ('function check_url error');
return $str;
}
?>
|
потом проверяю ей:
$get_mod = check_url($HTTP_GET_VARS['mod'] , "all"); при этом
echo $HTTP_GET_VARS['mod'] выводит account , echo $get_mod выводит account НО еще выводит 'function check_url error'. почему еррор? | |
|
|
|
|
|
|
|
для: RV
(28.03.2005 в 09:00)
| | У вас не стоят операторы break в конце каждого из case, поэтому после того как управление передаётся на case 'all' - код выполняется до конца - вот передайте 'id' и у вас будет два error. Следует поправить примерно следующим образом
<?php
function check_url($str , $type)
{
$len = strlen($str);
if (($type == "id") OR ($type == "alf") OR ($type == "all"))
{
switch ($type)
{
case 'id' :
if ((preg_match("/[^0-9]+/" , $str)) || ($len > 5 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
break;
case 'all' :
if (preg_match("/[^a-z_0-9]+/i" , $str) || ($len > 20 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
break;
case 'alf' :
if (preg_match("/[^a-z_]+/i" , $str) || ($len > 10 ))
{
$str = "error"; break;
}
else
{
$str = $str; break;
}
break;
}
}
else die ('function check_url error');
return $str;
}
?>
|
http://www.softtime.ru/bookphp/gl2_2.php | |
|
|
|
|
|
|
|
для: cheops
(28.03.2005 в 09:40)
| | неа. более того странная тема
есть ряд ссылок:
<a href = index.php>Главная</a><br>
<a href = index.php?mod=links>Ссылки</a></br>
<a href = index.php?mod=account>
опять проверяю (уже с измененным кодом)
$get_mod = check_url($HTTP_GET_VARS['mod'] , "alf");
когда выбираю Ссылки, все работает, выбираю Главная (index.php) тоже все ок, а вот выбираю account и тут срабатывает die ('function check_url error') | |
|
|
|
|
|
|
|
для: RV
(28.03.2005 в 10:08)
| | или вот вроде все должно работать
<?
function check_url($str , $type)
{
$len = strlen($str , $type);
if ($type === "all")
{
if (preg_match("/[^a-z_0-9]+/i" , $str) OR ($len > 20 ))
{
$str = "error";
}
else
{
$str = $str;
}
}
else
{
die ('error url');
}
return $str;
}
?>
|
тоже самое.
$get_mod = check_url($_GET['mod'], "all");
$_GET['mod'] и $get_mod = account
выводит 'error url' | |
|
|
|
|
|
|
|
для: RV
(28.03.2005 в 15:38)
| | Хм... вообще говоря странно должна выполняться строка
так как
<?php
preg_match("/[^a-z_0-9]+/i" , $str)
?>
|
возвращает true... | |
|
|
|
|
|
|
|
для: cheops
(28.03.2005 в 22:11)
| | почему? если в строке есть что то кроме a-z_0-9, то возвращается еррор, но при слове account должно возвращатся $str = $str | |
|
|
|
|
|
|
|
для: RV
(29.03.2005 в 04:29)
| | а по вашему account не входит в промежуток a-z ?
Да еще совет, там где числа проверять лучше использовать is_numeric, хотя вроде он точку пропускает... | |
|
|
|
|
|
|
|
для: isset
(29.03.2005 в 04:34)
| | непонял. если в слове есть ? или / то возвратится еррор, так как это не входит в промежуток a-z_0-9. а слово аккаунт входит в промежуток а-3_0-9, значит возвратится аккаунт а не еррор | |
|
|
|
|
|
|
|
для: RV
(29.03.2005 в 10:24)
| | да и темболее как я понял срабатывает вот это:
<?
if (($type == "id") OR ($type == "alf") OR ($type == "all"))
{
..............
}
else die ('function check_url error');
?>
|
может я неправильно указываю что то?
$action = check_url($_GET['action'] , "all"); | |
|
|
|
|
|
|
|
для: RV
(29.03.2005 в 17:44)
| | Хм... а буква "a" русская нигде в строках "all" и "alf" просочиться не может? | |
|
|
|
|
|
|
|
для: cheops
(29.03.2005 в 22:43)
| |
<?
function check_url($str , $type)
{
$len = strlen($str , $type);
if (($type === "id") || ($type === "all") || ($type === "alf"))
{
switch ($type)
{
case 'id' :
if ((preg_match("/[^0-9]+/" , $str)) || ($len > 5 ))
{
$str = "error";
}
else
{
$str = $str;
}
break;
case 'all' :
if (preg_match("/[^a-z_0-9]+/i" , $str) || ($len > 20 ))
{
$str = "error";
}
else
{
$str = $str;
}
break;
case 'alf' :
if (preg_match("/[^a-z_]+/i" , $str) || ($len > 10 ))
{
$str = "error";
}
else
{
$str = $str;
}
break;
}
}
else die ('error function_url');
return $str;
}
$text = "t_t77t";
echo check_url($text , "all");
?>
|
выводит то что надо, работает как надо. копирую ее, потом добавляю кода
<?
$get_mod = $_GET['mod'];
echo $get_mod;
echo "</br>" . $HTTP_GET_VARS['mod'] . "</br>" ;
$get_mod = check_url($_GET['mod'], "all");
?>
|
выводит :
account
account
error function_url
при этом урл : http://localhost/greencoder.ru/index.php?mod=account.
если перейти на урл mod=links - отображает все ок:
links
links
This is links
а вот если перейти ?mod=manage , то выводит
manage
manage
далее идет нормальное отображение ссылки manage (т.е. как будто она работает)
а ниже error function_url.
зы. везде английские буквы | |
|
|
|
|
|
|
|
для: RV
(30.03.2005 в 08:23)
| | Кстати, а почему у strlen два параметра?
<?php
$len = strlen($str , $type);
?>
|
Один же должен быть? | |
|
|
|
|
|
|
|
для: RV
(30.03.2005 в 08:23)
| | Мистика... у меня выводится только
А больше "error function_url" у вас по коду нигде не выводится? Попробуйте изолировать функцию и закомментировать весь остальной код. | |
|
|
|