Ckeditor предоставляет только часть контента - PullRequest
1 голос
/ 03 февраля 2010

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

Edit:

$date = strtotime($formData['date']);
$article=mysql_real_escape_string($formData['article'],$DBconnect);

$DBconnect=mysql_connect($dbVals['host'],$dbVals['user'],$dbVals['pass']);

mysql_select_db($dbVals['db'], $DBconnect);
$SQLstring="INSERT INTO PressRelease (ip, tym, title, date, article) VALUES('${_SERVER['REMOTE_ADDR']}', ".time().",'${formData['title']}', '$date', '$article')";

Я довольно новичок в этом, поэтому, если вам есть что посмотреть, чтобы помочь, дайте мне знать.

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010

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

http://www.php.net/manual/en/function.mysql-real-escape-string.php

Редактировать: извините, предполагается, что вы используете MySQL.

1 голос
/ 03 февраля 2010

Если я правильно понимаю, дело обстоит так:

  • У вас есть текстовая область, которая "захвачена" CKeditor
  • Вы читаете содержимое этой текстовой области с помощью Javascript
  • Вы отправляете собранный контент на сервер с AJAX

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

Если шаг 2 верный, то, возможно, есть проблема со стороны сервера, дамп вашего db-запроса, чтобы посмотреть на это.

Обновление: Убедитесь, что при разработке вы включаете все ошибки и уведомления. И если вы делаете вещи, которые вы не можете легко «увидеть», например, AJAX, обязательно следите за журналом ошибок вашего сервера.

В строке примера 2 кода вы используете $ DBconnect, а затем в строке 4 вы определяете, что это такое. Как вы можете видеть в запись PHP.net для mysql_real_escape_string , если функция не может найти соединение с базой данных, функция генерирует ошибку и возвращает FALSE. ЛОЖЬ помещается в вашу базу данных, и это то, что входит в вашу базу данных.

Мой вам совет: старайтесь больше отлаживать. Проверьте все свои предположения, проверяйте значение переменных на каждом шаге, проверяйте, имеют ли они значение, которое вы ожидаете от них. Используйте var_dump (), print_r (), echo и die (). Или, если вы хотите что-то более продвинутое, используйте отладчик (я не хочу).

1 голос
/ 03 февраля 2010

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

Чтобы взять пример из Википедии:

<?php
$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $db -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();
?>

Это оставляет возможность перехода к драйверу MySQL, значительно снижая вероятность SQL-инъекции и таких вещей, как случайное двойное экранирование.

Обратите внимание, что это невозможно при использовании старых функций MySQL . Вам нужны Улучшенные функции / объект MySQLI или что-то вроде PDO .

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