Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Непонятное поведение is_numric

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
spsu
Отправлено: 10 Апреля, 2013 - 22:56:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)





Выводит:
bool(true)
Почему?
В док-ции написано:
Цитата:
Проверяет, является ли данная переменная числом. Строки, содержащие числа, состоят из необязательного знака, любого количества цифр, необязательной десятичной части и необязательной экспоненциальной части. Так, +0123.45e6 является верным числовым значением. Шестнадцатеричная запись (0xFF) также допускается, но только без знака, десятичной и экспоненциальной части.

Функц. убирает пробелы перед проверкой?
 
 Top
Мелкий Супермодератор
Отправлено: 10 Апреля, 2013 - 23:05:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Да, как видно. При том, это поведение не конкретной функции, а гораздо глубже, в приведении типов. intval, приведение к int - так же пробел игнорируют.


-----
PostgreSQL DBA
 
 Top
spsu
Отправлено: 10 Апреля, 2013 - 23:08:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




Ну intval то что игнорирует прлбел удобно, т.к от sql-inj удобно защищать если числовой параметр ожидается.
Прийдетса рег-кой чекать.
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2013 - 23:18:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




spsu есть ещё такой вариант


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spsu
Отправлено: 10 Апреля, 2013 - 23:22:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




OrmaJever
Регуляркой будет как мне кажется очевидней, я бы например не сразу бы понял смысл такой манипуляции если бы встретил ее в коде.
Хотя не надо в таком случае проверять тип переменной перед передачей в preg_match.
Если юзать рег-ку.
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2013 - 23:22:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




нет, проверил, вариант выше не прокактит, сравнение в php тоже страное, но тут на помощь пришла функция strcmp

Никогда не понимал зачем она в php нужна, оказывается нужна Закатив глазки


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 10 Апреля, 2013 - 23:45:55
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




зачем там регулярки? если будет непробельный символ проверка сработает а одними пробелами какая иньекция?
лично я проверяю на >0
и проверка на тип и смысловая проверка

(Отредактировано автором: 10 Апреля, 2013 - 23:46:28)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
spsu
Отправлено: 10 Апреля, 2013 - 23:52:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




Цитата:
зачем там регулярки? если будет непробельный символ проверка сработает а одними пробелами какая иньекция?

Рег-ка для проверки типа.
Если это строка то через intval привести к int и сувать в запрос.
Иначе escape_string строку в кавычки и в запрос.
Все это для автоматической очистки параметра перед добавкой в sql запрос.
Чтоб рег-но не юзать escape_string, шаблоны(mysqli::prepare) не подходят. Т.к запрос динамически составляется.

Цитата:
лично я проверяю на >0

То есть полученную переменную из вне сразу так проверяете?

(Отредактировано автором: 10 Апреля, 2013 - 23:53:44)

 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2013 - 23:54:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




spsu если вам нужно число в запрос то какая разница что там вобще в строке? Приводите к инту и всё.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spsu
Отправлено: 10 Апреля, 2013 - 23:56:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




OrmaJever , Суть в том чтобы узнать что это число\строка\NULL.
И в зависимости от этого подготовить ее к запросу(переменную).
 
 Top
caballero
Отправлено: 11 Апреля, 2013 - 00:00:22
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Если это строка то через intval привести к int и сувать в запрос.

зачем в PHP приведение типа? а кавычки или нет зависит от типа поля в БД а не от того что в переменной PHP

(Отредактировано автором: 11 Апреля, 2013 - 00:01:09)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2013 - 00:03:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




spsu пишет:
И в зависимости от этого подготовить ее к запросу(переменную).

зачем и как? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spsu
Отправлено: 11 Апреля, 2013 - 00:06:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




caballero, я автоматически хочу определять тип переменной и в зависимости от этого подготавливать ее к вставке в запрос соответсвенно строки надо заключать в кавычки и экранировать опасные символы, а строки которые состоят только из чисел\числа можно передавать как есть.
Вот конечная цель.

Цитата:
зачем и как?

См. выше.

В принципе все что мне надо было я узнал.

(Отредактировано автором: 11 Апреля, 2013 - 00:07:37)

 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2013 - 00:09:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




spsu вы хотите сделать из мухи слона.
Если у вас в запрос нужно вставить строку или число то пропустить её через mysqli_real_escape_string и возьмите в кавычки в запросе, если там может быть только число то приведите переменую к инту и всё.
(Добавление)
Конешно из одной строки можно сделать десять, но лично я этого не понимаю.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 11 Апреля, 2013 - 00:10:33
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
я автоматически хочу определять тип переменной и в зависимости от этого подготавливать ее к вставке в запрос соответсвенно строки надо заключать в кавычки и экранировать опасные символы, а строки которые состоят только из чисел\числа можно передавать как есть.
Вот конечная цель.

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

Запрос к БД строится в зависимости от ее структуры, в частности типов полей. Если тип поля строка нужно сравнивать как строку (в кавычках) а сли целое то сравнивать с целым. Серверу Бд пофиг что там делаешь с переменными в PHP.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB