правильно обработать полученные данные от MySQL

_Leonchik_

Новичок
правильно обработать полученные данные от MySQL

Есть база данных, в ней некий текст.
(наверняка не раз уже обсуждалось, но и понятия не имею что именно искать по форуму.)
При изъятии от базы - данные, они приходят в том виде в каком есть, т.е. если там \"test\", то и при получении так и есть, а надо от слэша избавится, т.к. он туда приписался при внесении данных.
а также скажите пожалуйста при внесении данных как приписать слэш к кавычкам, или др. символам?
в какую сторону копать конкретно? подскажите плиз.

-~{}~ 10.03.06 17:45:

да. забыл сказать что использую Smarty+php
 

Фанат

oncle terrible
Команда форума
а надо от слэша избавится
ЭТОТ слэш не надо добавлять ещё при записи в базу.
тогда и убирать его не придётся.
внесении данных как приписать слэш к кавычкам, или др. символам?
PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.
сначала читать это, потом уже писать ответ сюда.

-~{}~ 10.03.06 17:53:

Если нетрудно, мне было бы интересно - по каким признакам вопрос был помещён в форум по Смарти
 

_Leonchik_

Новичок
Если нетрудно, мне было бы интересно - по каким признакам вопрос был помещён в форум по Смарти
1. я использую Смарти
2. на форуме есть блог для Смарти
3. подоздревал что это он сам слэши гонит в базу (после прочтения ФАКа понял, что я ошибался на счет этого.)
4. ну надо же было куданить написать?:rolleyes:
 

Фанат

oncle terrible
Команда форума
подоздревал что это он сам слэши гонит в базу
очень плохо.
ты использвешь смарти, но не понимаешь - что это такое и зачем оно тебе.
Смарти по определению своему НИКАКОГО отношения к базе данных иметь не может
 

_Leonchik_

Новичок
получилось так:
set_magic_quotes_runtime(0); - сунул в файл, кот. всегда вызывается первым
Ну и выдернул с Вашего ФАКа код и поместил в тот же файл:
if (get_magic_quotes_gpc()) {
strips($_GET);
strips($_POST);
strips($_COOKIE);
strips($_REQUEST);
if (isset($_SERVER['PHP_AUTH_USER'])) strips($_SERVER['PHP_AUTH_USER']);
if (isset($_SERVER['PHP_AUTH_PW'])) strips($_SERVER['PHP_AUTH_PW']);
}

function strips(&$el) {
if (is_array($el))
foreach($el as $k=>$v)
strips($el[$k]);
else $el = stripslashes($el);
}
Итог: в базу все лезит как надо. и соотвественно обратно.
Думаю что если даже у хостера и будет добавление, то я его отменяю, а если не прокатит, то есть Ваша функция, кот. все сделает на ура.
Сэнкс!

-~{}~ 10.03.06 18:36:

мда, со Смарти я прогнал когда писал(краснея и бледнея). но а всеже, Смарти же сделан на пхп (видел класс Smarty.php), или я снова туплю?
 

Фанат

oncle terrible
Команда форума
Итог: в базу все лезит как надо
стоп.
ты написал только, как избавился.
А запрос-то составляешь нормально?

но а всеже, Смарти же сделан на пхп (видел класс Smarty.php),
А какая разница, на чём сделан смарти?
ну. допустим, на пхп. и какое он тогда будет иметь отношение к БД? Постарайся ответить развёрнуто.
 

_Leonchik_

Новичок
Автор оригинала: Фанат
стоп.
ты написал только, как избавился.
А запрос-то составляешь нормально?
запрос на получения данных от пользователя - ВЫ про это?
или запрос данных от базы?

если первое - то думаю правильно, в том же главном файле:
function request($param) {
if (isset($_POST[$param])) {
return $_POST[$param];
} else {
if (isset($_GET[$param])) {
return $_GET[$param];
}
}
return null;
}
а уже на нужной мне странице вызываю так: request("edit"), например по буттону.

внесение данных базу с соблюдением всех(может и почти всех) правил, т.е строки в кавычках, и т.д.

а на счет второго: еще не доконца понял что и как надо для избавления от уже существующих слэшей.
Разбираюсь.

Автор оригинала: Фанат
А какая разница, на чём сделан смарти?
ну. допустим, на пхп. и какое он тогда будет иметь отношение к БД? Постарайся ответить развёрнуто.
мда, загнали Вы меня в угол с этим Смарти.
Я на пхп всего лишь месяца 2 пишу, и много еще не знаю. Все же когдато начинали. многое сделал неправильно, щас переделываю.:rolleyes:

-~{}~ 10.03.06 19:02:

век живи, век учись
 

Фанат

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

-~{}~ 10.03.06 19:09:

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

_Leonchik_

Новичок
смарти - это система шаблонизации. то есть, система отображения данных. - это я понимаю.

Спасибо за советы, помошь.

-~{}~ 10.03.06 19:11:

думаю что топик пока можно закрыть. буду еще сам разбиратся, благо есть ФАК. и все ему подобное.

-~{}~ 10.03.06 19:13:

что имеется в виду под "и т.д." - типы вносимых данных с преобразовыванием их к типизированному виду. Я это лишь имел в виду когда писал "и т.д."
а вот про как избаватся от уже сущ. слэшей - буду еще читать.
 

Фанат

oncle terrible
Команда форума
что имеется в виду под "и т.д." - типы вносимых данных с преобразовыванием их к типизированному виду.
типизация ведь поможет только для чисел. А со строками ты что делаешь?
а с управляющими элементами запроса?

