+147.2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
function post($key)
{
return mysql_escape_string($_POST[$key]);
}
$sql->Query("SELECT `t1`.*, `t2`.*
FROM `x_local_users` AS `t1`, `x_privs` AS `t2`
WHERE `t1`.`id`=`t2`.`manager_id`
AND `t1`.`login`='".post('userid')."'
AND `t1`.`password`='".md5(post('passw'))."' LIMIT 1");
Где то когда то здесь видел кусок "говнокода", в котором для получения значения глобальных переменных использовались функции.
Решил на деле испытать такой способ. Очень удобно оказалось использовать, особенно в запросах :)
Единственное, что не удобно, так это когда в $_SESSION хранится двухмерный массив, и из него вытащить надо чонить =)
Запостил: nolka4,
04 Декабря 2009
Abductio 04.12.2009 10:03 # 0
guest 04.12.2009 10:18 # 0
Примеры:
gpc('Gtest') - возвращает $_GET['test'] или NULL, если такая переменная не передана;
gpc('Pmessage', '') - $_POST['message'] или пустая строка (аналогично);
gpc('Ppost_id', 0) - $_POST['post_id'], принудительно приведённый к целому типу, или 0.
> А чем $_POST не устраивает?
Тем, что использование таких вот функций-обёрток упрощает работу с $_POST, позволяя не писать длинных строк типа
Abductio 04.12.2009 10:48 # 0
nolka4 04.12.2009 11:56 # 0
Abductio 04.12.2009 12:13 # 0
nolka4 04.12.2009 12:18 # 0
Abductio 04.12.2009 12:40 # 0
guest 04.12.2009 13:37 # +1
И да, пора уже высказаться насчёт собственно говнокода. Автору следует задуматься о следующих вещах:
1) функция mysql_escape_string() is deprecated и в скором времени будет выпилена из PHP. Авторы PHP рекомендуют mysql_real_escape_string() в качестве более надёжной замены.
2) называть функцию приёма данных из формы И их экранирования просто post - это действительно не лучшая идея. Кто-то чужой, кто положится на смысл названия, может долго удивляться, почему у него вылезают лишние слэши, пока не залезет в код и не узрит тело функции.
3) а вообще, как отметили выше, писать экранирующую обёртку действительно на хрен не упало, потому что есть плейсхолдеры. Так что пункт 1 тут лишний - при нормальном написании об этих эскейп стрингах думать вообще не приходится, это всё забота библиотеки.
nolka4 04.12.2009 15:14 # 0
guest 04.12.2009 15:19 # 0
http://www.phpfaq.ru/slashes
Прочитай раздел "подготовленные выражения".
cheef 07.12.2009 13:34 # 0
guest 07.12.2009 13:41 # 0
guest 04.12.2009 14:36 # −1
залогинился бы только чтоб заминусовать аффтара кода и аффтара комента.
guest 04.12.2009 14:48 # +3
guest 04.12.2009 18:58 # 0
- а если самому нужно положить в массив какую-нибудь переменную ?? - костыль
не пробовали реализовать в виде статического класса? и нормально реализовать необходимые возможности в нём.
ps. если эти примеры взяты из книжки, то к ней должен прилогаться пузырёк с йадом
guest 04.12.2009 22:40 # 0
Если ты про говнокод, то 100% прав. А вон то gpc вообще немножеко не о том, это вещь просто для доставания переменных из формы, а не подстановки в запрос.
- а если самому нужно положить в массив какую-нибудь переменную ?? - костыль
В какой массив?
не пробовали реализовать в виде статического класса? и нормально реализовать необходимые возможности в нём.
Не буду разводить срачь между фанатами и противниками ООП и промолчу.
nolka4 05.12.2009 12:09 # 0
guest 05.12.2009 16:12 # 0
guest 04.12.2009 17:54 # +2
[code language=php]md5(post('passw'))[/code]
- в этом случае экранировать не надо было
nolka4 05.12.2009 19:13 # −1
nolka4 05.12.2009 19:14 # 0
guest 05.12.2009 19:52 # +2
nolka4 07.12.2009 15:15 # 0
guest 07.12.2009 18:30 # 0
nolka4 07.12.2009 19:52 # 0
guest 07.12.2009 20:26 # 0
> Как правило, SALT - это строка из 4...8 случайных символов, которая <...> сохраняется вместе с финальным хэшем (как, к примеру, сделано в MD5 (Unix)-хэшах)
Обрати внимание на подчёркнутое. Unix crypt() действительно автоматически просаливает хэш и прикрепляет соль к солёному хэшу. Но для MD5 это неверно! MD5 даёт однозначное соответствие между строкой и её хэшем, поэтому просаливать MD5-хэши надо самому. Навскидку:
В функцию md5() в данном случае подаётся исходный пароль, переёбанный с солью (конкретный способ переёбывания не важен - главное сделать и потом уже не трогать ничего). И да, на выходе md5salt() получается строка из hex-символов, что, опять же, безопасно для подстановки в запрос.
cheef 07.12.2009 13:29 # 0
cheef 07.12.2009 13:30 # 0
nolka4 07.12.2009 15:15 # 0
guest 07.12.2009 15:53 # 0
кто там не работает на прямую с БД ? ОРМ используешь? флаг тебе в руки, построй-ка запрос с 3-мя джоинами в котором один будет на подселект с джоином
и потом попробуй прочитать полученный код без взрыва мозга
экранировать надо перед вставкой в базу или перед выводом в браузер (если данные не обязательно сувать в базу) . а всякие айдишники надо приводить к типу, блять! $q="UPDATE users SET note = 'loh' WHERE user_id = ".(int)$_GET['id'];
идея ясна?
жраьт говно суки! идите нахуй или на форумы и учитесь. за вами потом "проекты" ваши доделывать - ёбнуться можно
guest 07.12.2009 18:29 # 0
nolka4 07.12.2009 19:50 # 0
guest 07.12.2009 20:31 # 0
nolka4 08.12.2009 07:57 # 0
на других проектах я такое еще не использовал. Если и буду использовать дальше - усовершенствую эти функции
Oleg_quadro 08.12.2009 02:20 # 0
Максимальный integer в PHP может быть меньше максимального интежера Базы (например, в Оракле максимально число это 38 девяток, в Мускуле там тоже нехило)
Так что правильней выходит проверять регуляркой параметры, что там содержатся одни цифры. /^\d+$/
guest 08.12.2009 08:34 # 0
Oleg_quadro 09.12.2009 17:54 # 0