Строка, содержащая двойные кавычки, вставлена ​​в БД неполно - PullRequest
2 голосов
/ 15 сентября 2010

Updated Текстовое поле, указанное в форме, принимает вводимые пользователем данные в виде строк

Строка, содержащая двойные кавычки, вставляется в БД неполно.

Iвставьте строку в текстовую область как

"Не беспокойтесь слишком о разметке / дизайне / размере текста, мы часто будем" оживлять "(то есть полужирный, курсив, интервал) ваш баннер длялучший внешний вид.

И когда я вставил строку в БД, строка заканчивается на

Не слишком беспокоиться о разметке / дизайне / размере текста,мы часто будем

и вставляться частично .. Что я должен сделать, чтобы разрешить вставку всех одинарных и двойных кавычек?

РЕДАКТИРОВАТЬ ПО ЗАПРОСУ

Ниже приведен запрос, который я использую для вставки в базу данных с помощью php

"вставить в products_description (products_id, products_name, products_logo_name1, products_logo_name2, products_logo_name3, products_description) значения ('". (int) $ products_id."," banner_ ".$ products_id."','". $ _ POST ['logoimage1']. "','". $ _ POST ['logoimage2']. "','". $ _ POST ['logoimage3']. "','" .Mysql_real_escape_string ($ _POST ['description']). "')"

Здесь mysql_real_escape_string ($ _ POST [' description ']) не экранирует двойные кавычки и, следовательно, усекает при вставке, что должно быть сделано?

Ответы [ 5 ]

5 голосов
/ 15 сентября 2010

Избегайте двойных кавычек внутри строки, например:

$theString = "Hello, i wonder what all these \"quotes\" are doing in here...";

Обратная косая черта скажет компилятору игнорировать «значение» следующей двойной кавычки и обрабатывать ее как обычный символ (это то, что мы называем «Побег»).

Также проверьте mysql_real_escape_string() при работе с пользовательским вводом (это автоматически исключит все опасные элементы в строках для использования в базе данных mySQL).

3 голосов
/ 15 сентября 2010

LOL
не прочитал весь вопрос, но я уверен, что знаю ответ

все правильно вставляется в базу данных, затем восстанавливается, а затем переходит в значение поля формы HTML ... ; -)

Ну, серьезно.
Вы должны следовать вашим данным шаг за шагом.
В вашем приложении есть какой-то злой код, который порождает злые вещи.
Вы должны следить за потоком данных и проверять, на каком этапе он портится
Просто распечатайте свои данные на этих шагах:

  • после получения данных формы
  • перед вставкой в ​​базу данных
  • после извлечения из базы данных
  • перед печатью обратно в форму

Это ваша общая ошибка: вы воспринимаете многоступенчатый процесс как один шаг.
Вы смотрите, как ваша строка вставляется в текстовую область, и в следующий раз вы видите ее в этой текстовой области. И вы думаете это проблема с базой данных. Хотя вы не можете быть в этом уверены - есть много шагов, где база данных не задействована. Следите за тем, чтобы ваше приложение было не сплошным блоком, а многоступенчатым процессом.

0 голосов
/ 15 сентября 2010

Согласно @COL Sharpnel's Scouldings: -)

Спасибо, Агауин, за то, что заставил меня сделать себя сам ... иногда это необходимо

я повторил $ ​​_POST ['description'], и это отображается как

Не слишком переживай макет / дизайн / размер текста, мы будем часто

и когда я использовал

htmlspecialchars (stripslashes ($ _ POST [ 'описание']))

Это дало мне полную строку

"Не слишком переживай макет / дизайн / размер текста, мы будем часто "оживить" (то есть жирный, курсив, интервал) Ваш баннер для лучшего Общий вид.

> МОРАЛЬ ПОЧТЫ: НЕ ДОБИРАЙТЕСЬ УВЕРЕНЫ НА КОДЕ СПАГЕТТИ

0 голосов
/ 15 сентября 2010

Вам необходимо экранировать кавычки.

Если ваша БД - MySQL, передайте все ваши данные через функцию mysql_real_escape_string(), прежде чем сохранять их в БД.

Если вы этого не сделаетеСделайте это, вы рискуете серьёзными дырами в безопасности вашего кода, а не просто пропажей данных!

(если вы этого еще не делаете, вам также следует экранировать другие данные для других целей; например, данныеотправка обратно в браузер должна быть экранирована, чтобы не допустить, чтобы мошеннические пользователи добавляли в нее необработанный код HTML или Javascript для манипулирования вашим сайтом.

В PHP есть ряд функций, позволяющих добавлять и удалять escape-символы и данные.фильтрация. Если вы хотите, чтобы ваш сайт был безопасным, вам необходимо изучить эти функции и методы.

[править]

После просмотра изменений:

Во-первых, вам нужночтобы экранировать все строки в вашем запросе, а не только описание, поэтому добавьте экранирование к $_POST['logoimage1'] и т. д., поскольку у вас возникнут те же проблемы, если любая из них содержит кавычки.

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

Выстрел в темноте - вы проверили максимальную длину поля вашего описания в базе данных?Это также может привести к усечению строки ... хотя вряд ли;Я полагаю, что если вы вводите текстовую область, вы установите ее достаточно долго.

0 голосов
/ 15 сентября 2010

Используйте функцию mysql_real_escape_string(), если она поступает от пользовательского ввода.

mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратный слеш кследующие символы: \ x00, \ n, \ r, \, ', "и \ x1a.

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

...