2016-09-16 9 views
0

これはおそらく馬鹿げたかもしれませんが、私はテキサスからPHPでMySQLにコンテンツを保存しようとしています。通常、改行はデータベースに保存されます。しかし突然彼らは取り除かれます。 PHPが改行でテキストエリアの内容を保存する

は、私は、AjaxとPHPに値を送信するためにjqueryのを使用してから、私はPHPでこれを実行します。

$var = strip_tags($_POST["var"]); 
$db->query("UPDATE table SET var='$var' WHERE id=$id") 
どういうわけか

改行がで途中で失われた私は、VARにnl2brを行う場合、それら<br/>に変換されるので、$ varはクエリを実行するまで改行を含んでいます。

更新、不思議に追加します。実際に$ varにnl2brを実行して、brタグを改行で置き換えた場合、テーブルを更新する前に、すべてうまくいきます。

これがうまく働いている:

$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

$ var = nl2br like 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)を実行すると、
タグが得られるということです。 実際にクエリを実行したときに改行が削除されてしまうのだろうか?私は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に切り替えました。私はその後、改行を守るためのベストプラクティスは何か? – johnohod

0

あなたは複数行に渡って広がるSQLコマンドを使用して、OKであれば、その後、大江戸の提案が最も簡単です:

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

私はちょうどすべて1で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

ご迷惑をおかけして申し訳ございませんが、上記の解決策をご確認ください。 –

関連する問題