2013-03-01 91 views
1

我正在研究一個允許用戶創建html模板並保存它們的應用程序。用戶可以使用不同的組件,如文本,圖像等,並創建html頁面。將內容保存到mysql數據庫時使用撇號「'」問題

問題:我現在面臨的問題是,當用戶輸入一些文字與撇號',我得到一個MySQL錯誤(顯然應該)。所以,我說mysql_real_escape_string給變量傳遞前它適用於查詢。它的工作原理,但我希望數據爲用戶編輯該網站。當我嘗試將其取回時,返回的內容添加了斜槓時出現錯誤。
我無法使用stripslashes,因爲我的內容可能會有斜槓作爲用戶輸入的文本的一部分。

這是怎麼把它添加到數據庫:

$revisionContent = mysql_real_escape_string($_POST['txtComp']); 

這是查詢

$query = "insert into revision (userId,revisionContent,webId,pageId,status,saveType,dateAdded) values ('".$_SESSION['gogiUserId']."','$revisionContent','$webId','$pageId','$status','$saveType','$toDate')";   

我想在的JavaScript變量中檢索到的值,所以我不喜歡這樣

var getSavedContent = '<?php echo json_encode($IdLessContent); ?>'; 

Bu那麼我得到這個錯誤!

SyntaxError: missing ; before statement 
    [Break On This Error] 
    ...helvetica,sans-serif;\"><strong>Text **Bo'x**(here is the apostrophe)<\/strong><\/span><\/span><\/p>\n<ol>\n... 

如果我刪除json_encode它給了我這個錯誤的語法。

SyntaxError: syntax error 
    [Break On This Error]  
    var getSavedContent = <div style="z-index: 1001; height: 241px; width: 725px; to... 
+2

這是密切相關的SQL注入攻擊,重大安全隱患。閱讀它。 – leftclickben 2013-03-01 09:09:45

+0

如果我用'mysql_real_escape_string'轉義我的變量,它應該刪除injection.Right的可能性? – KillABug 2013-03-01 09:11:46

+0

您應該使用'作爲撇號。請參閱http://www.tedmontgomery.com/tutorial/htmlchrc.html – 2013-03-01 09:12:49

回答

2

這與MySQL無關。直到您將數據取出後,纔會啓動問題。

您正在接受一個數據結構,它可能有一個撇號,將其轉換爲JSON,然後通過將引號包圍在其中來將該JSON文本轉換爲JavaScript字符串。由於JSON(或多或少)是JavaScript的一個子集,因此您可以通過跳過「轉換爲JS字符串」和「將字符串解析爲JS對象」步驟來處理此問題。

刪除引號:

var getSavedContent = <?php echo json_encode($IdLessContent); ?>; 
+0

感謝您的及時回覆。我試過這個,但出於某種原因,它剝去了內容的第一個字符。例如:如果我有''div class =「hello」>'''div class =「hello」 >'這是無效的,並在控制檯上顯示爲文本。 – KillABug 2013-03-01 09:21:18

+0

任何我可能錯過的東西!!我需要做的任何事情讓它工作 – KillABug 2013-03-01 09:47:08

+0

+1回答正確。'mysql_real_escape_string'很好;這是問題的JS輸出字符串,它的問題是它周圍的引號。 'json_encode()'已經添加了它需要的引號,所以你不需要它們。回覆您的評論,json_encode不會刪除第一個字符;可能會涉及其他因素,但我們沒有足夠的信息來幫助解決這個問題。 – SDC 2013-03-01 09:58:24