Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция и get
 
 автор: RV   (28.03.2005 в 09:00)   письмо автору
 
 

Есть такая функция

<?
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 ))
                   {
                   
$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'. почему еррор?

   
 
 автор: cheops   (28.03.2005 в 09:40)   письмо автору
 
   для: 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 )) 
        { 
          
$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

   
 
 автор: RV   (28.03.2005 в 10:08)   письмо автору
 
   для: 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 в 15:38)   письмо автору
 
   для: 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'

   
 
 автор: cheops   (28.03.2005 в 22:11)   письмо автору
 
   для: RV   (28.03.2005 в 15:38)
 

Хм... вообще говоря странно должна выполняться строка
<?php
$str 
"error";
?>

так как
<?php
preg_match
("/[^a-z_0-9]+/i" $str)
?>

возвращает true...

   
 
 автор: RV   (29.03.2005 в 04:29)   письмо автору
 
   для: cheops   (28.03.2005 в 22:11)
 

почему? если в строке есть что то кроме a-z_0-9, то возвращается еррор, но при слове account должно возвращатся $str = $str

   
 
 автор: isset   (29.03.2005 в 04:34)   письмо автору
 
   для: RV   (29.03.2005 в 04:29)
 

а по вашему account не входит в промежуток a-z ?
Да еще совет, там где числа проверять лучше использовать is_numeric, хотя вроде он точку пропускает...

   
 
 автор: RV   (29.03.2005 в 10:24)   письмо автору
 
   для: isset   (29.03.2005 в 04:34)
 

непонял. если в слове есть ? или / то возвратится еррор, так как это не входит в промежуток a-z_0-9. а слово аккаунт входит в промежуток а-3_0-9, значит возвратится аккаунт а не еррор

   
 
 автор: RV   (29.03.2005 в 17:44)   письмо автору
 
   для: 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");

   
 
 автор: cheops   (29.03.2005 в 22:43)   письмо автору
 
   для: RV   (29.03.2005 в 17:44)
 

Хм... а буква "a" русская нигде в строках "all" и "alf" просочиться не может?

   
 
 автор: RV   (30.03.2005 в 08:23)   письмо автору
 
   для: 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 ))
                       {
                           
$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.
зы. везде английские буквы

   
 
 автор: cheops   (30.03.2005 в 09:56)   письмо автору
 
   для: RV   (30.03.2005 в 08:23)
 

Кстати, а почему у strlen два параметра?
<?php
$len 
strlen($str $type);
?>

Один же должен быть?

   
 
 автор: cheops   (30.03.2005 в 10:04)   письмо автору
 
   для: RV   (30.03.2005 в 08:23)
 

Мистика... у меня выводится только
account
account

А больше "error function_url" у вас по коду нигде не выводится? Попробуйте изолировать функцию и закомментировать весь остальной код.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования