addslashes и stripslashes

fixxxer

К.О.
Партнер клуба
addslashes и stripslashes

Вещи очевидные, и упоминать, вроде бы, об этом не стоит - но уже который раз встречаю упорное непонимание этого вопроса отдельными товарищами; более того, "делать неправильно" советует всем известная "красная книга". С цитаты из нее и начнем (извиняйте, что на игнлише, русского варианта не имею). Честно говоря, было неприятно увидеть в, вроде бы, неплохо неписанной книге такие глупости.

Formatting Strings for Storage: AddSlashes() and StripSlashes()

[...]

Certain characters are perfectly valid as part of a string but can cause problems, particularly when inserting data into a database because the database could interpret these characters as control characters.The problematic ones are quotes (single and double), backslashes (\), and the NUL character.

We need to find a way of marking or escaping these characters so that databases such as MySQL can understand that we meant a literal special character rather than a control sequence.To escape these characters, add a backslash in front of them.
[...]
PHP provides two functions specifically designed for escaping characters. Before you write any strings into a database, you should reformat them with AddSlashes(), for example:

$feedback = AddSlashes($feedback);

Like many of the other string functions, AddSlashes() takes a string as parameter and returns the reformatted string.

When you use AddSlashes(), the string will be stored in the database with the slashes in it. (выделил fixxxer). When you retrieve the string, you will need to remember to take the slashes out. You can do this using the StripSlashes() function:

$feedback = StripSlashes($feedback);

Возможно, с легкой руки авторов этой книги, а возможно, из-за псевдологичеости этих операций (добавил слэши-убрал слэши), такой подход часто можно встретить. И, причем, этот подход, в принципе, работает (при поиске слэши тоже добавляются дважды...) До поры до времени - пока не изменится настройка magic quotes, или не осуществится переезд на другой сервер.

Думаю, подробное разъяснение неправильности такого подхода нужно вынести в faq. Крупными буквами.
Как надо делать правильно, там уже указано.
 

confguru

ExAdmin
Команда форума
fixxxer

Ну так давно пора присоединятся к PHPClub FAQ Team
если религия не запрещает :)
 

Фанат

oncle terrible
Команда форума
Думаю, подробное разъяснение неправильности такого подхода нужно вынести в faq. Крупными буквами.
Если я тебя правильно понял, ты предлагаешь курсив поменять на болд? или фонт сайз увеличить?
 

fixxxer

К.О.
Партнер клуба
;) Нет, я предлагаю особо заострить внимание ещё и на том, почему это неверно, и к каким последствиям это может привести.
Одному, в принципе, неглупому человеку пришлось это объяснять "на пальцах" и с примерами, в течение 10 минут - ибо он рассказывал, что у него все ищется правильно, и даже если слэши введены, и т.д. И еще книжкой этой самой тыкал. ;)
И, похоже, это самая распространенная ошибка при работе с бд в php.
 

Фанат

oncle terrible
Команда форума
ну, не знаю.
воспользуйся советом админа и присоединись к фак тим и напиши так, как тебе хочется.
 

fixxxer

К.О.
Партнер клуба
Да в принципе наверное нормально там написано. Считайте топик криком души после того самого упомянутого выше разговора про stripslashes(). ;) Вообще проблема то не в факах, а в том, что их не читают.
 
Сверху