moty Потому что == и === это не одно и тоже, аналогично и != и !== (мануал в помощь)
Тут наверное тупой вопрос:
Цитата:
$a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type. (introduced in PHP 4)
А какого другого типа может быть, ээээ... NULL? И вообще, Нулл, разве сам не тип? Или у других типов бывает нулевое значение?* А в данном случае вообще получить нулевое значение, которое не будет типом НУЛЛ - вообще возможно? *у boolean должно быть, да?
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
ToSHiC Не совсем согласен, для $_POST я бы скорее проверял
Код:
if ($_POST['name'] !== "")
(долго объяснять, как протрезвею может и поясню)
а чо если юзернейм из цифир?:) в принципе, у empty есть только один досадный минус - если на вход попадёт число 0, то оно скажет, что это empty. а если тримы всякие начинать юзать - то надо уж регекспами работать с жёсткой фильтрацией допустимых символов
2moty: пхп автоматически преобразует типы в зависимости от содержимого, имеются в наличии из основных: string, integer, array, boolean, float. === будет проверять на совпадение не только контента, но и типов, т.е. "0" (строка с одной буквой ноль) не будет совпадать с 0 (целое число 0) или 0. (дробное число 0).
З.Ы. на счёт типа 0. сомневаюсь, может обозвать и целым. но в сях это 100% дробное.
Advanced member
Статус: Не в сети Регистрация: 27.02.2007 Откуда: Москва Фото: 64
moty писал(а):
Спасибо! работает!
Работает, но этот код содержит багу... А именно, PHP_SELF надо фильтровать с помощью htmlspecialchars(), иначе существует возможность впихнуть туда примерно такую конструкцию:
2moty: пхп автоматически преобразует типы в зависимости от содержимого, имеются в наличии из основных: string, integer, array, boolean, float. === будет проверять на совпадение не только контента, но и типов, т.е. "0" (строка с одной буквой ноль) не будет совпадать с 0 (целое число 0) или 0. (дробное число 0).
Не совсем понял, например переменная , которая была интегером, и в процессе выполнения стала равной нулю - изменит свой тип на НУЛЛ или останется нулевыи интегером? Т.Е. $var=0;
Тогда $var==NULL это тру, а $var===NULL это ещё тру или уже фолс? А если $var никогда не был назначен то $var===NULL тру? Я, просто, не совсем понимаю, чтои именно полохого произайдёт, если написать if ($_POST['name'] !== "") вместо if ($_POST['name'] != "")
В оригинальном примере вообще другая проверка:
Цитата:
$lahetys=$_POST['submit']; echo $lahetys; if($lahetys=='OK') { весь остальной код...
Я думал что оно будет пускать и нулевые значения и решил модифицировать.
Цитата:
это не баг, а документированная фича причём, имхо, логичная. можешь проверить, заработает ли !=="" с юзернеймом вида 111 ? кмк ругнётся..
Интересно, а решение, которое было-бы тру, если-бы в имени пользователя была любая комбинация(допустим, даже пробел), которую он вводил-бы с клавиатурыб при этом фолс был-бы исключительно если ничего введено не будет - это трим? А если хотим только буквы англ алфавитаб с/без учёта регистра и без спец символов - надо писать специальный фильтрующий/не пропихивающий дальше скрипт?
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
Последний раз редактировалось moty 14.01.2010 9:29, всего редактировалось 1 раз.
Несколько вопросов: 1. Как защищают PHP приложения? "Если мы увидим крякнутый скрипт нашего производства на вашем сайте - мы надерём вам задницу?" 2. Безопасна-ли концепци функций переменных:
По идее очень пытливый пользователь вручную изменив отправляемые данные браузером может запустить любую функцию, которую захочет?
3. Когда создают библиотеки функций - безопасно-ли оставлять файлы библиотек функций в доступном из веба месте?
4. Если сказать доступным языком, результатом функции array_values( ) является возват обрабатываемого массива, ввиде одномерного массива, в котором нафиг убиты индксы из оригинала?
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
Member
Статус: Не в сети Регистрация: 08.07.2006 Откуда: СПБ
moty писал(а):
1. Как защищают PHP приложения? "Если мы увидим крякнутый скрипт нашего производства на вашем сайте - мы надерём вам задницу?"
Zend Guard и тому подобные продукты.
moty писал(а):
По идее очень пытливый пользователь вручную изменив отправляемые данные браузером может запустить любую функцию, которую захочет?
Если отключены глобальные имена - не сможет, и потом, много ли у вас глобальных функций в пространстве имен?
moty писал(а):
3. Когда создают библиотеки функций - безопасно-ли оставлять файлы библиотек функций в доступном из веба месте?
Теоретически, при верно настроенном сервере - безопасно, на практике всегда найдется дырка, позволяющая их прочитать, а это уже угроза. Лучше хранить их, например, на уровень выше, чем public.
moty писал(а):
4. Если сказать доступным языком, результатом функции array_values( ) является возват обрабатываемого массива, ввиде одномерного массива, в котором нафиг убиты индксы из оригинала?
Не использовать кавычки тут - плохо? ЭДИТ: Уже понял - zend studio пишет например: - Use of undefined constant time - assumed 'time - значит плохо. $array=array(now, is, a, time);
$array2=array('now', 'is', 'a', 'time');
2. что делать, если допустим надо применить функцию, напр array_reverse( ) или array_count_values() - которые работают только с одномерными массивами, к массивам, у которых внутри есть другие массивы? Создавать ещё одну переменную в которую выводить оригинальный, отфильтрованный от внутренних массивов array и и считать из неё?
3. допустим мы хотим получить результат 89659569586956*58656556856 но в виде целого числа (5259121641161773049970336) А не ввиде вот этого плавающего: 5.2591216411618E+24 - надо использовать расширение BCmap http://www.php.su/functions/?cat=bc и никак иначе?
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
moty писал(а):
Когда создают библиотеки функций - безопасно-ли оставлять файлы библиотек функций в доступном из веба месте?
В случае если доступен их исходный код (т.е файлы не РНР а например ТХТ или как многие любят INC) то доля опасности присутствует (например если функции сложные и в них могут оказаться дыры) однако если проект изначально "OpenSource" то этого по любому не избежать. В случае если они доступны для исполнения то лучше их прятать (например в отдельную папку закрытую через .htaccess) потому что их вызов (в некоторых редких случаях) может привести к непредсказуемому результату (обычно это не опасно, но есть один шанс на миллион что вылетит ошибка из которой можно будет выудить скрытую информацию)
2. что делать, если допустим надо применить функцию, напр array_reverse( ) или array_count_values() - которые работают только с одномерными массивами, к массивам, у которых внутри есть другие массивы? Создавать ещё одну переменную в которую выводить оригинальный, отфильтрованный от внутренних массивов array и и считать из неё?
в пхп нету многомерных массивов. есть массивы, элементы которых тоже являются массивами, но тем не менее исходные массив вполне себе одномерный. как видно из мануала на функцию array_reverse, никаких телодвижений делать не надо. даже пример есть.
moty писал(а):
3. допустим мы хотим получить результат 89659569586956*58656556856 но в виде целого числа (5259121641161773049970336) А не ввиде вот этого плавающего: 5.2591216411618E+24 - надо использовать расширение BCmap http://www.php.su/functions/?cat=bc и никак иначе?
это не формальности. посмотри примеры из мануала. там один элемент массива - текст, второй - цифра, третий - массив. классическим многомерным массивом это назвать ну никак нельзя. соответственно, и для функций работы с массивами тоже никаких многомерных массивов не существует, только одномерные, в качестве элементов которых может быть что угодно, в т.ч. другие массивы
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
ToSHiC писал(а):
это не формальности. посмотри примеры из мануала. там один элемент массива - текст, второй - цифра, третий - массив. классическим многомерным массивом это назвать ну никак нельзя
классическим никак, но работать с таковым почти как с многомерным вполне можно...
Допустим у меня есть $newvariablename="newvariable"; Как мне создать переменную, имя которой будет равно значению $newvariablename т.е. $newvariable? Есть какая-нибудь специальная функция для этого?
_________________ Библиотеки Windows - Мы заставим ваши папки тормозить!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения