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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему срабатывает условие? 
V
    Опции темы
andryus
Дата 20.12.2011, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Значение переменной $v=7. Условие по коду:
Код

if ($v<=0 || (!is_numeric($v)) || (!is_int($v)))
{
  $adderror = true;
  $formerror = true;      
}


Почему происходит вход в данное условие, если убрать кусок 
Код

(!is_int($v))


то получается нормально, вход в тело условия не происходит. Где ошибка? Помогите
PM MAIL   Вверх
krundetz
Дата 20.12.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



Цитата(andryus @  20.12.2011,  15:47 Найти цитируемый пост)
$v=7

а она у вас случайно не так
Код

$v='7';

обьявлена?

если она не объявлена, а вычисляется то хорош бы глянуть как

Это сообщение отредактировал(а) krundetz - 20.12.2011, 16:18


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
andryus
Дата 20.12.2011, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(krundetz @ 20.12.2011,  16:09)
Цитата(andryus @  20.12.2011,  15:47 Найти цитируемый пост)
$v=7

а она у вас случайно не так
Код

$v='7';

обьявлена?

если она не объявлена, а вычисляется то хорош бы глянуть как

Ну значение $v передается через форму 
Код

<input type="text" name="v" value="">

PM MAIL   Вверх
Gold Dragon
Дата 20.12.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



тогда может лучше сразу поставить все точки на и?

Код

$v = isset($_POST['v']) ? intval($_POST['v']) : 0;


Это сообщение отредактировал(а) Gold Dragon - 20.12.2011, 17:02


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 20.12.2011, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



andryus, тогда все верно, из формы приходят строковые данные не числовые

Код

$v='7';
!is_int($v); // true


Это сообщение отредактировал(а) krundetz - 20.12.2011, 17:03


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
ksnk
Дата 20.12.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



А что нужно проверить? Что число целое неотрицательное?
Код

if(ctype_digit($v)) {
//  в строковом изображении числа встречаются только цифры.
}





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
andryus
Дата 20.12.2011, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ksnk @ 20.12.2011,  17:12)
А что нужно проверить? Что число целое неотрицательное?

Что оно целое, именно на проверку целостности числа и не срабатывает, остальные условия нормально проходят
PM MAIL   Вверх
krundetz
Дата 21.12.2011, 09:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



andryus, я вам ещё раз говорю у вас не число а строка, попробуйте явно привести строку к числу


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
andryus
Дата 21.12.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А я еще проще нашел вариант: 
Код

!is_int(0+$v)

PM MAIL   Вверх
$дмитрий
Дата 21.12.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А я еще проще нашел вариант

В таком случаи
Код

!(int)$v

PM MAIL   Вверх
andryus
Дата 21.12.2011, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата($дмитрий @ 21.12.2011,  14:46)
Цитата

А я еще проще нашел вариант

В таком случаи
Код

!(int)$v

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


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



А на отрицательное значение другое условие?  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
krundetz
Дата 21.12.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



Цитата(andryus @  21.12.2011,  14:40 Найти цитируемый пост)
Код

!is_int(0+$v)

это неявное приведение

Цитата($дмитрий @  21.12.2011,  14:46 Найти цитируемый пост)

Код

!(int)$v


следует только учитывать что:
Код

!(int)'0'; //true
!(int)0; //true
!(int)'a'; //true
!(int)'1'; //false
!(int)'1a'; //false




--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 22.12.2011, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



ну а если из формы ничего не пришло? smile
так что самое лучшее это так  smile 
Код

$v = isset($_POST['v']) ? intval($_POST['v']) : 0;
if (!$v)
{
  $adderror = true;
  $formerror = true;      
}



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 22.12.2011, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



Цитата(Gold Dragon @  22.12.2011,  09:39 Найти цитируемый пост)
ну а если из формы ничего не пришло?

а стоит ли вообще запускать обработчик формы если из нее ничего не пришло?


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
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.

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


 




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


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

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