думаю что топик пока можно закрыть. буду еще сам разбиратся, благо есть ФАК. и все ему подобное.
Зачем закрывать? Почему не написать, как ты понял? А если ты понял неправильно и будешь делать неправильно?

ФАК есть, но его тоже люди писали. Причём - не Лев Толстой.
если в нём что-то непонятно, то можно об этом сказать.
тогда во-первых, тебе здесь объяснят, а во-вторых, в факе перепишут более понятно.
Так ты поможешь сразу и себе и другим =)
 

_Leonchik_

Новичок
Автор оригинала: Фанат
типизация ведь поможет только для чисел. А со строками ты что делаешь?
со строками впринципе больше ничего, кроме как уже с set_magic_quotes_runtime(0); и stripslashes($el);. Стоп, а разве еще можно что сделать со строками? кроме как экранизации спец. символов что можно еще придумать? натолкни на мысль.
а с управляющими элементами запроса?
типа LIKE, LIMIT и им подобным?(если я правильно Вас понял), также строки в кавычках, целочисленный тип привожу к целому.

Зачем закрывать? Почему не написать, как ты понял? А если ты понял неправильно и будешь делать неправильно?
Радует что Вы отнеслись с пониманием.;)

ФАК есть, но его тоже люди писали. Причём - не Лев Толстой. ---Это точно!

если в нём что-то непонятно, то можно об этом сказать. -- мало примеров, особенно там где они нужны (именно о том, о чем речь в ФАКе, а не общее с приведением сылки на php.net)

тогда во-первых, тебе здесь объяснят, а во-вторых, в факе перепишут более понятно - описано понятно/доступно, но повторюсь что мало примеров. Начинающему девелоперу без никуда.
Сэнкс.
 

Фанат

oncle terrible
Команда форума
Скажи честно ты этот фак, бедный примерами, читал?
 

_Leonchik_

Новичок
привет Фанат, походу мы с тобой тут одни(никто к беседе не подключается).
Да, действительно мало примеров(ИМХО). по сравнению с данной статьёй (например) на этом сайте: h**p://dklab.ru/lib/Database_Placeholder/
хотелось бы видеть Ваш ФАК таким.
Но с др. стороны, может это мне примеров маловато, а др. хватает? В конечном счете, все равно решать модераторам данного сайта (клуба), пополнять примерами ФАК, или отставить как есть.
ну мы тут и на флудили, блин.
 

Фанат

oncle terrible
Команда форума
я не о примерах.
мне интересно, где ты там прочитал, что перед помещением в базу строки надо обрабатывать через stripslashes, и где ты прочитал, что команды LIKE и LIMIT следует заключать в кавычки.
 

_Leonchik_

Новичок
мне интересно, где ты там прочитал, что перед помещением в базу строки надо обрабатывать через stripslashes
Для данных, полученных от пользователя, всё гораздо сложнее. Для этого кода нам потребуется две функции:
1.проверить, добавил ли PHP, можно с помощью функции get_magic_quotes_gpc.
2.удаляет слеши функция stripslashes.

и где ты прочитал, что команды LIKE и LIMIT следует заключать в кавычки.
Сами команды LIKE и LIMIT мы не можем обрамлять кавычками, я же писал что:
типа LIKE, LIMIT и им подобным?(если я правильно Вас понял), также строки в кавычках, целочисленный тип привожу к целому.
Говорилось про строки для LIKE надо обрамлять в кавычки, а
целочисленные значения для LIMITа приводить к их типу
Цитата из ФАКа:
приведите их принудительно к целочисленному типу, с помощью функции intval()
Запарился, перечитал снова почти весь ФАК(повторение - мать учения).

-~{}~ 11.03.06 15:08:

Поэтому в управляющих элементах просто запрещается использовать пользовательский ввод. Если вам надо указать таблицу, в которой производится поиск - занесите заранее её имя в массив и берите из него.
А вот этому правилу я точно не везде следовал.
а что это мне даст, и чего не позволит челу, кот. будет хакать мой сайт?
 

Фанат

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

_Leonchik_

Новичок
Автор оригинала: Фанат
это относится к данным, которые мы получаем от пользователя.
а я тебя спросил о данных, которые идут в базу.
А разве это не одно и тоже? мы получили от пользователя, и сунули в базу.
Кому нужны данные кот. не сохраняются? (кроме тех кот. явл. указателямя для обработки инфы - теже радиобатоны, чек боксы, кот. значения кот. нет смысла хранить в базе, за иключением наприме сохранения таких данных как 'сохранять - да (тогда в каком виде), нет(досвидания). и т.д.)
Видимо моя твоя не понимать о чем речь.
дай конкретный пример, а я разжую как я это вижу.
 

Фанат

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

избавляться от лишних слешей, как написано в факе, надо ВСЕГДА .
и к базе это никакого отношения не имеет.

а что надо длелать с данными, которые идут в базу (а они тоже не обязательно от пользователя - они могут быть из другой базы например или из файла) - в факе написано тоже.
 

_Leonchik_

Новичок
ну Вы как Фанат глобально мыслили. а я как молодой - узко(имел ввиду только про базу)
избавляться от лишних слешей, как написано в факе, надо ВСЕГДА. ВСЕГДА так и буду делать!
 

Фанат

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

вот скажи, как ты обрабатываешь данные перед помещением их в базу.
За всё время разговора ты ни разу не написал, как это делать правильно.
ия не знаю - то ли от того, что так и не прочёл это в факе, то ли просто считаешь само собой разумеющимся.
 
Сверху