2011-08-20 67 views
2

我已經在Google和本網站上搜索了高低版本,以便爲這個問題找到答案,但沒有運氣。如何將更新的CKEditor內容保存到數據庫?

我正在爲想要自行維護的未來客戶定製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 [「內容」]不斷得到原始內容,而不是用戶剛剛提交的編輯內容。

我該如何解決這個問題?

+0

我知道CKEditor的行爲在PHP究竟只是在JavaScript中你必須調用編輯器方法從編輯器實例更新墊層元素或的getData()來獲取用戶的變化,它沒有做它automaticaly ...在JS無論如何 – Zee

+0

@Zeela:我會用jQuery的'submit();'觸發該更新代碼嗎? (我實際上知道'updateElement()',但現在找到了在我的情況下使用它的方式。) – Purag

回答

3

表單發佈時應自動傳遞數據。這裏是「集成」頁面從開發人員指南,解釋此頁:
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Integration

你確保查詢被成功地和內容字段被更新運行?我問,因爲你發佈的代碼表示,在save.php,您使用的是:

$id = $_GET['id']; 

這似乎引起問題,因爲你使用的方法=您的形式,而不是方法「後」 =」得到」。

你還可以發佈你用來替換CKEditor的textarea的代碼嗎?您是否使用了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的面前。一個來自「先進」的例子。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。 「編輯器」 到 「內容」 我會建議不要使用編號或名稱「編輯器」,因爲它在CKEditor的代碼用來指CKEditor的實例。

您可以在您加載編輯頁面或在config.js文件做配置設置或在你的o wn自定義配置文件。

我在表單提交後花了一些時間試圖捕獲表單內容字段的值,但在CKEditor更新內容之前只能看到它。

是嘛,

+0

呃,請原諒我問一個愚蠢的問題,但我該如何POST正在編輯的頁面的ID?我需要它在save.php頁面上找到用新內容更新的正確數據。另外,你能解釋一下如何使用相對於我的代碼的PHP $ CKEditor的東西嗎?謝謝您的幫助。 :) – Purag

+0

嗨Purmou,我不確定您是否收到有關答案更改的通知,所以我添加了此評論以讓您知道我回復了您的問題。如果使用PHP方法不能解決問題,請發佈您用於CKEditor的任何代碼,我會看看是否可以考慮其他任何方法來嘗試。喬 – codewaggle

相關問題