![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Доброго времени суток форумчане!
Есть следующий код.
Затруднение мое в том что немогу понять почему в браузер выводится "NO", хотя в соответствие с описанием этой функции она проверяет переменную на предмет присвоения ей какого-либо значения отличного от NULL, а следовательно должно выводится "YES". Может кто разъяснить ситуацию? |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
чего тут объяснять, мануал -> читать
функция empty (в переводе: пустой) проверяет значение на пустоту, то есть в твоём примере, NO будет если перенной не существует, и если она равна: false, "", 0 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Да видимо мой мануал(РНР5 библия профессионала. Леон Аткинсон, Зеев Сураски) можно выкинуть на помойку.
Возникает вопрос как мне правильно проверит есть ли переменная и не присвоено ли ей пустое значение . Достаточно ли будет проверять только функцией isset() пришло ли значение в массив POST или GET если мне не важно какого оно типа(только не пустое), а потом я пропускаю его через фильтр чтобы избежать SQL-инекций. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
тогда лучше isset($_REQUEST['perem'])
но я лично делаю наоборот, вначале инициализирую все нужные переменные:
а потом уже проверяю их на пустоту: !empty($perem) |
|||
|
||||
DioNiR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
Читаем мануал:
От сюда и делай вывод. --------------------
Думали это конец? Ха, всё только начинается. |
|||
|
||||
krundetz |
|
||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Тоесть вы два раза делаете одинаковую проверку одного значения? Я правильно понял? Если правильно то зачем? |
||||
|
|||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
всё зависит от подхода,
инициализация и проверка разные вещи я просто подключаю библиотеку со своими функциями, где есть вот такая:
просто усложнённый вариант if(!empty($_REQUEST['perem'])) $perem = $_REQUEST['perem']; else $perem = ''; а в тексте самой страницы вначале задаю переменные:
в итоге я получаю нужные мне переменные, которые я ожидаю, с истриблёнными html-тэгами, php (если требуется) или с пустыми значениями, но существующие в дальнейшем их можно использовать в коде не заботясь, что php будет ругаться на несуществующие переменные |
||||
|
|||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Спасибо за ответы. В результате пришел к следующему коду для проверке есть ли переменная и не пустая(т.е. переменная может быть чем угодно кроме пустой строки) ли она:
Является ли данный код достаточным и не избыточным? bars80080 Отдельное спасибо вам. Не совсем понял про инициализацию и проверку какие бывают подходы? Вроде всегда сначала проверяем пришедшее значение на пригодность а потом в случае соответствия определенным критерия проводим инициализацию. |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Смотря для какой цели. Для заявленной - имхо, вполне...
Не всегда, иногда сначала инициализируем всё значениями по умолчанию (как если бы ничего не было передано), а потом, если обнаруживаем, что для какого-то параметра пришло допустимое пользовательское значение - подставляем его взамен дефолтного. Лично мне такой вариант даже больше по душе, хотя опять же, все зависит от задачи. Это сообщение отредактировал(а) SelenIT - 12.12.2007, 11:01 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
всё зависит от целей и привычных приёмов работы, мне легче объявить все переменные изначально (заметьте с устранёнными злонамеренными тэгами и т.п.), а потом уже использовать их
что касается вашего кода, то для
код достаточен, а избыточен или нет зависит от того, что вы хотите я так понимаю, у вас на сайте пользователи не жмут на ссылки, чтобы увидеть надпись
|
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Чтобы узнать, является ли данный код достаточным и не избыточным, надо знать, какую задачу он выполняет.
Насколько я понимаю, тебя не устроил функционал empty() потому, что она возвращает истину, если параметр равен нулю. так? И тебе нужно проверить, существует ли переменная и неявляется ли она пустой строкой? Тогда да, этот код не избыточный, поскольку делает ровно то, что тебе нужно. Непонятно только, что будет происходить, если проверка вернет ложь. То есть, что будет делать реальный скрипт вместо "echo "Пременная пуста";" в тестовом. Если все равно создавать $a, то зачем такие телодвижения с проверкой на пустоту. Если она дальше будет использоваться, то наверняка будут и другие проверки на допустимость, а значит, среди них можно и пустоту проверить. |
|||
|
||||
krundetz |
|
||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Конечно да. Далее она обрабатывается фильтром для зашиты от инекций и помещается в базу данных.
В этом случае пользователю выводится сообщение что его действия некорректны. |
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
какое красивое название для одной-единственной функции mysql_real_escape_string ![]() Если она помещается в базу данных, значит запрос приходит методом POST. Если запрос приходит методом POST, то текстовые переменные не имеет смысла проверять на наличие по отдельности. Вполне достаточно проверить наличие только самого запроса POST. Так что, код является избыточным. Вообще, ты смешиваешь два понятия - ошибки программы и пользовательские ошибки. Наличие или отсутствие переменной - это ошибка программы. И обрабатывается одним образом. ожидаемое же от пользователя значение - это пользовательская ошибка. И обрабатывается по-другому. Я думаю, в твоем случае надо эти проверки разнести. |
|||
|
||||
krundetz |
|
||||||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Да у меня метод POST. Только почему вы так однозначно уверены в том что метод GET не используется для занесения в БД. Простейшей пример при заходе на страницу увеличение счетчика ее просмотров.
Не одной единственной. Не забывайте что что на сервере могут быть включены волшебные кавычки и то что mysql_real_escape_string не экранирует % и _
И к чему это приведет если кто-то захочет поэксперементировать с тем как мои скрипты обрабатывают данные пришедшие методом POST
![]() |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |