Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> волшебные кавычки, ищю мерлина, найду убью 
V
    Опции темы
Всемогущий
Дата 9.7.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



есть функция для обработки данных перед вставкой их в бд.
Появляются не нужные кавычки,помогите решить задачу.
Код

<?php
$a='       7        ';
$b='  Обычный текст   ';
$c='
          ';
function on_null($d=null){
         $d=trim($d);

           settype($one=intval($d), "string")   ;
           settype($two=$d, "string")     ;
           if($one===$two){
           settype($d, "integer" )     ;
              return  intval($d) ;
           }elseif(is_string($d)  and strlen(trim($d))>0){
             // $d=mysql_real_escape_string($d) ;
              $d="'$d'";
              return $d ;
           }else return 'null';


}

echo  on_null($a) ;  echo  "<br>\r\n"  ;  //должно быть 7 без кавычек

echo  on_null($b) ;  echo  "<br>\r\n"  ;  //должен быть текст в одинарных кавычках

echo  on_null($c) ;  echo  "<br>\r\n"  ;   //должен выводить null



?>


Добавлено через 59 секунд
здесь можно посмотреть


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
GZep
Дата 9.7.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



а так не проще?
Код

    function on_null($var) {
        switch (gettype($var)) {
            case "string" : return "'" . $var . "'";
            case "integer" : return $var;
        }
        return NULL;
    }


Добавлено через 2 минуты и 33 секунды
можно даже так:
Код

    function on_null($var = null) {
        if ($var == null)
             return; //или return null - одно и тоже
        return is_string($var) ? "'" . $var . "'" : $var;
    }



--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
UADeveloper
Дата 9.7.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 8.7.2007
Где: Харьков

Репутация: нет
Всего: нет



Цитата(GZep @  9.7.2007,  17:14 Найти цитируемый пост)
можно даже так:

Null при условии топикстартера не обрабатывается (если в строке одни пробелы).

Код
    function on_null($var = null) {
        $var=trim($var);
        if ($var == null)
         return; //или return null - одно и тоже
        return is_string($var) ? "'" . $var . "'" : $var;
    }

PM MAIL   Вверх
sTa1kEr
Дата 9.7.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Всемогущий
Цитата(Всемогущий @  9.7.2007,  16:57 Найти цитируемый пост)
           settype($one=intval($d), "string")   ;

Никогда так не делайте, если передаете переменную по ссылке! Т.к. в данном случае вы передаете ссылку не на переменную, а на результат операции присваивания. Хотя, по идеи, в данном случае PHP должен как минимум выдавать нотис.

Код

$one = intval($d);
settype($one, "string");

Вот так переменная будет корректно передана по ссылке.

И зачем вообще такая странная проверка? Проще проверять через is_numeric
Код

function on_null($var = null)
{
   $var = trim($var);
   if (is_numeric($var)) // или ctype_digit() вместо is_numeric(), если дробные числа должны считаться как строки
   {
      return intval($var);
   }
   else if(!empty($var) && is_string($var))
   {
      return "'$var'";
   }
   else
   {
      return "null";
   }
}


PS И зачем почем зря Мерлина обидели? smile

Это сообщение отредактировал(а) sTa1kEr - 9.7.2007, 18:49
PM MAIL   Вверх
Всемогущий
Дата 9.7.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



UADeveloper
заменил на ваш вариант,всё равно лишние кавычки.
посмотреть можно по той же ссылке.
GZep, ваш вариант не подходит по той причине ,что все данные приходят как string

а я потом разбираю где что



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
UADeveloper
Дата 9.7.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 8.7.2007
Где: Харьков

Репутация: нет
Всего: нет



Цитата(Всемогущий @  9.7.2007,  18:45 Найти цитируемый пост)
GZep, ваш вариант не подходит по той причине ,что все данные приходят как string

А что мешает сделать так?

Код
function on_null($var = null)
{
   $var = trim($var);
   if (is_numeric($var)) // или ctype_digit() вместо is_numeric(), если дробные числа должны считаться как строки
   {
      $var = intval($var);
      settype($var, "integer"); 
      return $var;
   }
   else if(!empty($var) && is_string($var))
   {          
      $var = "'$var'";
      settype($var, "string");
      return $var;
   }
   else
   {
      return "null";
   }

}


Это сообщение отредактировал(а) UADeveloper - 9.7.2007, 19:01
PM MAIL   Вверх
sTa1kEr
Дата 9.7.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



UADeveloper, чему вы людей учите? smile
Цитата(UADeveloper @  9.7.2007,  18:59 Найти цитируемый пост)
      $var = intval($var);
      settype($var, "integer"); 

Зачем писать два раза одно и тоже? Эти строки эквивалентны.

