• ベストアンサー

テキストエリアの内容がメールに送信できない

テキストボックスやラジオボタンなど、フォームに書き入れた内容をメールに送信するプログラムを作っています。(アンケートフォームのようなもの) まず、nyuryoku.phpでテキストエリア内に入力されたものを kakunin.php に $area1 として、表示させました。その内容を、hidden でmail.php に送りました。 kakunin.phpでは、$area1 がきちんと表示されるのに、 メールに送られてきた内容は、1行しか送られてきません。 なぜなのでしょうか? kakunin.phpで改行させる為に、  $area2 = nl2br($_POST[area]."\n"); をしましたが、それは関係あるのでしょうか。 分かりづらい説明で、申し訳ありませんがよろしくおねがいします。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • shu_a
  • ベストアンサー率87% (14/16)
回答No.2

解決になるかわかりませんが、 タグの要素は必ずダブルコーテーションまたはシングルコーテーションで囲んでください。 というのは改行などはホワイトスペースなので、要素の終わりと判断されてしまうような気がします。 また、文字列にこれらが含まれているようだと、またアウトなので、配慮の必要があります。

relax50s
質問者

お礼

回答ありがとうございます。 ダブルコーテーションで囲った結果、無事に複数行メール送信されてきました。 ダブルコーテーションひとつで、表示が変わってしまうんですね。改めて勉強になりました。 ありがとうございます!

その他の回答 (2)

  • sakyo-t
  • ベストアンサー率70% (19/27)
回答No.3

HTMLを見るにやはり、hiddenタグが壊れていますね。 shu aさんのおっしゃる通りクォーテーションでくくればなんとかなりますが、それだと、エスケープしたりなんやかんやで、処理が増えたりします。 解決方法としてセッションをお勧めしたのですが、表示形式を変えても良いなら、textareaタグのreadonly属性を使ってみてはいかがでしょうか? kakunin.phpの表示を <textarea name="ta01" wrap="hard" readonly>  <?= $テキストエリアの変数$ ?> </textarea> という感じでtextareaで表示すれば、そのままPOSTできますので、もっとシンプルに解決できると思います

参考URL:
http://html.eweb-design.com/0904_txt.html
relax50s
質問者

お礼

回答ありがとうございます。 結局、いまだにセッションの使い方は分かっていないのですが…。 textareaには、入力してもらいたい所なのでreadonlyを使ってしまうと、それができなくなってしまい使えないんです。 ダブルクォーテーションで囲ったら送信されました!! ありがとうございました。

  • sakyo-t
  • ベストアンサー率70% (19/27)
回答No.1

要するにhiddenに埋めてバケツリレー中にデータが壊れたということですよね? hiddenタグに複数行を突っ込むのが暴挙のような気がします。kakunin.phpの出力ソースはどうなっていますか? hiddenタグが壊れているんじゃないでしょうか? セッションに埋めるなどした方が得策では?(環境の制限にもよると思いますが) mail.phpで$_POST[hiddenタグのname]の中身を確認した方がよろしいかと。 ちなみに$area1も$area2も表示に使っただけなら、関係ないと思います。

relax50s
質問者

補足

返答が遅くなってすみません。 >hiddenタグに複数行を突っ込むのが暴挙のような気がします。 そうだったんですか…。知識不足でした。 kakunin.php の出力ソースは次の通りです。 <td width="250"> ご質問等 </td> <td width="450">あああああ <br /> いいいいい <br /> ううううう <br /> えええええ <br /> </td> <input type=hidden name=situmon2 value=あああああ いいいいい ううううう えええええ > 改行されるので、1行目のデータしか遅れないのでしょうか? セッションについて、調べて、試してみたいと思います。

