Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Почему срабатывает условие?


Автор: andryus 20.12.2011, 15:47
Значение переменной $v=7. Условие по коду:
Код

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


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

(!is_int($v))


то получается нормально, вход в тело условия не происходит. Где ошибка? Помогите

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

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

$v='7';

обьявлена?

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

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

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

$v='7';

обьявлена?

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

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

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

Автор: Gold Dragon 20.12.2011, 16:59
тогда может лучше сразу поставить все точки на и?

Код

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

Автор: krundetz 20.12.2011, 17:00
andryus, тогда все верно, из формы приходят строковые данные не числовые

Код

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

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

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



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

Что оно целое, именно на проверку целостности числа и не срабатывает, остальные условия нормально проходят

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

Автор: andryus 21.12.2011, 14:40
А я еще проще нашел вариант: 
Код

!is_int(0+$v)

Автор: $дмитрий 21.12.2011, 14:46
Цитата

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

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

!(int)$v

Автор: andryus 21.12.2011, 15:06
Цитата($дмитрий @ 21.12.2011,  14:46)
Цитата

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

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

!(int)$v

Ну да, или так

Автор: ksnk 21.12.2011, 15:18
А на отрицательное значение другое условие?  smile 

Автор: krundetz 21.12.2011, 16:11
Цитата(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


Автор: Gold Dragon 22.12.2011, 09:39
ну а если из формы ничего не пришло? smile
так что самое лучшее это так  smile 
Код

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

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

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

Автор: Gold Dragon 22.12.2011, 14:58
так ситуации бывают разные. А вот что прислал клиент проверять не только нужно, но и обязательно нужно. И не только на пришло-не пришло

Автор: krundetz 22.12.2011, 16:21
Цитата(Gold Dragon @  22.12.2011,  14:58 Найти цитируемый пост)
А вот что прислал клиент проверять не только нужно, но и обязательно нужно.

а где я говорил что не нужно?
Цитата(Gold Dragon @  22.12.2011,  14:58 Найти цитируемый пост)
И не только на пришло-не пришло 

и этого я не говорил.

Я сказал, что ты в любом случае предлагаешь запускать обработчик формы, не зависимо от того пришли данные из нее или не пришли. И мне непонятно зачем?


Автор: Gold Dragon 23.12.2011, 06:10
krundetz, так я не тебе это сказал ;) И мы же не видим всего кода, так что понять что там приходит или отправляется мы не знаем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)