• 締切済み

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