[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Заблокировать Волшебные кавычки один раз
WhiteKnight
Воз можно ли только в одной, двух выводах отключить волшебные кавычки ?
Дело в том что у меня они по скрипту должны быть включены и норм. но когда я вот добавляю данные , я их проверяю на пустые поля или нет.

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

Можно ли что бы на вот эту форму волшебные кавычки не действовали, может есть какая то функция ?


<textarea rows="5" cols="50" name="text"><?php echo $description; ?></textarea>




Спустя 28 минут, 51 секунда (5.01.2010 - 00:49) WhiteKnight написал(а):
решил проблему.. отключил Волшебные кавычки и перегрузил наконец этот долбаный сервак который почему то не всегда принимает изменения в php.ini


Спустя 13 минут, 28 секунд (5.01.2010 - 01:02) glock18 написал(а):
уверен, сейчас получишь кучу sql-инжектов... smile.gif

Спустя 1 час, 17 минут, 12 секунд (5.01.2010 - 02:19) WhiteKnight написал(а):
glock18, ну так есть же способ работать без магических кавычек и не один раз его видел, правда не вспомню где. Если знаешь скажи...
Иначе мне надо тогда (с включеными) убрать тот баг который оставляет включенные кавычки

Спустя 1 час, 18 минут, 48 секунд (5.01.2010 - 03:38) ApuktaChehov написал(а):
Не надо трогать магические кавычки.
Нужно сделать так, что бы скрипт работал в любом случае, включены они или нет.

mysql_real_escape_string(); - так же сама как и волшебные кавычки вставляет слеш.
stripslashes(); - возвращает строку с вырезанными слэшами

Теперь можно проверить:
если get_magic_quotes_gpc() работает, тогда мы вырезаем слеши(stripslashes()) которые вставились автоматом.
А затем экранируем кавычки с помощью mysql_real_escape_string().

А если get_magic_quotes_gpc() не включен, то мы не используем stripslashes(), а просто экранируем кавычки с помощью mysql_real_escape_string().
if (get_magic_quotes_gpc())
{
$data = stripslashes($data); // вырезаем слеши вставленные get_magic_quotes_gpc
}
$data = mysql_real_escape_string($data); // экранируем кавычки


Кавычки мы экранируем в любом случае, но что бы не получилось двойного экрана, когда магические кавычки вставляют слеши и mysql_real_escape_strin так же вставляет, мы должны проверить статус get_magic_quotes_gpc() и если она работает, то врезать лишнее...
Вроде все правильно, если что то не так поправьте.

Спустя 9 часов, 42 минуты, 4 секунды (5.01.2010 - 13:20) VolCh написал(а):
Цитата
mysql_real_escape_string(); - так же сама как и волшебные кавычки вставляет слеш.

Алгоритм работы mysql_real_escape_string и magic_quotes вообще говоря не совпадает. magic_quotes работает как addslashes

Спустя 3 минуты, 24 секунды (5.01.2010 - 13:24) Gabriel написал(а):
ApuktaChehov
вставляет на момент работы с данными написано английским по какомутотам на php.net
Цитата
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.

Спустя 53 минуты, 31 секунда (5.01.2010 - 14:17) ApuktaChehov написал(а):
Цитата (VolCh @ 5.01.2010 - 13:20)
Алгоритм работы mysql_real_escape_string и magic_quotes вообще говоря не совпадает. magic_quotes работает как addslashes

А я и не говорил, что у них алгоритмы совпадают, я сказал что итог один - вставляются слешы. Может я некорректно выразился, за что извиняюсь.

Gabriel я вообще не понял о чем Вы.

Спустя 10 минут, 3 секунды (5.01.2010 - 14:27) glock18 написал(а):
Результат может быть разным в некоторых мультибайтных кодировках smile.gif Если бы результат был один и тот же, то смысла убирать слэши не было бы (убирать и добавлять снова - ненормально).

Спустя 8 минут, 26 секунд (5.01.2010 - 14:36) VolCh написал(а):
ApuktaChehov, наверное некорректно smile.gif


glock18 даже в ASCII результат может быть разным wink.gif
addslashes (и magic_quotes) экранируют 4 символа, mysql_real_escape_string - 8 (кажется, в общем больше).

Спустя 5 часов, 36 минут, 36 секунд (5.01.2010 - 20:12) WhiteKnight написал(а):
Цитата (glock18 @ 5.01.2010 - 11:27)
Результат может быть разным в некоторых мультибайтных кодировках smile.gif Если бы результат был один и тот же, то смысла убирать слэши не было бы (убирать и добавлять снова - ненормально).

И какой выход ?
Я реально где то видел, возможно даже тут, что можно нормально работать с БД даже с выключеными кавычками. Надо правильно просто обращаться с БД (добавлять,читать и записывать), разве нет ?

Спустя 22 минуты, 32 секунды (5.01.2010 - 20:35) glock18 написал(а):
да, тебе уже написали выше как именно

Спустя 55 минут, 48 секунд (5.01.2010 - 21:30) WhiteKnight написал(а):
Такс, наверное не туда ушли
я же в начале написал, что проблема пока такая , при включенных Кавычках

в ФОРМЕ добавления ставятся слеши, и вот сколько раз пользователь не правильно заполнил поля вот во столько раз он изуродовал свой текст этими слешами, и пока на этом этапе все равно что там в БД уйдет, так я и пользователь видет это ужас у себя в форме ввода..

информация в поле воода попадает из $_POST['description'] она пока еще в воздухе и в БД не уйдет пока правильно все не заполнит пользователь

<textarea rows="5" cols="50" name="text"><?php echo $description; ?></textarea>


вот так
<?php echo stripslashes($description); ?>

проблема не решается

П.С
если магические кавычки включены то в БД я не добавляю так
$description = mysql_real_escape_string($description);

но у меня проблема до того как надо добавить данные в БД

Спустя 38 минут, 12 секунд (5.01.2010 - 22:09) glock18 написал(а):
WhiteKnight
прочитай внимательно что написал ApuktaChehov

Спустя 27 минут, 34 секунды (5.01.2010 - 22:36) WhiteKnight написал(а):
glock18
прочитал. Скажи в каком месте я начил тупить (новый год все таки)

Цитата
Не надо трогать магические кавычки.

не трогаю, они включены.

Это

Цитата
mysql_real_escape_string(); - так же сама как и волшебные кавычки вставляет слеш.
stripslashes(); - возвращает строку с вырезанными слэшами


и это

Цитата
if (get_magic_quotes_gpc())
{
      $data = stripslashes($data); // вырезаем слеши вставленные get_magic_quotes_gpc
}
$data =  mysql_real_escape_string($data); // экранируем кавычки


для того что бы данные вставлять в БД с вкл. и выкл. кавычками да ?
ну раз там упоминается mysql значит для БД ? логично.

ситуация следующая.

Есть форма для добавления контента на сайт
поле для ввода названия <input>
поле для ввода текста <textarea>
и кнопка подтверждения <input>

так вот если пользователь не заполнил какое либо поле то страничка перегружается и надо пользователю заново заполнять все поля.

Я сделал что бы данные не удялись при перезагрузке страницы

<textarea rows="5" cols="50" name="text"><?php echo $description; ?></textarea>
но при перезагрузки страницы добавляются слеши (не при добавлнени в БД) к кавычкам в тексте.

Как этого избежать ?




Спустя 7 минут, 12 секунд (5.01.2010 - 22:43) ApuktaChehov написал(а):
get_magic_quotes_gpc - последние три символа обозначают: массивы GET, POST, COOKIE.

Это значит, что при попадании кавычек в эти массивы они все автоматом экранируются, т.е. вставляются слешы. Если ты не используешь, и не собираешь использовать БД, тогда либо отключи волшебные кавычки, либо сделай так:

<textarea rows="5" cols="50" name="text"><?php echo  stripslashes($description); ?></textarea>


Но стоит учесть что функция stripslashes() удаляет все слешы, двойные слешы становятся одинарными.

Спустя 3 минуты, 6 секунд (5.01.2010 - 22:47) WhiteKnight написал(а):
я уже писал вот так
<?php echo stripslashes($description); ?>

проблема не решается

я в текстовом поле вижу такое

\\\\\\\\\\\\\\\'d\\\\\\\\\\\\\\\'sfsdf

Спустя 54 секунды (5.01.2010 - 22:47) twin написал(а):
Цитата
Как этого избежать ?

Убить их сразу и забыть как страшный сон:
    function stripslashesDeep($data)    
{
if(is_array($data))
$data = array_map("stripslashesDeep", $data);
else
$data = stripslashes($data);
return $data;
}

if(get_magic_quotes_gpc())
{
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
$_COOKIE = stripslashesDeep($_COOKIE);
}

Спустя 1 минута, 54 секунды (5.01.2010 - 22:49) ApuktaChehov написал(а):
А почему их так много?

Спустя 13 минут, 40 секунд (5.01.2010 - 23:03) WhiteKnight написал(а):
вставил что бы проверить, хотя *о*ой чувствую что не туда... но вот

<textarea rows="5" cols="50" name="description">
<?php
function
stripslashesDeep($data)
{
if(is_array($data))
$data = array_map("stripslashesDeep", $data);
else
$data = stripslashes($data);
return $data;
}

if(get_magic_quotes_gpc())
{
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
$_COOKIE = stripslashesDeep($_COOKIE);
}
echo $description;
?></textarea>


результат тотже

Спустя 20 минут, 12 секунд (5.01.2010 - 23:23) WhiteKnight написал(а):
все решил проблему.. wink.gif
новый год и программирование не совместимы ph34r.gif

Спустя 9 часов, 5 минут, 55 секунд (6.01.2010 - 08:29) Alex VoDevil написал(а):
На меня сейчас накинутся сторонники секурности... Поймите меня правильно, я тоже за безопасный кодинг smile.gif) Но если бошка на плечах - нужно отрубить волшебные кавычки в .htaccess и эскэйпировать данные перед запросами в БД. Ну а если уж человек сам себе не верит и на свою внимательность при написании обработки данных не может расчитывать - это очень плохо smile.gif

Спустя 34 минуты, 39 секунд (6.01.2010 - 09:04) twin написал(а):
Ты рассуждаешь - после нас хоть потоп. Ну отрубишь ты их в .htaccess, а админ с бодуняки 1-го января случайно врубит. Или хозяин ресурса задумает перенести на другой хостинг, а обрубить забудет.
Скрипт должен работать одинаково, не смотря на внешние настройки. Это и есть скьюрность.

Спустя 1 час, 32 минуты, 3 секунды (6.01.2010 - 10:36) Alex VoDevil написал(а):
Ну это ж потеря в производительности ) Я наверно просто привык писать проекты большие и тяженые на своих серверах или как минимум VDS, вот с этой колокольни и рассуждаю. Админа такого с его бодунякой гнать надо, а при переезде быть внимательными.

Спустя 58 минут, 46 секунд (6.01.2010 - 11:35) twin написал(а):
Да какая там потеря... Одна функция get_magic_quotes_gpc() для подстраховеи. За то спокойный, размеренный сон.
У меня тоже проекты на дедиках, но я админам не доверяю. И как выяснилось - не зря.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.