Дело в том что у меня они по скрипту должны быть включены и норм. но когда я вот добавляю данные , я их проверяю на пустые поля или нет.
Есть два поля. если одно поле заполнено а другое пустой и в первом были ' и " то как и должно быть сообщение мол "не все поля заполнены", но проблема в том что возле таких вот символов ставятся слеши по всем тексту в форме добавления.
Можно ли что бы на вот эту форму волшебные кавычки не действовали, может есть какая то функция ?
<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-инжектов...
Спустя 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().
Кавычки мы экранируем в любом случае, но что бы не получилось двойного экрана, когда магические кавычки вставляют слеши и mysql_real_escape_strin так же вставляет, мы должны проверить статус get_magic_quotes_gpc() и если она работает, то врезать лишнее...
Вроде все правильно, если что то не так поправьте.
Нужно сделать так, что бы скрипт работал в любом случае, включены они или нет.
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
вставляет на момент работы с данными написано английским по какомутотам на 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 написал(а):
Результат может быть разным в некоторых мультибайтных кодировках Если бы результат был один и тот же, то смысла убирать слэши не было бы (убирать и добавлять снова - ненормально).
Спустя 8 минут, 26 секунд (5.01.2010 - 14:36) VolCh написал(а):
ApuktaChehov, наверное некорректно
glock18 даже в ASCII результат может быть разным
addslashes (и magic_quotes) экранируют 4 символа, mysql_real_escape_string - 8 (кажется, в общем больше).
glock18 даже в ASCII результат может быть разным
addslashes (и magic_quotes) экранируют 4 символа, mysql_real_escape_string - 8 (кажется, в общем больше).
Спустя 5 часов, 36 минут, 36 секунд (5.01.2010 - 20:12) WhiteKnight написал(а):
Цитата (glock18 @ 5.01.2010 - 11:27) |
Результат может быть разным в некоторых мультибайтных кодировках Если бы результат был один и тот же, то смысла убирать слэши не было бы (убирать и добавлять снова - ненормально). |
И какой выход ?
Я реально где то видел, возможно даже тут, что можно нормально работать с БД даже с выключеными кавычками. Надо правильно просто обращаться с БД (добавлять,читать и записывать), разве нет ?
Спустя 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);
но у меня проблема до того как надо добавить данные в БД
я же в начале написал, что проблема пока такая , при включенных Кавычках
в ФОРМЕ добавления ставятся слеши, и вот сколько раз пользователь не правильно заполнил поля вот во столько раз он изуродовал свой текст этими слешами, и пока на этом этапе все равно что там в БД уйдет, так я и пользователь видет это ужас у себя в форме ввода..
информация в поле воода попадает из $_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
прочитай внимательно что написал 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.
Это значит, что при попадании кавычек в эти массивы они все автоматом экранируются, т.е. вставляются слешы. Если ты не используешь, и не собираешь использовать БД, тогда либо отключи волшебные кавычки, либо сделай так:
Но стоит учесть что функция stripslashes() удаляет все слешы, двойные слешы становятся одинарными.
Это значит, что при попадании кавычек в эти массивы они все автоматом экранируются, т.е. вставляются слешы. Если ты не используешь, и не собираешь использовать БД, тогда либо отключи волшебные кавычки, либо сделай так:
<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
<?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 написал(а):
все решил проблему..
новый год и программирование не совместимы
новый год и программирование не совместимы
Спустя 9 часов, 5 минут, 55 секунд (6.01.2010 - 08:29) Alex VoDevil написал(а):
На меня сейчас накинутся сторонники секурности... Поймите меня правильно, я тоже за безопасный кодинг ) Но если бошка на плечах - нужно отрубить волшебные кавычки в .htaccess и эскэйпировать данные перед запросами в БД. Ну а если уж человек сам себе не верит и на свою внимательность при написании обработки данных не может расчитывать - это очень плохо
Спустя 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() для подстраховеи. За то спокойный, размеренный сон.
У меня тоже проекты на дедиках, но я админам не доверяю. И как выяснилось - не зря.
У меня тоже проекты на дедиках, но я админам не доверяю. И как выяснилось - не зря.