есть код который проверяет введенные данные
if (isset($_POST['home']) && isset($_POST['away']))
{
$home = intval($_POST['home']);
$home = ceil($home);
$away = intval($_POST['away']);
$away = ceil($away);
if ($home == '' or $home < 0 or $away < 0 or $away == '')
{
echo "Неверно указан результат";
include('buttom.php'); exit();
}
}
так вот если в любое из полей ввести 0 то выбивает ошибка "Неверно указан результат" .
Скажите почему ?
Ну или как можно сделать по другому проверку что введено именно число и целое?
Спустя 2 часа, 28 минут, 30 секунд (14.04.2010 - 00:56) Gabriel написал(а):
а если так:
if ( ( !intval( $home ) && $home !== 0 ) || ( !intval( $away ) && $away !== 0 ) )
да и логика какая-то странная немножко ведь после того как проводиш значение через intval оно уже не может быть не целым http://es.php.net/manual/en/function.intval.php , что приводит к выводу : ceil() есть лишний.
if ( ( !intval( $home ) && $home !== 0 ) || ( !intval( $away ) && $away !== 0 ) )
да и логика какая-то странная немножко ведь после того как проводиш значение через intval оно уже не может быть не целым http://es.php.net/manual/en/function.intval.php , что приводит к выводу : ceil() есть лишний.
Спустя 18 секунд (14.04.2010 - 00:56) moskitos80 написал(а):
Проверка на целое:
проверка числа с плав точкой:
проверка строки
- указывается обычно в начале почти каждой книжки по php
is_int($переменная)
проверка числа с плав точкой:
is_double($переменная)
проверка строки
is_string($переменная)
- указывается обычно в начале почти каждой книжки по php

Спустя 7 часов, 4 минуты, 1 секунда (14.04.2010 - 08:00) blade написал(а):
чесно говоря думал что intval(); проверяет является ли переменная числом
Спустя 10 минут, 5 секунд (14.04.2010 - 08:10) blade написал(а):
Цитата (Gabriel @ 13.04.2010 - 21:56) |
а если так: if ( ( !intval( $home ) && $home !== 0 ) || ( !intval( $away ) && $away !== 0 ) ) да и логика какая-то странная немножко ведь после того как проводиш значение через intval оно уже не может быть не целым http://es.php.net/manual/en/function.intval.php , что приводит к выводу : ceil() есть лишний. |
Вот это вроде работает но при вводе в поля букв а не чисел непонятно что оно передает!!
а так же не проверяет есть ли вообще введенные данные
Спустя 12 минут, 58 секунд (14.04.2010 - 08:23) sergeiss написал(а):
Цитата (blade @ 13.04.2010 - 23:27) |
так вот если в любое из полей ввести 0 то выбивает ошибка "Неверно указан результат". Скажите почему ? |
Есть такая "шняга" - неявное преобразование типа в ПХП. Если в переменную записано число "ноль", то оно будет равно пустой строке, оно же будет равно false... Но только в случае "обычного" сравнения.
То есть, допустим, ты записал $home=0; тогда сравнение $home=='' выдаст "верно", а вот сравнение $home==='' выдаст "не верно", т.к. первый вариант сравнения делает преобразования типов, а последнее сравнение требует, чтобы совпадали и типы данных, и записанные значение.
Более подробно см. в хэлпе (у меня в подписи ссылка).
Спустя 3 минуты, 33 секунды (14.04.2010 - 08:27) blade написал(а):
Цитата (sergeiss @ 14.04.2010 - 05:23) | ||
Есть такая "шняга" - неявное преобразование типа в ПХП. Если в переменную записано число "ноль", то оно будет равно пустой строке, оно же будет равно false... Но только в случае "обычного" сравнения. То есть, допустим, ты записал $home=0; тогда сравнение $home=='' выдаст "верно", а вот сравнение $home==='' выдаст "не верно", т.к. первый вариант сравнения делает преобразования типов, а последнее сравнение требует, чтобы совпадали и типы данных, и записанные значение. Более подробно см. в хэлпе (у меня в подписи ссылка). |
ТАк какой код мне использовать немного все таки не понял??
Спустя 29 минут, 7 секунд (14.04.2010 - 08:56) sergeiss написал(а):
Я бы ограничился этим:
В этом коде требуется, чтобы все данные были больше нуля. Если будут введены любые нечисловые символы, то будет получен ноль. И нефиг вводить буковки так, где должны быть числа
Если буковки будут добавлены после цифр, то цифры будут преобразованы в число, а буквы будут проигнорированы.
$home = intval($_POST['home']);
$away = intval($_POST['away']);
if( $home == 0 or $away==0)
{
// что-то делаем, данные не верны
}
В этом коде требуется, чтобы все данные были больше нуля. Если будут введены любые нечисловые символы, то будет получен ноль. И нефиг вводить буковки так, где должны быть числа

