| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Проверка переменной! |
| Автор: Source 2.1.2009, 23:46 | ||
| Здравствуйте! Помогите чайнику! На примере простого, ниже следующего кода... Мне нужно проверить переменную $age на целочисленность, и на непустоту. А переменную $name на строковую и тоже на непустую... Мне почему-то кажеться что пустота это !empty(), а строковость это is_string(). Только я незнаю как все это использовать вместе с is_numeric() в одном операторе if(is_numeric($age)).
|
| Автор: Satana 3.1.2009, 00:06 | ||
ну сделай вот так вот:
|
| Автор: Source 3.1.2009, 00:15 | ||||
Satana, спасибо! Но тут что-то не то... в if (((is_numeric($age)) and (!empty($age)) and (!empty($name)) and (is_string($name))) после if должно быть две скобки. И (is_string($name)) нига не проверяет $name на строковость. :( ЗЫ. Но теперь буду уметь пользоваться and! |
| Автор: theworldcreator 3.1.2009, 00:17 | ||||||
Данные переданные через POST, насколько я знаю, не бывают нестроковыми. Для чего вы проверяете имя, чтобы безопасно записать в БД? Или чтобы можно было вывести не боясь XSS? Или просто так? Советую имя проверить регулярным выражением, чтобы в нем были только английские и русские буквы, а с возрастом поступить так:
Регулярка примерна такая выйдет:
Добавлено через 14 минут и 21 секунду
Добавлено через 14 минут и 31 секунду Написал "младше 14 лет", а не 13, так как у вас было условие что пришедшие должны быть старше тринадцати, и не старше или ровно тринадцать. |
| Автор: Source 3.1.2009, 00:36 | ||||||||||||
Я просто так... Скажите, а чем отличается
от условия
О. Пордон. Я понял различие $age = (int)$_POST['age'] и (is_numeric($age))! Целочисленность. |
| Автор: theworldcreator 3.1.2009, 00:49 | ||||||||
Приводит переменную к стандартному десятеричному виду, в отличие от простой проверки численности. Например строка
при использование is_numeric просто пройдет проверку, а при приведение к типу int станет числом 123. Да и ИМХО хранить числа как числа правильней чем хранить их как строки(заставляя процессор каждый раз приводить его к типу int при использование его в данном ключе). Добавлено через 1 минуту и 22 секунды P.S. Если нужна дробная часть приводите к типу float |
| Автор: Source 3.1.2009, 01:14 | ||||||||||||
Понял, спасибо! Касательно вашего кода:
В if(preg_match('/^[a-zа-я]+$/i', $name)) надо было оставить (!empty($age)). (!empty($name)) Естественно не нужно. Во всем разобрался, спасибо! ЗЫ. if($age > 13) исправил на if($age >= 13) ! |
| Автор: theworldcreator 3.1.2009, 01:48 |
| Если $_POST['age'] пусто, то после приведения к int оно становиться равно числу ноль. Ноль не больше или равен 13, так что !empty($age) оставлять - избыточно. |
| Автор: Source 3.1.2009, 01:54 | ||
Да, но без !empty($age) если в поле age я ничего не ввожу у меня не выскакивает echo "Ошибка!";, а мне нужно чтобы юзер заполнял и name и age! |