• 締切済み

PHPとJSを使ったお問い合わせフォームについて

こんにちは、セレクトボックスの選択部分を変更するとフォームの内容が変わるというフォームを作っているんですが色々試しても何がどうおかしいのかわからないので質問させていただきます。 PHPは特に触り始めて間もないのでわかりやすく教えてもらえると嬉しいです。 多分色々とおかしいことになってると思いますが出来るだけ分かりやすくよろしくお願いいたします。 【index.html】 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> fieldset{ border: none; } </style> <script type="text/javascript"> function setForm(ex) { var target = ex.value; var group = ex.form.getElementsByTagName("FIELDSET"); var i=0, fs; while(fs=group[i++]) fs.style.display = fs.id == target?"block":"none"; } </script> </head> <body> <form action="form.php" method="post"> <table> <tr> <td>用件</td> <td> <select name="select1" onchange="setForm(this)"> <option value="">選択してください</option> <option value="A">ご質問</option> <option value="B">資料請求</option> <option value="A">その他</option> </select></td> </tr> </table> <fieldset id="A"> <table> <tr> <td>お名前</td> <td><input type="text" name="name" value=""></td> </tr> <tr> <td>Mail</td> <td><input type="text" name="mail" value=""></td> </tr> <tr> <td>サイトを知ったきっかけ</td> <td><input type="checkbox" name="chance[0]" value="friend">知り合い <input type="checkbox" name="chance[1]" value="serch">検索エンジン<td> </tr> <tr> <td>ご質問内容</td> <td><textarea name="message" cols="60" rows="5"></textarea></td> </tr> </table> </fieldset> <fieldset id="B"> <table> <tr> <td>お名前</td> <td><input type="text" name="name" value=""></td> </tr> <tr> <td>Mail</td> <td><input type="text" name="mail" value=""></td> </tr> <tr> <td>性別</td> <td><input type="radio" name="gender" value="man">男 <input type="radio" name="gender" vakue="woman">女</td> </tr> <tr> <td>住所</td> <td><input type="text" name="address" value=""></td> </tr> </table> </fieldset> <input type="submit" value="送信する" /> </form> </body> </html> </html> 【form.php】 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php mb_language("japanese"); mb_internal_encoding("utf-8"); if(!empty($_POST['mail'])){ $to=$_POST['mail']; $name=$_POST['name']; $chance=$_POST['chance']; $message=$_POST['message']; $gender=$_POST['gender']; $address=$_POST['address']; $form=mb_encode_mimeheader(mb_convert_encoding("自分の名前","JIS","UTF-8"))."<aaa@aaa.com>"; $success=mb_send_mail($to,"名前:".$name."サイトを知ったきっかけ:".$chance."お問い合せ内容:".$messagge."性別:".$gender."住所:".$address,"from:".$from); } ?> <?php if ($success) { print('送信しました。'); } else { print('送信に失敗しました。'); } ?> </body> </html> よろしくお願いします!!!!

みんなの回答

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

