2016-09-16 35 views
0

這可能真的很愚蠢,但我嘗試使用PHP將texarea中的內容保存到MySQL中。通常換行符保存在數據庫中。但突然他們被刪除。PHP從textarea以換行符保存內容

我使用jQuery發送的值與AJAX到PHP,然後我做在PHP:

$var = strip_tags($_POST["var"]); 
$db->query("UPDATE table SET var='$var' WHERE id=$id") 

不知怎麼換行被丟失的方式,如果我做nl2br的變種,那麼他們被翻譯爲<br/>,所以$ var包含換行符直到我運行查詢。

更新,添加到奇怪。如果我真的在$ var上運行nl2br,然後用換行符替換br-tags,那麼在更新表之前,一切都很好,發生了什麼?!?

這工作得很好:

$var = strip_tags($_POST["var"]); 
$var = nl2br($var);  
$var = preg_replace('#<br\s*/?>#i', "\n", $var); 
$db->query("UPDATE table SET var='$var' WHERE id=$id"); 
+0

你: http://php.net/manual/en/mysqli.real-escape-string.php

,這意味着除去了以下在數據庫本身中看到換行符?可能你應該在渲染端使用nl2br。 –

+0

使用nl2br。像$ var = nl2br(strip_tags($ _POST [「var」])); –

+0

不,我在數據庫中看不到換行符。如果我在渲染端運行nl2br,那麼沒有出現
-s出現 – johnohod

回答

0

我已經看了一遍Zebra(這次是源代碼),正如前面的評論中提到的,這正是爲什麼換行符被刪除的原因。從斑馬包逸出方法使用: NUL(ASCII 0),\ N,\ r \,」,」,與控制-Z

0

你可以嘗試添加輸入:

<pre></pre> 

這將你的輸入保存在數據庫中的預格式化文本。

參考:https://www.w3.org/wiki/HTML/Elements/pre

nl2br是一個很好的解決方案也使用你喜歡哪個。 另外,請確保您使用的是正確的數據庫列配置。它應該是VARCHAR或TEXT。

+0

這並不能真正解決問題。我的問題是\ n在保存時被刪除。我不想將html與文本一起保存。 – johnohod

0

我認爲你的問題是新行在被傳遞到服務器之前被刪除。

你提到它與jQuery一起發送,所以確保在發送到服務器之前沒有任何客戶端處理。

+0

奇怪的是,如果我在運行查詢之前先執行nl2br($ var),那麼我確實會得到
-tags。 所以我不知道當我真正運行查詢時是否會刪除換行符?我使用Zebra_database包裝。如果我例如。進入PhpMyAdmin編輯文本,然後保留換行符。所以數據庫或數據類型沒有任何問題。 – johnohod

+0

我對Zebra文檔進行了快速瀏覽,看起來update()方法調用了escape(): 「爲了防止SQL注入而在要用於SQL語句的字符串中轉義特殊字符。這個方法也包含給定的單引號字符串!「 http://stefangabos.ro/wp-content/docs/Zebra_Database/Zebra_Database/Zebra_Database.html#methodescape 所以這就是爲什麼你的換行符被刪除。 –

+0

啊哈,我有一種感覺,這將是問題,這是不久前,我切換到Zebra_database。我想知道什麼是最好的做法,以保持linebreaks然後? – johnohod

0

如果你用的是多行傳播的SQL命令行,然後大江戶的建議是最簡單的:

INSERT INTO mytable (myfield) VALUES ('hi this is some text 
and this is a linefeed. 
and another'); 

我只是有一個情況是最好有SQL語句都在一個所以我發現CONCAT_WS()和CHAR()的組合爲我工作。

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another')); 
+0

請閱讀帖子。我沒有問題顯示\ n,問題與將它們作爲\ n存儲在數據庫中有關。 – johnohod

+0

抱歉誤解請檢查上述解決方案。 –