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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не так работает intval 
:(
    Опции темы
begin
Дата 11.10.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал такую проверку данных на предмет того, что они являются числом:
Код

if (intval($_GET['category'])==$_GET['category'])

Но почему то через это условие спокойно проходят и данные вида: "dfgjh", т.е. к числам не имеющие никакого отношения.
Может лучше проверять по-другому?
PM MAIL   Вверх
Daevaorn
Дата 11.10.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(begin @  11.10.2007,  16:04 Найти цитируемый пост)
Может лучше проверять по-другому? 

http://ru2.php.net/manual/ru/function.is-numeric.php
PM MAIL WWW   Вверх
begin
Дата 11.10.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да, спасибо, насчет is_numeric уже дошло.
но все же, почему не работает вариант с intval?
ведь для текста она выдаст пустую строку, а она ведь не равна первоначальному тексту и условие не будет соблюдаться?
PM MAIL   Вверх
MichaelMakarov
Дата 11.10.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(begin @  11.10.2007,  15:25 Найти цитируемый пост)
но все же, почему не работает вариант с intval?

Он работает. Просто ты неправильно его используешь.
Вот она слабая типизация - и соответствующие ошибки.

Цитата(begin @  11.10.2007,  15:25 Найти цитируемый пост)
ведь для текста она выдаст пустую строку, а она ведь не равна первоначальному тексту и условие не будет соблюдаться?

intval вернёт не пустую строку, а ноль.
Затем этот ноль будет сравниваться со строкой.
PHP попытается привести строку к числовому виду и.... в случае "dfgjh" получит ноль.
Далее будет вычисляться сравнение 0 == 0, которое даст результат true.

Цитата(begin @  11.10.2007,  15:04 Найти цитируемый пост)
Может лучше проверять по-другому?

Юз да is_numeric.


Это сообщение отредактировал(а) MichaelMakarov - 11.10.2007, 16:03
PM MAIL WWW ICQ   Вверх
console
Дата 11.10.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



begin, потому что ==, пиши:
Код

if (intval($_GET['category'])===$_GET['category'])


Добавлено через 52 секунды
))... опередили  smile 


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
MichaelMakarov
Дата 11.10.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(console @ 11.10.2007,  15:58)
begin, потому что ==, пиши:
Код

if (intval($_GET['category'])===$_GET['category'])


Добавлено @ 15:59
))... опередили  smile

Не прокатит.
Число 0 и строка "0" не равны.
Т.е.
Код

0 === "0"

даёт false.
PM MAIL WWW ICQ   Вверх
begin
Дата 11.10.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я уже исправил весь код проверок с intval на is_numeric
Теперь дошло по-настоящему.
Последнее уточнение:
если я проверяю в условии, является ли переменная числом, нужно ли потом, в дальнейшем коде, когда я буду использовать ее в запросах, приводить ее с помощью intval?
Наверное нет, так как "не число" дальше проверки условия уже не попадет?
PM MAIL   Вверх
vasac
Дата 11.10.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Лучше не гадать, а приводить. Хуже не станет.
Думаете, что знаете все ньюансы? А то, что is_numeric() спокойно пропустит "0x45" или "27.3e-3" учли?
А лучше приводите сразу к числу без всяких проверок.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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