環境作って確認したら他にも悪い所が分かりました。 ご質問、その他を選択した場合「$_POST['name']」「$_POST['mail']」に値が入っておりません。 原因として同じname属性を持つinputが存在する為です。 「$_POST['name']」はどうでもいいですけど、「$_POST['mail']」はif文で判定並びに送信する際に必要です。 <fieldset id="A"> <td>お名前</td> <td><input type="text" name="name" value=""></td> <td>Mail</td> <td><input type="text" name="mail" value=""></td> (略) </fieldset> <fieldset id="B"> <td>お名前</td> <td><input type="text" name="name" value=""></td> <td>Mail</td> <td><input type="text" name="mail" value=""></td> (略) </fieldset> setFormに下記追加 document.getElementById("select").value = ex.value; 下記のようにして配列化し <td><input type="text" name="name[A]" value=""></td> <td><input type="text" name="mail[A]" value=""></td> <td><input type="text" name="name[B]" value=""></td> <td><input type="text" name="mail[B]" value=""></td> 下記hidden追加 <input type="hidden" id="select" name="select" value="" /> $to=$_POST['mail'][$_POST['select']]; $name=$_POST['name'][$_POST['select']]; これで選択したやつが取れます。 if文も if(!empty($_POST['mail'][$_POST['select']])){ これに修正 「$_POST['chance']」は、配列が格納されているため $chance=$_POST['chance']; これでは本来ほしい状態で値が取得できません。 $chance=$_POST['chance'][0]; //カンマは区切り文字 $chance.=(!empty($chance) && !empty($_POST['chance'][1])) ? ','.$_POST['chance'][1] : $_POST['chance'][1]; こんな感じだと欲しい状態で値が取得できます。

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

軽く見て問題点をあげるとしたらmb_send_mailの使い方が間違ってると思います。 mb_send_mailは、「mb_send_mail($to, $subject, $message, $from)」なので $to=>宛先 $subject=>件名 $message=>本文 $from=>メールヘッダの追加(差出人とか文字コードとか設定) となります。 それを踏まえ mb_send_mail( $to←宛先 ,"名前:".$name."サイト(略)".$gender."住所:".$address←件名 ,"from:".$from←本文 ); ではなく mb_send_mail( $to←宛先 ,"件名"←件名 ,"名前:".$name."サイト(略)".$gender."住所:".$address←本文 ,"from:".$from←ヘッダ追加 ); になるのが正しいかと。

関連するQ&A

  • PHPのお問い合わせフォームについて

    こんにちは、セレクトボックスの選択部分を変更するとフォームの内容が変わるというフォームを作っているんですが色々試しても何がどうおかしいのかわからないので質問させていただきます。 PHP初心者で触り始めて間もないのでわかりやすく教えてもらえると嬉しいです。 多分色々とおかしいことになってると思いますがよろしくお願いいたします。 【index.html】 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> fieldset{ border: none; } </style> <script type="text/javascript"> function setForm(ex) { var target = ex.value; var group = ex.form.getElementsByTagName("FIELDSET"); var i=0, fs; while(fs=group[i++]) fs.style.display = fs.id == target?"block":"none"; } </script> </head> <body> <form action="form.php" method="post"> <table> <tr> <td>用件</td> <td> <select name="select1" onchange="setForm(this)"> <option value="">選択してください</option> <option value="A">ご質問</option> <option value="B">資料請求</option> <option value="A">その他</option> </select></td> </tr> </table> <fieldset id="A"> <table> <tr> <td>お名前</td> <td><input type="text" name="name" value=""></td> </tr> <tr> <td>Mail</td> <td><input type="text" name="mail" value=""></td> </tr> <tr> <td>サイトを知ったきっかけ</td> <td><input type="checkbox" name="chance[0]" value="friend">知り合い <input type="checkbox" name="chance[1]" value="serch">検索エンジン<td> </tr> <tr> <td>ご質問内容</td> <td><textarea name="message" cols="60" rows="5"></textarea></td> </tr> </table> </fieldset> <fieldset id="B"> <table> <tr> <td>お名前</td> <td><input type="text" name="name" value=""></td> </tr> <tr> <td>Mail</td> <td><input type="text" name="mail" value=""></td> </tr> <tr> <td>性別</td> <td><input type="radio" name="gender" value="man">男 <input type="radio" name="gender" vakue="woman">女</td> </tr> <tr> <td>住所</td> <td><input type="text" name="address" value=""></td> </tr> </table> </fieldset> <input type="submit" value="送信する" /> </form> </body> </html> </html> 【form.php】 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php mb_language("japanese"); mb_internal_encoding("utf-8"); if(!empty($_POST['mail'])){ $to=$_POST['mail']; $name=$_POST['name']; $chance=$_POST['chance']; $message=$_POST['message']; $gender=$_POST['gender']; $address=$_POST['address']; $form=mb_encode_mimeheader(mb_convert_encoding("自分の名前","JIS","UTF-8"))."<aaa@aaa.com>"; $success=mb_send_mail($to,"名前:".$name."サイトを知ったきっかけ:".$chance."お問い合せ内容:".$messagge."性別:".$gender."住所:".$address,"from:".$from); } ?> <?php if ($success) { print('送信しました。'); } else { print('送信に失敗しました。'); } ?> </body> </html> よろしくお願いします!!!!

    • 締切済み
    • PHP
  • php メールフォーム プルダウンメニュー

    プルダウンメニューを使用して、フォーム→確認→送信と順々に値を受け取りたいのですが、form.phpではプルダウンメニューは表示されますが、form.phpで選択したプルダウンメニューがconfirm.phpでは表示されません。 confirm.phpでも表示されてなおかつ送信をしたら受け取れるようにしたいのです。 初心者なので、いろいろと勉強をしながら、本を読んだり、調べたのですが、まったくわからずです。どなたかご教授お願いします。 form.php <form method="post" action="confirm.php"> <table cellpadding="0" cellspacing="0" border="0"><tr><td>項目</td><td>入力欄</td><td>記入例</td></tr> <tr><td><label for="name">名前</label></td><td><input type="text" size="50" name="name" id="name" value="<?php print h(@$_SESSION['name']); ?>" /></td><td>例:goo 太郎</td></tr> <tr><td><label for="mail">生年月日</label></td><td> <select name="year[]"><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option></select>年 <select name="month[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>月 <select name="day[]"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option></select>日 </td><td>例:1990年01月01日</td></tr> <tr><td colspan="3" style="text-align:center;"><input type="hidden" name="aaa" value="<?php print h($aaa); ?>" /><input type="submit" value="確認" /></td></tr> </table></form> confirm.php session_start(); $_POST = checkInput($_POST); if (isset($_POST['aaa']) && isset($_SESSION['aaa'])) { $aaa = $_POST['aaa']; if (!in_array($aaa, $_SESSION['aaa'])) { die('不正アクセスの疑いがあります。'); } } else { die('不正アクセスの疑いがあります。'); } $name = isset($_POST['name']) ? $_POST['name'] : NULL; $kana = isset($_POST['kana']) ? $_POST['kana'] : NULL; $mail = isset($_POST['mail']) ? $_POST['mail'] : NULL; $comment = isset($_POST['comment']) ? $_POST['comment'] : NULL; $error = array(); ★★★各項目のチェック★★★ $_SESSION['name'] = $name; $_SESSION['kana'] = $kana; $_SESSION['mail'] = $mail; $_SESSION['comment'] = $comment; $_SESSION['error'] = $error; <table class="form" cellpadding="0" cellspacing="0" border="0"> <tr><td>項目</td><td>入力欄</td><td class="title_color" style="border-left:1px solid #ffffff;">記入例</td></tr> <tr><td>名前</td><td class="title_back2"><?php print h($name);?></td><td>例:goo 太郎</td></tr> <tr><td>生年月日</td><td>★★★★★ここにform.phpからのプルダウンメニューを受け取りたい★★★★★</td><td>例:1990年01月01日</td></tr> </table> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td><form action="form.php" method="post"><input type="submit" value="戻る" /></form></td> <td><form action="send.php" method="post"><input type="hidden" name="aaa" value="<?php print h($aaa);?>" /><input type="submit" value="送信" /></form></td> </tr></table>

    • ベストアンサー
    • PHP
  • 2つのフォームに値を入れて計算

    2つのフォームを作り、その2つを計算したいのですがオブジェクトの指定の仕方がエラーが出てしまい(オブジェクトを指定してくださいと出ます)わかりません。 どうか教えてください。 ちなみにforなどは使わなくても大丈夫ですのでよろしくお願いします。 function kei() { var kei1 = 0; kei1=eval(document.A.a11.value) * eval(document.B.b21.value) ; document.C.c11.value = kei1; } <table border = 1> <form name="A"> <tr> <td> <input type = "text" size = 5 name = "a11"></input> </td> <td> <input type = "text" size = 5 name = "a12"></input> </td> <td> <input type = "text" size = 5 name = "a13"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "a21"></input> </td> <td> <input type = "text" size = 5 name = "a22"></input> </td> <td> <input type = "text" size = 5 name = "a23"></input> </td> </tr> </form> </table> <table boeder = 1> <tr> <input type = "button" onClick="kei()" value = "×"></input> </tr> </table> <table border = 1> <form name="B"> <tr> <td> <input type = "text" size = 5 name = "b21"></input> </td> <td> <input type = "text" size = 5 name = "b22"></input> </td> <td> <input type = "text" size = 5 name = "b23"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "b31"></input> </td> <td> <input type = "text" size = 5 name = "b32"></input> </td> <td> <input type = "text" size = 5 name = "b33"></input> </td> </tr> </form> </table> <table border = 1> <form name="C"> <tr> <td> <input type = "text" size = 5 name = "c11"></input> </td> <td> <input type = "text" size = 5 name = "c12"></input> </td> <td> <input type = "text" size = 5 name = "c13"></input> </td> </tr> <tr> <td> <input type = "text" size = 5 name = "c21"></input> </td> <td> <input type = "text" size = 5 name = "c22"></input> </td> <td> <input type = "text" size = 5 name = "c23"></input> </td> </tr> </form> </table>

  • フォームで確認画面を表示させるにはどうすればいいのでしょうか?

    質問をご覧下さりありがとうございます。 <form action="18add.php" method="POST" name="form1"> <table> <tr> <th>番号(半角数字)</th> <td><input type="text" name="number" value=""></td> </tr> <tr> <th>名前</th> <td><input type="text" name="name" value=""></td> </tr> <tr> <td><input type="hidden" name="mode" value="add"></td> <td><input type="submit" name="submit" value="追加"></td> </tr> </table> </form> htmlでこんなフォームを作り、phpで $table_body = ""; if( isset( $_POST['mode'] ) ){ $mode = $_POST['mode']; $number = $_POST['number']; $name =$_POST['name']; } else{ $mode = ""; $number = ""; $name = ""; } if( $mode == "add" ){ $table_body .= "<tr>"; $table_body .= "<td>"; $table_body .= $number; $table_body .= "</td>"; $table_body .= "<td>"; $table_body .= mb_convert_encoding( $name, "SJIS", "EUC-JP" ); $table_body .= "</td>"; $table_body .= "</tr>"; } で一度入力された情報を確認する画面を作りたいのですが うまくいきません。 初心者なのでわかりやすく説明をつけてくださると大変助かります。

    • 締切済み
    • PHP
  • メールフォームについて

    この中にどのようなHTMLを書けば自分のPCにメールが届く ようになりますか?よろしくお願いします。 <h2>■MAIL FORM</h2> <div class="text"> <form><table><tr><td width="100" align=right> NAME</td><td align=right><input type="text" name="Name" size="34"></td></tr><tr><td width="100" align=right> MAIL</td><td align=right><input type="text" name="Mail" size="34"></td></tr></table> <TEXTAREA NAME="Comments" ROWS="8" COLS="39" value="comments"></TEXTAREA> <br> <table><tr><td width="100" align=right> </td> </tr><tr> <td width="100" align=right> URL</td><td><input type="text" name="URL" value="http://" size="34"></td></tr><tr><td></td><td align="right"> <INPUT TYPE="reset" VALUE=" Reset "> <INPUT TYPE="submit" VALUE=" Send "></FORM> </td></tr></table><br></div>

    • ベストアンサー
    • HTML
  • [PHP初心者] フォームのエラーチェック

    PHPやデータベースに全く疎い者です。 皆様にご指導頂きたく投稿致します。質問内容もレベルが低いですがどうが宜しくお願いします。 メールフォームにてフォームのボタンを押下し、 エラーチェックをして、エラー項目を同一画面上の上の辺りに表示させたいのですが、、参考書を読んだり、過去スレを拝見しても、どうもわかりません。 <body> //↓この辺をどう書けばいいのか、さっぱりなんです。 <?php if(isset($_POST['mailform'])) { if($_POST['name'] == "") { echo("名前を入力して下さい。<br>"); }} ?> //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ <form method="POST" action="kakunin.php"> <table border="0" cellpadding="5"> <tr> <td colspan="2"></td> </tr> <tr> <td>名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input name="mail" type="text" id="mail" size="20"></td> </tr> <tr> <td>項目</td> <td>     <input type="checkbox" name="check[]" value="PHP">PHP <input type="checkbox" name="check[]" value="Perl">Perl <input type="checkbox" name="check[]" value="ASP">ASP <input type="checkbox" name="check[]" value="JSP">JSP</td> </tr> <tr> <td>お問い合わせ内容</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input name="mailform" type="submit" id="mailform" value="::入力内容を確認::">  <input type="reset" name="Submit" value="リセット"></td> </tr> </table> </form> </body>

    • 締切済み
    • PHP
  • PHPでのメールフォームにつてい。下記のソースで送信・受信できますか?

    それから、何処に、送信先のアドレスを入れればいいでしょうか?? <html lang="ja"> <head> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>mail</title> </head> <body> <br> <h3>Mail Form</h3> <!-- error --> <?PHPif ($error) { echo $error; }else{?><!-- form --> <form enctype="multipart/form-data" action="<?PHP echo EXE; ?>" method="post"> <table> <tr> <td>題名</td> <td><input type="text" name="subj" size="34" value="題名"></td> </tr> <tr> <td>アドレス</td> <td><input type="text" name="mail" size="34" value="あなたのアドレス"></td> </tr> <tr> <td>名前</td> <td><input type="text" name="name" size="34" value="ここに名前"</td> </tr> <tr> <td>内容</td> <td> <textarea name="???" cols="50" rows="10" wrap="soft"> ここに内容</textarea> </td> </tr> <tr> <td> File </td><td><input type="file" name="file" size="28"> <input type="submit" value="送信"> </td></tr> </table> <br> </body></html>

    • ベストアンサー
    • PHP
  • ボタンクリックでフォーカス移動

    JavaScript超ビギナーなので方法がよくわかりません。 フォームにテキストボックス(配列)4個あり ボタンを押すたびに未記入のテキストボックスにカーソルを移動したいのですが。どのようにしたらいいでしょうか。 <form name="form1" method="post"> <table width="200" border="1"> <tr><td ><input type="submit" name="Submit" value="送信"></td></tr> <tr><td ><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> <tr><td><input type="text" name="name1"></td></tr> </table> </form>

  • リスト上のtextボックスに数値を入れるJS

    以下の例えば120人のリストのテキストボックスに、テストの 順位を表す順位を1から120まで一括入力するボタンを設 けたいのですが、javascriptをご教示いただけますと幸 いです。さらに、順位は10とびで、10、20、30、・・・1200、 と入れるボタン(10ずつカウントアップ)もあるとうれ しいです。 よろしくお願い致します。 <form method="post" action="" name="myform"> <table> <tr><td>出席番号</td><td>氏名</td><td>順位を入力</td></tr> <tr><td>1</td><td>阿藤一郎</td><td><input type="text" name="rank" value=""></td></tr> <tr><td>2</td><td>伊藤次郎</td><td><input type="text" name="rank" value=""></td></tr> <tr><td>3</td><td>宇藤三郎</td><td><input type="text" name="rank" value=""></td></tr>    :   (以下、120人続く) <tr><td>120</td><td>加藤太郎</td><td><input type="text" name="rank" value=""></td></tr> </table> </form> なお、リストは120人とは限りません。 50人(50行、50テキストボックス)の場合も、 80人(80行、80テキストボックス)の場合もあり ます。

  • PHPで問い合わせフォーム 受信すると文字化けする

    フォーム⇒ (1)確認  ⇒ (2)送信 と3つに分けて、phpファイルに書きました。 ためしに、送信してみると、成功はするものの、文字が化けてメールの内容が分かりません。 分からないので教えてください。 フォーム ↓ <form method="POST" action="kakunin.php"> <table border="0"> <tr> <td >お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="naiyou" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value=" お問い合わせ内容を確認 "></td> </tr> </table> </form> (1) kakunin.php ↓ 入力フォームから情報を受け取り確認 <?php // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 値をチェックします。 $ErrFlg = 0; if ($name == "") { echo "<p>お名前を入力してください。"; $ErrFlg = 1; } if ($from == "") { echo "<p>メールアドレスを入力してください。"; $ErrFlg = 1; } if ($title == "") { echo "<p>メールタイトルを入力してください。"; $ErrFlg = 1; } if ($naiyou == "" ) { echo "<p>メッセージを入力してください。"; $ErrFlg = 1; } if ($ErrFlg) { exit(); } ?> 内容を確認して送信ボタンをクリックしてください <form method="POST" action="mail.php"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><?php echo $name?></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><?php echo $from?></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><?php echo $title?></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><?php echo nl2br($naiyou) ?></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<?php echo $name ?>"> <input type="hidden" name="from" value="<?php echo $from ?>"> <input type="hidden" name="title" value="<?php echo $title ?>"> <input type="hidden" name="naiyou" value="<?php echo $naiyou ?>"> </form> (2) mail.php ↓のコード 送信 <?php // メール送信先を指定します。 $to = "xxxxxxxxxx■ gmail.com"; // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // メール本文を組み立てます。 $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう