Как сохранить обновленный контент CKEditor в базу данных? - PullRequest
2 голосов
/ 20 августа 2011

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

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

if(isset($_GET['id'])) {
    $id = $_GET['id'];
    $content = mysql_query("SELECT title, content FROM pages WHERE id=".$id);
    $search = mysql_num_rows($content);
    if($search > 0){
        while($page = mysql_fetch_array($content)) { ?>
        <h1>Editing <?php echo $page['title']; ?></h1>
    <form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post">
    <textarea id="editor" name="content"><?php echo $page['content']; ?></textarea>
    </form>
<?php } 
    }
} ?>

Вот код в save.php:

<?php
if(isset($_POST['content'])){
$content = $_POST['content'];
$id = $_GET['id'];

echo $content;

mysql_query("UPDATE pages SET content=".$content." WHERE id=".$id);
}
?>

Проблема в том, что POST ['content '] продолжает получать исходный контент, а не отредактированный, который только что отправил пользователь.

Как это исправить?

1 Ответ

3 голосов
/ 03 сентября 2011

Данные должны автоматически передаваться при публикации формы.Вот страница «Интеграция» из Руководства для разработчиков, которая объясняет это:http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Integration

Вы уверены, что запрос успешно выполняется и что поле контента обновляется?Я спрашиваю, потому что код, который вы опубликовали, говорит, что в save.php вы используете:

$id = $_GET['id'];

Это может вызвать проблемы, потому что вы используете method = "post" в вашей форме, а не method= "get".

Не могли бы вы также опубликовать код, который вы используете для замены текстовой области на CKEditor.Используете ли вы метод PHP:

<?php
$CKEditor = new CKEditor();
$CKEditor->basePath = '/ckeditor/';
$CKEditor->replace("content");
?>

Или метод JavaScript:

<script language="Javascript">
<!--
  CKEDITOR.replace( 'content' );
//-->
</script>

Будь здоров, Джо


Ответьте на вопросв комментариях

Привет, Пурмоу,

Я не заметил, что вы включили идентификатор в действие формы, извините за это.Если вы хотите использовать его как переменную $ _POST, вы можете включить его в качестве скрытого поля, например:

<form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post">
<input type="hidden" id="id" name="id" value="<?php echo $_GET['id']; ?>" />
<textarea id="editor" name="content"><?php echo $page['content']; ?></textarea>

Существует несколько хороших документов о загрузке редактора через PHP в папке _samples на страницеустановка CKEditor: http://YourSite.com/ckeditor/_samples/php/

http://YourSite.com/ckeditor/_samples/php/replace.php, имеет основные настройки:

<?php
// Include the CKEditor class.
include_once "ckeditor/ckeditor.php";

// Create a class instance.
$CKEditor = new CKEditor();

// Path to the CKEditor directory.
$CKEditor->basePath = '/ckeditor/';

// Replace a textarea element with an id (or name) of "textarea_id".
$CKEditor->replace("textarea_id");
?>

Подобно методу JavaScript, вы можете добавить параметры конфигурации перед заменой текстовой области.Пример из файла «advanced.php»:

$CKEditor->config['width'] = 600;

Чтобы использовать метод PHP с вашим конкретным кодом, сделайте следующее:

if(isset($_GET['id'])) {
    $id = $_GET['id'];
    $content = mysql_query("SELECT title, content FROM pages WHERE id=".$id);
    $search = mysql_num_rows($content);
    if($search > 0){
        while($page = mysql_fetch_array($content)) { ?>
        <h1>Editing <?php echo $page['title']; ?></h1>
    <form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post">
    <textarea id="content" name="content"><?php echo $page['content']; ?></textarea>
    </form>
<?php }

include_once "ckeditor/ckeditor.php";
$CKEditor = new CKEditor();
$CKEditor->basePath = '/ckeditor/';
$CKEditor->replace("content");

    }
} ?>

Я изменил идентификатор textareaот «редактора» до «контента».Я бы рекомендовал не использовать «редактор» для идентификатора или имени, поскольку он используется в коде CKEditor для ссылки на экземпляр CKEditor.

Настройки конфигурации можно выполнить на странице, где вы загружаете редактор, или вфайл config.js или в вашем собственном файле конфигурации.

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

Будь здоров,Джо

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