如何将更新的CKEditor内容保存到数据库?

时间:2011-08-20 12:16:54

标签: php sql ckeditor

我在Google和本网站上搜索了这个问题的高低,但没有运气。

我正在为希望自行维护的未来客户开发自定义CMS。这是将当前页面内容从数据库加载到textarea中的代码:

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 个答案:

答案 0 :(得分:3)

发布表单时应自动传递数据。以下是“开发者指南”中的“集成”页面,其中解释了这一点:
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Integration

您确定查询正在成功运行并且内容字段正在更新吗?我问,因为您发布的代码说在save.php中,您正在使用:

$id = $_GET['id'];

这似乎会导致问题,因为您在表单中使用method =“post”,而不是method =“get”。

您是否还可以发布用于替换textarea和CKEditor的代码。您使用的是PHP方法吗?

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

或JavaScript方法:

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

好吧, 乔


跟进评论中的问题

嗨Purmou,

我没有注意到您在表单操作中包含了id,抱歉。如果您确实想要将其用作$ _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在CKEditor安装的_samples文件夹中加载编辑器有一些很好的文档: 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方法类似,您可以在替换textarea之前添加配置选项。 “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 id从“editor”更改为“content”。我建议不要使用“editor”作为id或name,因为它在CKEditor代码中用于引用CKEditor实例。

您可以在加载编辑器的页面或config.js文件或自己的​​自定义配置文件中进行配置设置。

我花了一些时间在提交表单后尝试捕获表单内容字段的值,但只能在CKEditor更新内容之前看到它。

好吧,