関連するQ&A

  • phpとhtml間のデータ送信時「テキスト改行」処理について

    自分で調べてみましたが、どうしてもわからず行き詰まりました。 どなたかお知恵を貸して頂ければ幸いです。 【使用ファイル】 a.php php処理 b.html db抽出データ表示とフォーム(編集画面) c.html フォーム入力内容表示(確認画面) データ送信はPOSTとSmarty併用 dbへはMySQLで格納 【変数】 $z テキストエリアの項目値 【流れ】 a.php→b.html→a.php→c.html→a.php→b.html/dbへ格納 1:a.phpでdbよりデータ(テキスト)を抽出し追加、変数$zに格納。 2:Smartyでb.htmlへ$zを送る。送り先はフォーム内のテキストエリア値。 3:$zにテキスト追加で改行発生 (\n発生と予測)。 4:b.htmlからPOSTでa.phpへ。 nl2br($z)処理をし、<br />挿入。 5:Smartyでc.htmlへ$zを送る。 $zには<br>と\nの両方が入っている状態。改行表示される。ブラウザのページソースでは<br />が入っている。 6-1:c.html(POST)→a.php(smarty)→b.html str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態 smartyでb.htmlへ 6-2:c.html(POST)→a.php→db格納  str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態でdbへ格納 6-1,2とも<br />を入れたままだと文字列に<br />が入ってしまう 7:a.php→b.htmlで再度$zを呼び出してみると(1:の処理)<br />を取り除いたはずなのに、ブラウザではきちんと改行表示されている。 ブラウザのページソースに<br />の表示はない 【疑問点】 3:\nは発生してPOSTでa.phpにきているのか? きている種類が\nまたは他の改行文字かどうかを調べる手段はあるのか?バイナリ関連で調べるのか? 6-1:<br />を削除してhtmlへ送っているのに改行表示されるのか? <br />が文字列扱いになるのはなぜか? 6-2:dbでは\nが改行として認識されるのか? 7:\nしか入っていない文字列をブラウザ表示して、なぜ改行表示されるのか? 以上です。考えれば考える程にわからなくなってきました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームのtextareaにnl2brを使用すると、入力内容の改行部分に<br />が表示されてしまう。

    現在、フォームを作成しています。 セッションを利用してフォームの次のファイルにデータを受け渡しています。 問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。 フォームの流れ: start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。 mail.phpにおいて入力内容の確認及びデータ送信。 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> 解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。) mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?> start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。 入力例: あいうえおかきくけこ たちつてと 表示例(nl2br使用): あいうえおかきくけこ<br /> たちつてと 解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。 試しにnl2br()をコードから削除すると、以下のような表示となります。 表示例(nl2br未使用): あいうえおかきくけこたちつてと 解説:nl2brを使用しない場合、改行されません。 どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • テキストエリアで読み込んだら<br>が表示されてしまう

    現在、登録フォームを作っているんですけども(mdbで保存してます) その登録フォームの中には「登録」、「編集」の独立したプログラムを作りました。 登録した内容を「編集」で更新したりしてるんですけれども、「登録」で記入した内容に<br>が含まれている と、編集フォームのテキストエリアの中にそのまま<br>が表示されてしまいます。 (mdbから読み込んでるので当たり前なのですが・・) 「登録」のページには下記の記述のように、<br>に変換するようにして、mdbに保存させているんですが 「編集」ではこの<br>を表示させたくないんです。そこをどう記述したらいいのかわかりません。<br>を表示させないようにして、手動で改行できるようにしたいのですがどうしたらいいのでしょうか・・・。 hp_comment = Replace(hp_com,Chr(13) & Chr(10),"<br>")& vbCrLf ASPの掲示板で質問されていた内容なんですが回答もなく気になったので質問させていただきます。 どなたかご指導よろしくお願いいたします。

  • テキストエリアの改行

    HTMLのFORMにあるテキストエリア(name=coment)で例えば ================ こんにちわ やっと台風が 去りましたね。 ================ という用に打ち込んでPerlCGIでその内容を $coment=$in{'coment'}; とすると、変数$comentには 「こんにちわやっと台風が去りましたね。」と入ります。 これを、もとのテキストエリアでの改行を<br>に置き換えて 「こんにちわ<br>やっと台風が<br>去りましたね。」としたいのですが、どうしたらよいものでしょう。

    • ベストアンサー
    • Perl
  • メール送信時の不具合

    以下a.html→b.html→c.phpのフローでテキストエリアに入力された文章がc.php内で一行しか表示されませんでした。 全文表示したいのですが、どうすれば良いのでしょうか?ちなみにhtmlファイル内でもphpは使える環境になっています。サーバはロリポップです。 どなたか助けて下さい。よろしくお願い致します。 ■a.htmlファイル <form method=post action="b.html"> 内容:<br> <textarea name="comment" rows="5" cols="70"></textarea> <br> <input type="submit" value="確認"> <input type="reset" value="リセット"> </form> ■b.htmlファイル 内容:<?php echo $comment;?><br> で送信致します。<br> 宜しいですか?<br><br> <form method="POST" action="c.php"> <input type="hidden" name="comment" value=<?php print($comment);?>> <input type="submit" value="送信" /> </form> ■c.php <?php $comment=$_POST['comment']; echo $comment; ?>

    • ベストアンサー
    • PHP
  • お問合せフォームのセキュリティについて

    PHP初心者です。 ようやく簡単なお問合せフォームを作る事ができました。 ですがセキュリティの面で不安がありませすので、ご質問させていただきます。 1. contact.html(入力フォームを表示) <form action="kakunin.php" method="post"> method="POST"で kakunin.php に値を渡してます。 2. kakunin.php(入力内容の確認やエラーを表示) $_SERVER["REQUEST_METHOD"] == "POST"でフォームの値を取得して、 input type="hidden"を使用して値を受け渡してます。 入力内容表示のフォームは <form method="POST" action="mail.php"> この時フォームでの表示は <td><?php echo $name ?></td> としているのですが、 これを、 <td><?php echo htmlspecialchars($name) ?></td> にした方がいいのでしょうか? 3 mail.php(入力内容をメールで送信) $_SERVER["REQUEST_METHOD"] == "POST"でフォームの値を取得して、 mb_send_mailで送信しています。 このようにして、フォームを作りましたが、 セキュリティの観点から見て注意しなければならない事は何でしょうか? 作り方に問題ありでしょうか? 駄文で失礼します。宜しくお願い致します。

    • 締切済み
    • PHP
  • こんにちは。PHPでメールフォームを送信したいのですが、

    こんにちは。PHPでメールフォームを送信したいのですが、 メールが文字化けしてしまいます。 PHP初心者です。 時間をかけてゆっくりやりたいのですが、 仕事でやっているため、そうも言ってられず。。。 ======================================================= $msg= 'Name: '.$_POST['name'].'<br /> Email: '.$_POST['email'].'<br /> IP: '.$_SERVER['REMOTE_ADDR'].'<br /><br /> Message:<br /><br /> '.nl2br($_POST['message']).' '; $mail = new PHPMailer(); $mail->IsMail(); $mail->AddReplyTo($_POST['email'], $_POST['name']); $mail->AddAddress($emailAddress); $mail->SetFrom($_POST['email'], $_POST['name']); $mail->Subject = "A new ".mb_strtolower($_POST['subject'])." from ".$_POST['name']." | contact form feedback"; $mail->MsgHTML($msg); $mail->Send(); ========================================================================= 一部ですが、こちらを修正すればよいのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • テキストエリア内の改行

    <textarea cols=  rows= ></textarea> を使ってテキストエリアを作っています。 テキストエリア内に予めコメントを 入れておきたいのですが、そのコメントを 改行したい場合はどうすればいいのでしょうか? <BR>のタグが使えないので困っています。 どなたか教えてください、お願い致します。

  • チェックボックスの内容が送信出来ません。

    PHPのメールフォームにチェックボックスを追加しましたがうまく送れず頭を抱えています。 お力をお貸しください。 必要だと思われるソースです。 inquiry.html <form action="check_inquiry.php" method="POST"> <p><label for="title">お名前:</label> <input type="text" name="title" size="60"> </p> <p><INPUT type="checkbox" name="check[]" value="資料請求" />資料請求<INPUT type="checkbox" name="check[]" value="至急" />至急<INPUT type="checkbox" name="check[]" value="質問" />質問</p> <br /> <p><label for="massage">メッセージ:</label></p> <p><textarea name="message" cols="50" rows="20"></textarea></p> <p><input type="submit" value="内容の確認"></p> </form> check_inquiry.php <?php $title = htmlspecialchars($_POST['title'], ENT_QUOTES); $message = htmlspecialchars($_POST['message'], ENT_QUOTES); $m_check = $_POST['check']; ?> ■内容を確認してください。 <br> <form action="send_inquiry.php" method="POST"> <input type="hidden" name="title" value="<?php echo $title; ?>" /> <input type="hidden" name="message" value="<?php echo $message; ?>" /> <input type="hidden" name="check" value="<?php for($i=0; $i<sizeof($m_check); $i++){ echo "【${m_check[$i]}】"; } ?>" /> <br /> お名前: <br /> <?php echo $title; ?> <br /> 問い合わせ内容: <?php for($i=0; $i<sizeof($m_check); $i++){echo "【${m_check[$i]}】"; }; ?> <br /> メッセージ詳細: <br /> <?php // 改行部分にBRタグを埋め込む echo nl2br($message); ?> <br /> <input type="submit" value="お問い合わせ内容の送信"> </form> send_inquiry.php <?php $title = htmlspecialchars($_POST['title'], ENT_QUOTES); $message = htmlspecialchars($_POST['message'],ENT_QUOTES); $m_check = $_POST['check']; //日本語UTF8 mb_language('ja'); mb_internal_encoding('UTF8'); //自動送信<送信元のアドレス $name = '自動送信'; $email = 'メールアドレス'; $header = 'From: '. mb_encode_mimeheader($name) . '<' . $email .'>'; // メール送信 $result = mb_send_mail($email, $title, $message, $header, $m_check); //メール送信の確認 if ($result) { // メール送信の成功 echo '■管理人へ送信しました。'; } else { // メール送信の失敗 echo '■管理人への送信に失敗しました。'; } ?> チェックボックスにチェックを入れないと送信出来ますが チェックを入れると送信に失敗します。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールフォームでのtextareaの改行

    htmlでフォームを表示し確認、送信はphpで行うフォームなのですが htmlのフォームでtextareaで改行しても確認、送信時には改行が反映されません。 例:(*は改行です) あああ* いいい* ううう* としても『あああいいいううう』となってしまいます。 <textarea name="メッセージ" cols="50" rows="3"></textarea> としています。 検索してこちらのページが参考になることまではわかったのですが 応用の方法がわかりません・・・ http://jp2.php.net/manual/ja/function.nl2br.php 試しにphp内に string nl2br ( string $メッセージ ) としてみたのですが思ったとおりエラーです。 初心者ながらくだらない質問になってしまい申し訳ないのですが どのようなソースにすればいいのでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう