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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка переменной! Целочисленная, строковая, пустая... 
V
    Опции темы
Source
  Дата 2.1.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеттабайт



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.8.2006
Где: Везде

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



Здравствуйте!

Помогите чайнику!

На примере простого, ниже следующего кода... Мне нужно проверить переменную $age на целочисленность, и на непустоту. А переменную $name на строковую и тоже на непустую...

Мне почему-то кажеться что пустота это !empty(), а строковость это is_string(). Только я незнаю как все это использовать вместе с is_numeric() в одном операторе if(is_numeric($age)).

Код

$name = $_POST['name'];
$age = $_POST['age'];

if(is_numeric($age))
{
    if($age > 13)
    {
        printf("$name Добро пожаловать! Ваш возраст $age, мы надеемся что это правда!" );
    }
        else 
        {
            printf("$name извините, но вы младше 13 лет. До свидания!" );
        }
}
else 
{
    printf("Ошибка");
}

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

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



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

$name = $_POST['name'];
$age = $_POST['age'];
if (((is_numeric($age)) and (!empty($age)) and (!empty($name)) and (is_string($name)))
{
    if($age > 13)
    {
        printf("$name Добро пожаловать! Ваш возраст $age, мы надеемся что это правда!" );
    }
        else 
        {
            printf("$name извините, но вы младше 13 лет. До свидания!" );
        }
}
else 
{
    printf("Ошибка");
}


Это сообщение отредактировал(а) Satana - 3.1.2009, 00:07


--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
Source
Дата 3.1.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеттабайт



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.8.2006
Где: Везде

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



Цитата(Satana @ 3.1.2009,  00:06)
ну сделай вот так вот:
Код

$name = $_POST['name'];
$age = $_POST['age'];
if (((is_numeric($age)) and (!empty($age)) and (!empty($name)) and (is_string($name)))
{
    if($age > 13)
    {
        printf("$name Добро пожаловать! Ваш возраст $age, мы надеемся что это правда!" );
    }
        else 
        {
            printf("$name извините, но вы младше 13 лет. До свидания!" );
        }
}
else 
{
    printf("Ошибка");
}

Satana, спасибо!

Но тут что-то не то...

в if (((is_numeric($age)) and (!empty($age)) and (!empty($name)) and (is_string($name))) после if должно быть две скобки. И (is_string($name)) нига не проверяет $name на строковость. :(

ЗЫ. Но теперь буду уметь пользоваться and! smile
 


PM   Вверх
theworldcreator
Дата 3.1.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

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



Данные переданные через POST, насколько я знаю, не бывают нестроковыми. Для чего вы проверяете имя, чтобы безопасно записать в БД? Или чтобы можно было вывести не боясь XSS? Или просто так? Советую имя проверить регулярным выражением, чтобы в нем были только английские и русские буквы, а с возрастом поступить так:
Код

$age = (int)$_POST['age'];
if($age > 13){
     //делайте что вам надо
}

Регулярка примерна такая выйдет:
Код

/^[a-zа-я]+$/i


Добавлено через 14 минут и 21 секунду
Код

$name = $_POST['name'];
$age = (int)$_POST['age'];
if(preg_match('/^[a-zа-я]+$/i', $name)){
     if($age > 13){
            echo($name."Добро пожаловать! Ваш возраст ".$age.", мы надеемся что это правда!");
     }else{
            echo($name."извините, но вы младше 14 лет. До свидания!";
     }       
}else{
     echo "Ошибка!";
}


Добавлено через 14 минут и 31 секунду
Написал "младше 14 лет", а не 13, так как у вас было условие что пришедшие должны быть старше тринадцати, и не старше или ровно тринадцать.
PM MAIL WWW ICQ   Вверх
Source
Дата 3.1.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеттабайт



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.8.2006
Где: Везде

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



Цитата(theworldcreator @ 3.1.2009,  00:17)
Данные переданные через POST, насколько я знаю, не бывают нестроковыми. Для чего вы проверяете имя, чтобы безопасно записать в БД? Или чтобы можно было вывести не боясь XSS? Или просто так? Советую имя проверить регулярным выражением, чтобы в нем были только английские и русские буквы, а с возрастом поступить так:
Код

$age = (int)$_POST['age'];
if($age > 13){
     //делайте что вам надо
}

Регулярка примерна такая выйдет:
Код

/^[a-zа-я]+$/i


Добавлено @ 00:32
Код

$name = $_POST['name'];
$age = (int)$_POST['age'];
if(preg_match('/^[a-zа-я]+$/i', $name)){
     if($age > 13){
            echo($name."Добро пожаловать! Ваш возраст ".$age.", мы надеемся что это правда!");
     }else{
            echo($name."извините, но вы младше 14 лет. До свидания!";
     }       
}else{
     echo "Ошибка!";
}


Добавлено @ 00:32
Написал "младше 14 лет", а не 13, так как у вас было условие что пришедшие должны быть старше тринадцати, и не старше или ровно тринадцать.

Я просто так...  smile 

Скажите, а чем отличается
Код

$age = (int)$_POST['age'];
 

от условия

Код

 (is_numeric($age))



О. Пордон. Я понял различие $age = (int)$_POST['age'] и (is_numeric($age))! Целочисленность.

Это сообщение отредактировал(а) Source - 3.1.2009, 00:48
PM   Вверх
theworldcreator
Дата 3.1.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

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



Цитата(Source @ 3.1.2009,  00:36)
Скажите, а чем отличается
Код

$age = (int)$_POST['age'];
 

от условия

Код

 (is_numeric($age))

Приводит переменную к стандартному десятеричному виду, в отличие от простой проверки численности. Например строка
Код

"+0123.45e6"

при использование is_numeric просто пройдет проверку, а при приведение к типу int станет числом 123. Да и ИМХО хранить числа как числа правильней чем хранить их как строки(заставляя процессор каждый раз приводить его к типу int при использование его в данном ключе).

Добавлено через 1 минуту и 22 секунды
P.S. Если нужна дробная часть приводите к типу float
PM MAIL WWW ICQ   Вверх
Source
Дата 3.1.2009, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеттабайт



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.8.2006
Где: Везде

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



Цитата(theworldcreator @ 3.1.2009,  00:49)
Цитата(Source @ 3.1.2009,  00:36)
Скажите, а чем отличается
Код

$age = (int)$_POST['age'];
 

от условия

Код

 (is_numeric($age))

Приводит переменную к стандартному десятеричному виду, в отличие от простой проверки численности. Например строка
Код

"+0123.45e6"

при использование is_numeric просто пройдет проверку, а при приведение к типу int станет числом 123. Да и ИМХО хранить числа как числа правильней чем хранить их как строки(заставляя процессор каждый раз приводить его к типу int при использование его в данном ключе).

Добавлено @ 00:51
P.S. Если нужна дробная часть приводите к типу float


Понял, спасибо! 

Касательно вашего кода:
Код

$name = $_POST['name'];
$age = (int)$_POST['age'];
if(preg_match('/^[a-zа-я]+$/i', $name)){
     if($age > 13){
            echo($name."Добро пожаловать! Ваш возраст ".$age.", мы надеемся что это правда!");
     }else{
            echo($name."извините, но вы младше 14 лет. До свидания!";
     }       
}else{
     echo "Ошибка!";
}


В if(preg_match('/^[a-zа-я]+$/i', $name)) надо было оставить (!empty($age))(!empty($name)) Естественно не нужно. 

Во всем разобрался, спасибо!

ЗЫ. if($age > 13) исправил на if($age >= 13) !


PM   Вверх
theworldcreator
Дата 3.1.2009, 01:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

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



Если $_POST['age'] пусто, то после приведения к int оно становиться равно числу ноль. Ноль не больше или равен 13, так что !empty($age) оставлять - избыточно.
PM MAIL WWW ICQ   Вверх
Source
Дата 3.1.2009, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеттабайт



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.8.2006
Где: Везде

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



Цитата(theworldcreator @ 3.1.2009,  01:48)
Если $_POST['age'] пусто, то после приведения к int оно становиться равно числу ноль. Ноль не больше или равен 13, так что !empty($age) оставлять - избыточно.

Да, но без !empty($age) если в поле age я ничего не ввожу у меня не выскакивает echo "Ошибка!";, а мне нужно чтобы юзер заполнял и name и age!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1402 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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