Цитата(UADeveloper @  9.7.2007,  18:59 Найти цитируемый пост)
   else if(!empty($var) && is_string($var))
   {          
      $var = "'$var'";
      settype($var, "string");

То же самое, зачем приводить к string-у, когда двумя строчками выше итак проверили, что это string?

PM MAIL   Вверх
Всемогущий
Дата 10.7.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Спасибо за внимание,на локальной машине всё прекрасно работает(и моя ,и любая из ваших функций),
 а на сервере числа почему то обрамляются в совершенно не нужные мне одинарные кавычки,

поэтому главный вопрос:   как наверняка отключить Magic Quotes или какой то другой механизм который добавляет лишние символы

set_magic_quotes_runtime (0) не помогло...


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
GZep
Дата 10.7.2007, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



через .htaccess. Если не заработает - выведет ошибку сервера 505, если не выведет эту ошибку - волшебные кавычки отключены.
Код

php_flag magic_quotes_gpc Off


Или вот - очень интересный пример:
Код

<?php
//Disabling magic quotes at runtime
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
}
?> 



--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Всемогущий
Дата 10.7.2007, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Ещё раз спасибо,
Оказывается у меня нет возможности отключить magic_quotes :(
решил проблемму самым ламерским способом: 
для получения на выходе типа integer стал перед return`ом к результату прибавлять ноль  :(

Код

<?php
set_magic_quotes_runtime (0) ;
$a='       7        ';
$b='  Обычный текст   ';
$c='
          ';
//echo get_magic_quotes_gpc();

function on_null($d=null){
         $d=trim($d);

           settype($one=intval($d), "string")   ;
           settype($two=$d, "string")     ;
           if($one===$two){


              return  ($d+0) ; echo'!!!!';
           }elseif(is_string($d)  and strlen(trim($d))>0){
             // $d=mysql_real_escape_string($d) ;
              $d="'$d'";
              return $d ;
           }else return 'null';


}




var_dump(on_null($a))   ;  echo  "<br>\r\n"  ;  //должно быть 7 без кавычек

var_dump( on_null($b)) ;  echo  "<br>\r\n"  ;  //должен быть текст в одинарных кавычках

var_dump( on_null($c)) ;  echo  "<br>\r\n"  ;   //должен выводить null(это строка 4 символа)



?>



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Всемогущий
Дата 10.7.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



нашел,убил.
Код

function on_null($input=null){
         $input=trim($input);
         $string=$string1=strval($input);
         $int=$int1=intval($input);
         settype($int1, "string");
         if($int1===$string1)
         return   $int1 ;
         elseif( strlen($string)>0){
        // $string=mysql_real_escape_string($string) ;

         return   "'$string'";
                 }else return 'null';


         /* settype($string, "string");
            settype($int, "integer" );       */



}



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
sTa1kEr
Дата 10.7.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Всемогущий @  10.7.2007,  02:33 Найти цитируемый пост)
поэтому главный вопрос:   как наверняка отключить Magic Quotes или какой то другой механизм который добавляет лишние символы

При чем здесь Magic Quotes? Magic Quotes никогда не добавляет кавычки, а только экранирует (добавляет слеши) к существующим кавычкам.
Цитата

Magic Quotes is a process that automagically escapes incoming data to the PHP script. It's preferred to code with magic quotes off and to instead escape the data at runtime, as needed. 

What are Magic Quotes
When on, all ' (single-quote), " (double quote), \ (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does. 

Цитата(Всемогущий @  10.7.2007,  06:49 Найти цитируемый пост)
для получения на выходе типа integer стал перед return`ом к результату прибавлять ноль  :(

Это абсолютно то же самое, как и использование функций intval() и settype()
Цитата(Всемогущий @  10.7.2007,  09:36 Найти цитируемый пост)
         $string=$string1=strval($input);
         $int=$int1=intval($input);
         settype($int1, "string");
         if($int1===$string1)

Очень забавный кусок кода smile

Это сообщение отредактировал(а) sTa1kEr - 10.7.2007, 15:36
PM MAIL   Вверх
Всемогущий
Дата 10.7.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



sTa1kEr
пожалуйста подскажите Кто мог их добавлять??


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
sTa1kEr
Дата 10.7.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Всемогущий @  10.7.2007,  15:16 Найти цитируемый пост)
пожалуйста подскажите Кто мог их добавлять?? 

Кроме вашей функции их никто добавить не мог. Кроме того я показал во втором своем посте, как правильно проверять наличие числа в строке (а не через пятикратное конвертирование из int в string и обратно smile ). is_numericctype_digit или если не доверяете этим функциям, то через preg_match("|^\d+$|", $var);
Если все равно не понятно откуда они берутся, то скажите какая у вас версия PHP и приведите полный код по которому вы тестируете. Будем разбиратся в конкретном случае.

Это сообщение отредактировал(а) sTa1kEr - 10.7.2007, 16:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.