Спустя 41 минута, 59 секунд (14.04.2010 - 09:38) blade написал(а):
Цитата (sergeiss @ 14.04.2010 - 05:56) |
Я бы ограничился этим:$home = intval($_POST['home']); В этом коде требуется, чтобы все данные были больше нуля. Если будут введены любые нечисловые символы, то будет получен ноль. И нефиг вводить буковки так, где должны быть числа ![]() |
Может я немного не так выразился что мне нужно или не понял ваших объяснений
1) мне нужно чтоб там могло быть любое число только не меньше 0 ( 0 чтобы можно было ввести)
2) и чтоб была обязательно проверка на то что введено( число или текст)
Спустя 23 минуты, 16 секунд (14.04.2010 - 10:01) moskitos80 написал(а):
Опс - поторопился! В любом случае intval - отбрасывает дробную часть и возвращает тип данных double...
Как вариант:
Проверку пройдут все положительные, целые числа и число 0
Как вариант:
if (isset($_GET['home']) && isset($_GET['away']))
{
$home = $_GET['home'];
$away = $_GET['away'];
if((preg_match('/^[0-9]$/',$home)) && (preg_match('/^[0-9]$/',$away)))
{
echo "верно указан результат";
}
else echo "Не Верно указан результат";
}
Проверку пройдут все положительные, целые числа и число 0
Спустя 34 минуты, 31 секунда (14.04.2010 - 10:35) twin написал(а):
sergeiss
Цитата |
В этом коде требуется, чтобы все данные были больше нуля. |
Поправочка. Отрицательные числа тоже пройдут.
Спустя 3 минуты, 48 секунд (14.04.2010 - 10:39) twin написал(а):
moskitos80
неверное решение. Регулярки тут совсем не к месту. Подсказали же,
неверное решение. Регулярки тут совсем не к месту. Подсказали же,
$home = intval($_POST['home']);
$away = intval($_POST['away']);
if( $home <= 0 or $away <= 0)
{
// что-то делаем, данные не верны
}
Спустя 4 минуты, 14 секунд (14.04.2010 - 10:43) Self написал(а):
Цитата |
Поправочка. Отрицательные числа тоже пройдут. |
да не должны.
Цитата |
2) и чтоб была обязательно проверка на то что введено( число или текст) |
в смысле ?
Спустя 9 минут, 5 секунд (14.04.2010 - 10:53) twin написал(а):
Цитата |
да не должны. |
Должны не должны, но пройдут)))
Спустя 3 минуты, 57 секунд (14.04.2010 - 10:57) moskitos80 написал(а):
twin
У него условие должно выполняться даже если данные равны 0
И не должно если в данных литерал или пустая строка...
Ну и как это без регулярки сотворить? Если к нулю в проверке условия приводиться и пустая строка и сам 0! Если только с идентично - "===" чё нить мудрить...
У него условие должно выполняться даже если данные равны 0
И не должно если в данных литерал или пустая строка...
Ну и как это без регулярки сотворить? Если к нулю в проверке условия приводиться и пустая строка и сам 0! Если только с идентично - "===" чё нить мудрить...
Спустя 12 минут, 5 секунд (14.04.2010 - 11:09) sergeiss написал(а):
Цитата (moskitos80 @ 14.04.2010 - 11:57) |
Ну и как это без регулярки сотворить? Если к нулю в проверке условия приводиться и пустая строка и сам 0! |
Да очень просто.
intval() преобразует начало строки, начинающееся с цифр, в число. Не важно, что там будет после нужных чисел.
Если будут только не-числовые символы, то intval() вернет ноль, также как и в случае, если был введен ноль.
Спустя 1 час, 16 минут, 32 секунды (14.04.2010 - 12:25) blade написал(а):
в общем кто нить может написать или подсказать как сделать окончательный и верный способ?!
а то башка совсем скоро закипит от того что на одном действии сижу уже 2 дня
а то башка совсем скоро закипит от того что на одном действии сижу уже 2 дня