2010-02-03 28 views
1

我使用ajax來收集要提交的ckeditor數據。問題只是第一個撇號提交給數據庫之前的內容。我可能做錯了什麼?Ckeditor只提交部分內容

編輯:

$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')"; 

我在這個相當新的,所以如果有其他任何你需要,以幫助讓我知道在看。

回答

2

聽起來好像你並沒有在將文本數據插入數據庫之前轉義文本數據。你將它傳遞到您的SQL查詢之前,對數據使用此功能:

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

編輯:對不起,這是假設你正在使用MySQL。

+0

+1我打賭這是這兩個啤酒。 – 2010-02-03 15:16:16

+0

是的,我正在使用MySQL,我曾嘗試使用該功能,我認爲這也是問題,但通過使用它沒有提交任何數據。我在表單中有2個文本框,然後是一個ckeditor文本區,所有其他數據都提交給數據庫。 – 2010-02-03 15:35:54

+0

你是說用mysql_real_escape_string在數據庫中沒有輸入任何數據嗎?請儘可能具體,這可以幫助我們幫助你。 – 2010-02-03 16:07:36

1

與Mark建議的方法不同的,更復雜的,可以說是優越的方法是使用Parameterized Statements

從維基百科借用一個例子:

<?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注入的機會之類的東西偶然雙逃逸。

請注意,這是不可能使用old MySQL functions。您需要Improved MySQLI函數/對象,或者諸如PDO之類的東西。

+0

Mark B的解決方案更簡單,我甚至不確定問題出在查詢層面。 – 2010-02-03 15:17:11

+0

我的確說過這更復雜,我不是嗎? - 如果問題出現在查詢層面(考慮到問題描述,至少是最可能的原因),這絕對是最「安全」的方法。 (從多種意義上說) – Atli 2010-02-03 15:23:51

+0

我是初學者,所以我在尋找更多的東西,謝謝你的建議,雖然 – 2010-02-03 15:39:16

1

如果我理解正確,以下是這樣:

  • 你就是我的真實被CKEDITOR
  • 你的JavaScript
  • 讀取textarea的內容將「接管」一個textarea您正在使用AJAX將收集的內容發送到服務器

如果alert()Javascript從textarea獲取的內容,您可以看到步驟2是否成功。如果沒有,請發佈您的Javascript。

如果第2步是正確的,那麼可能是服務器端存在問題,請轉儲您的db查詢以查看該問題。

更新: 確保您在開發時打開所有錯誤和通知。如果你在做一些你無法「看見」的東西,比如AJAX,請務必留意你的服務器的錯誤日誌。

在你的代碼示例第2行中,使用$ DBconnect,然後在第4行中定義它是什麼。正如您在the PHP.net entry for mysql_real_escape_string中看到的那樣,如果該函數無法找到與數據庫的連接,該函數將生成一個錯誤並返回FALSE。 FALSE被放到你的數據庫中,這就是你的數據庫的內容。

我給你的建議是:儘量在調試時加倍努力。測試你所有的假設,在每一步測試變量的值,檢查它們是否具有你期望它們具有的價值。使用var_dump(),print_r(),echo和die()。或者如果你想更先進的東西使用調試器(我不)。

+0

警報成功,表單中的所有其他數據提交罰款,然後再添加表單中的ckeditor完美工作 – 2010-02-03 15:41:58

+0

我不明白,表單元素* do *的其他部分中的內容最終在數據庫中,而ckeditor textarea中的內容不? – 2010-02-03 16:08:54

+0

是的,沒錯,我知道它沒有多大意義,但正如我所說我是一個新的程序員,我可能會錯過這麼簡單的事情...... – 2010-02-03 18:03:13