[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка данных
blade
Ребята помогите пжлст!!
есть код который проверяет введенные данные

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() есть лишний.

Спустя 18 секунд (14.04.2010 - 00:56) moskitos80 написал(а):
Проверка на целое:
is_int($переменная)

проверка числа с плав точкой:
is_double($переменная)

проверка строки
is_string($переменная) 

- указывается обычно в начале почти каждой книжки по php smile.gif

Спустя 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)
Цитата (blade @ 13.04.2010 - 23:27)
так вот если в любое из полей ввести 0 то выбивает ошибка "Неверно указан результат".
Скажите почему ?

Есть такая "шняга" - неявное преобразование типа в ПХП. Если в переменную записано число "ноль", то оно будет равно пустой строке, оно же будет равно 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)
{
// что-то делаем, данные не верны
}

В этом коде требуется, чтобы все данные были больше нуля. Если будут введены любые нечисловые символы, то будет получен ноль. И нефиг вводить буковки так, где должны быть числа smile.gif Если буковки будут добавлены после цифр, то цифры будут преобразованы в число, а буквы будут проигнорированы.

Спустя 41 минута, 59 секунд (14.04.2010 - 09:38) blade написал(а):
Цитата (sergeiss @ 14.04.2010 - 05:56)
Я бы ограничился этим:

$home = intval($_POST['home']);
$away = intval($_POST['away']);

if( $home == 0 or $away==0)
{
// что-то делаем, данные не верны
}

В этом коде требуется, чтобы все данные были больше нуля. Если будут введены любые нечисловые символы, то будет получен ноль. И нефиг вводить буковки так, где должны быть числа smile.gif Если буковки будут добавлены после цифр, то цифры будут преобразованы в число, а буквы будут проигнорированы.

Может я немного не так выразился что мне нужно или не понял ваших объяснений

1) мне нужно чтоб там могло быть любое число только не меньше 0 ( 0 чтобы можно было ввести)
2) и чтоб была обязательно проверка на то что введено( число или текст)

Спустя 23 минуты, 16 секунд (14.04.2010 - 10:01) moskitos80 написал(а):
Опс - поторопился! В любом случае intval - отбрасывает дробную часть и возвращает тип данных double...

Как вариант:


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! Если только с идентично - "===" чё нить мудрить...

Спустя 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 дня
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.