アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPでformの<textarea></textarea>より、POST送信して、
INSERT文でDB(MySQL)に保存した時に、文中改行時に"\n"を挿入したい。
例)textarea内書込み。
あいうえお(ENTERキー:改行)
かきくけこ(ENTERキー:改行)
さしすせそ
   ↓
現在は、下記のようにINSERT文でDB(MySQL)に保存。
あいうえお
かきくけこ
さしすせそ
   ↓こうしたい
あいうえお\nかきくけこ\nさしすせそ

色々調べてみたのですが、
PHPだけで対応できるのかJavaScriptを利用するのか、
正規表現やonKeyDownやonkeypressを使わなければいけないのか、
もっと単純にできるのか等々対処法が全く思い浮かびません。

どなたかアドバイスやご教授をお願いします。
よろしくお願いします。

A 回答 (4件)

回答No.3の補足です。


mysql_escape_string()関数はPHP4.3以降非推奨で、現在は
mysql_real_escape_string()関数を使うとの事です。
さらに、textarea内にユーザーが書き込んだ内容を、SQLのクエリーに
直接入れるのは、SQLインジェクション攻撃の恐れがあるため、
エスケープした方がよいと↓にサンプル付で解説されていました。
http://manual.xwd.jp/function.mysql-real-escape- …

私も、DBアクセスは最近始めたばかりなもので。。。
私はPEARのDBコマンドを使っています。
escapeSimple()
quoteSmart()
quoteIdentifier()
とかをエスケープに使います。
    • good
    • 0
この回答へのお礼

返信が遅くなりました。
申し訳ありません。
どうやら、JavaScriptで制御するようです。
有難うございました。

お礼日時:2008/12/17 21:44

MySQL用に文字列ををエスケープするには、


mysql_escape_string()関数を使えます。
フォームの<txtarea>でユーザーが入力した文字列に改行が含まれていたら、何もしなくてもPOSTされてくる文字列の中に改行文字は入っています。
この改行文字をMySQLに投入する際\n(\r\n)にエスケープするには、
mysql_escape_string($_POST['text']);とすればよい。
<?php
$val = mysql_escape_string( $_POST['text'] );
$sql = " INSERT INTO db_test.tbl_test ( text ) VALUES ('" . $val . "') ";
print($sql);
$msg = 'OK';
?>
です。
    • good
    • 0

$rst = mysql_query( $sql );の直前に


print "<pre>";
print($_POST['text']);
print($sql);
print "</pre>";
を入れれば確認できます。
何もしなくても、
VALUES ("あいうえお かきくけこ さしすせそ")
と改行文字は入っています。
私はこうしましたが、
$sql = " INSERT INTO db_test.tbl_test ( text ) VALUES (\"" . $_POST['text'] . "\") ";
    • good
    • 0
この回答へのお礼

yyr446様。
有難うございます。
理解いたしました。
と同時に自分がやりたいことがハッキリしました。
もし、おわかりになるようでしたら引き続きアドバイスをお願いします。
テキストエリア内でENTERキーを押したら“\n”と言う文字を挿入したいのですが、どのようにしたら良いのでしょうか?
よろしくお願いします。

お礼日時:2008/11/26 20:36

そもそも、POST送信されて来る文字列の中に'\n'は、入ってませんでしたっけ?どこかでエスケープ処理してませんか?



5文字ごとに改行文字'\n'を入れるなら、
echo chunk_split("abcdefghijklmn",5,"\n");
結果 "abcde\nfghij\nklmn"
日本語も考慮するなら、
mb_split()とかmb_substr()で適当な長さに分解して、配列に
格納した後でimpload("\n",array)で連結する。

この回答への補足

yyr446様。
ご回答下さり有難うございます。

>そもそも、POST送信されて来る文字列の中に'\n'は、入ってませんでしたっけ?
う~ん。やはり、そうなのですか・・・。
だから、いくら調べても理解できなかったのですね。

エスケープ処理をしていないつもりなのですが・・・。
以下にコードを掲載しますので、
何処かでエスケープ処理をしているかどうかのご指摘をお願いします。

<?php
$sql = " INSERT INTO db_test.tbl_test ( text ) VALUES ( '" . $_POST['text'] . "' ) ";
$rst = mysql_query( $sql );
$msg = 'OK';
?>
<form action="<?= $_SERVER[PHP_SELF] ?>" method="post">
<div>
<ul>
<li>テキスト</li>
<li><textarea name="text" >
以上です。どこにもエスケープ処理はしていないので、POST送信の時も DB挿入時も「\n」がついたままのハズだと思うのですが、
テキストエリア内    ⇒     DB内 
アイウエオ(ENTERキー改行)    アイウエオ 
カキクケコ               カキクケコ
以上のようになってしまいます。
どこがおかしいのでしょうか?
お気づきの点がございましたらご指摘お願いします。
※ちなみに文字数は5文字に限定していません。
1例として掲載しているだけです。

補足日時:2008/11/26 19:09
    • good
    • 0
この回答へのお礼

これって使いにくいですね。
時間切れと文字数制限でおかしな補足になってしまいました。
以下コードの再掲載です。
<?php
$sql = " INSERT INTO db_test.tbl_test ( text ) VALUES ( '" . $_POST['text'] . "' ) ";
$rst = mysql_query( $sql );
$msg = 'OK';
?>
<form action="<?= $_SERVER[PHP_SELF] ?>" method="post">
<div>
<ul>
<li>テキスト</li>
<li><textarea name="text" ></textarea></li>
</ul>
<input type="submit" name="action" value="登録" />
</div>
</form>
お気づきの点がございましたらアドバイスなどお願いします。

お礼日時:2008/11/26 19:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!