Я ищу способ безопасно вставить строку в базу данных? - PullRequest
0 голосов
/ 15 октября 2011
 $comment= mysql_real_escape_string($comment);

Я использую это .. Но это не помогает.Я использую TinyMCE для вставки строк в базу данных, но при выделении я получаю странные символы ...

× ×›×ª×‘ על ידי
\\r\\n

\ r \ n \ r \ n

Требуется проанализировать / кодироватьстрока до того, как она попадет в базу данных?!?без этого?

ОБНОВЛЕНИЕ:

Вот как выглядит текст, который попадает в базу данных:

   t;div class=\"entry\" style=\"padding-top: 20px; padding-right: 20px; padding-bottom: 10px; padding-left: 20px; margin:

0px; \ "> \ r\ пвыдан 15.10.2011 в 11:04 в играх , ПК by \ r \ n\"Посмотреть\"Посмотреть\ "СообщенияSKIDROW выпускает исправление для Orcs Must Die, подробности читайте в NFO.

\ r \ nОписание
: нарежьте их, сожгите их, приготовьте их на вертеле и запустите их - независимо от того, как вы это сделаете, орки должны умереть в этой фантастической игре-стратегии действий от Robot Entertainment. Как мощный военный маг с десятками смертоносного оружия, заклинания и ловушки на кончиках ваших пальцев, защищайте двадцать четыре крепости от неистовой толпы зверских врагов, включая огров, адских летучих мышей и, конечно, целую кучу уродливых орков.Сражайтесь с врагами через сюжетную кампанию на нескольких уровнях сложности, включая жестокий режим Nightmare!
\ r \ n\ "\"
\ г \ п
\ г \ пНазвание релиза
: Orcs.Must.Die.Fix-SKIDROWРазмер
: 39,1 КБСсылки
: Скачать
:style = \ "padding-top: 1em; padding-right: 0px; padding-bottom: 0px; отступ слева: 0px; высота строки: 19 пикселей; поле: 0px; \ ">
\ г \ п <р class = \ "comments_link \" style = \ "padding-top: 20px; отступ справа: 0px; padding-bottom: 10px; отступ слева: 0px; высота строки: 19 пикселей; margin: 0px; \ ">

c02e13; текстовое оформление: нет; отступы: 0px; margin: 0px; \ "title = \" Комментарий к Orcs Must Die Fix-SKIDROW \ "

HREF = \ "http://www.rlslog.net/orcs-must-die-fix-skidrow/#respond\">Comments(0)

\r\n
\r\n
\r\n
\ г \ п <р id = \ "nextlinks \" style = \ "padding-top: 20px; отступ справа: 20 пикселей; padding-bottom: 0px; отступ слева: 20 пикселей; поле: 0px; \ ">
Предыдущее сообщение: & nbsp; MuscleMag Международный & ndash; Декабрь 2011-P2P

Ответы [ 4 ]

6 голосов
/ 15 октября 2011

Два предложения:

  1. Отказ от mysql_XXX API. В какой-то момент он будет отменен, и в нем отсутствуют важные функции, в частности, параметризованные запросы. Если вы не знаете, что такое параметризованные запросы, прочитайте. Это единственный разумный способ сохранить ваш код подключения SQL в здравом уме. Для PHP, я бы порекомендовал PDO - это немного менее просто, но оно того стоит.
  2. Убедитесь, что ваши кодировки / кодировки верны. В наши дни проще всего использовать Unicode (utf-8) для всего. Вам необходимо установить кодировку в самой базе данных (если вы можете; в MySQL это нужно сделать для каждой таблицы и для каждого столбца, что может быть довольно проблематично, если вам нужно установить его заново), кодирование соединения (просто вызовите SET NAMES UTF-8 первым делом после установки соединения), внутренняя кодировка php (mb_internal_encoding) и выходная кодировка (mb_http_output). Также убедитесь, что вы действительно выводите UTF-8; это означает, что все ваши исходные файлы и шаблоны также должны быть сохранены в кодировке utf-8.

И что бы вы ни делали: НИКОГДА НИКОГДА НЕ СОЗДАВАЙТЕ ИЛИ ЗАМЕНЯТЬ ЦЕННОСТИ В ЗАПРОСАХ . Код, подобный следующему: mysql_query("SELECT * FROM users WHERE USERNAME = '$username'"); должен быть недопустимым - существует слишком много способов застрелить себя и внедрить уязвимости SQL-инъекций. (И если вы не знаете, что такое SQL-инъекция, прочтите об этом тоже).

Наконец; несколько советов о том, как вы можете отладить вашу ситуацию.

  • настроить ведение журнала запросов MySQL. В my.ini есть настройка, которая заставит сервер MySQL выгружать все входящие запросы в файл журнала. Вы не хотите делать это на рабочем сервере, и вы хотите включить его только временно, но это отличный инструмент для просмотра того, что на самом деле отправляется на сервер.
  • войдите в MySQL с помощью клиента командной строки и посмотрите, что он выдаст, если вы выполните те же запросы вручную.
  • отладка вашего PHP - убедитесь, что значения, которые вы отправляете на сервер, соответствуют вашим ожиданиям - если у вас нет отладчика, добавить в свой скрипт операторы print лучше, чем ничего (просто не забудьте удали их до совершения)
2 голосов
/ 15 октября 2011

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

См. Также:

0 голосов
/ 15 октября 2011

Это очень просто на самом деле ..

например, предположим, что я хочу 2 вставить строку "Добро пожаловать" в мою таблицу, тогда я должен написать запрос следующим образом:

вставить в mytable (name) значения («добро пожаловать»)

если вы вставляете свою запись динамически, значит на php или любом другом языке, то пишите так

$ string = "welcome"; mysql_query ("вставить в mytable name values ​​('". $ string. "')");

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

http://www.php.net/manual/en/function.get-magic-quotes-gpc.php

0 голосов
/ 15 октября 2011

Используйте подготовленные операторы вместо экранирования и посмотрите, поможет ли это.Также проверьте правильность набора кодовых страниц / символов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...