我在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']不断获取原始内容,而不是用户刚刚提交的已编辑内容。
我该如何解决这个问题?
答案 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更新内容之前看到它。
好吧,
乔