実現したいこと
①チェックボックスで複数選択をした際にも、管理者宛のお問合せ内容確認メールに複数項目を反映したい。
②複数項目選択可能のチェックボックスを必須項目にしたい。
発生している問題・分からないこと
①Q1とQ2において、複数選択をした際にお問合せ内容確認メールに複数項目が反映されない(空欄になる)。その他を選択した場合のみ、項目「その他」がお問合せ内容確認メールに反映される。
②Q1とQ2を必須項目にしたいが、無選択の場合でも送信できてしまう。
該当のソースコード
HTML
1<tr> 2 <th>Q1 該当項目をお選びください。(複数チェック可)</th> 3 <td> 4 <label><input type="checkbox" name="type" value="項目1" class="js-check" ><span>項目1</span></label> 5 <label><input type="checkbox" name="type" value="項目2" class="js-check"><span>項目2</span></label> 6 <label><input type="checkbox" name="type" value="その他" class="js-check" 7 onclick="toggleOtherInput('type', 'otherInputBox1')"><span>その他</span></label> 8 <div id="otherInputBox1" style="display: none;"> 9 <input type="text" name="otherType" placeholder="その他をチェックした方はこちらにご記入ください"> 10 </div> 11 </td> 12</tr> 13<tr> 14 <th>Q2 該当項目をお選びください。(複数チェック可)</th> 15 <td> 16 <label><input type="checkbox" name="problem" value="項目3" class="js-check"><span>項目3</span></label> 17 <label><input type="checkbox" name="problem" value="項目4" class="js-check"><span>項目4</span></label> 18 <label><input type="checkbox" name="problem" value="項目5" class="js-check"><span>項目5</span></label> 19 <label><input type="checkbox" name="problem" value="その他" class="js-check" 20 onclick="toggleOtherInput('problem', 'otherInputBox3')"><span>その他</span></label> 21 <div id="otherInputBox3" style="display: none;"> 22 <input type="text" name="otherProblem" placeholder="その他をチェックした方はこちらにご記入ください"> 23 </div> 24 </td> 25<tr> 26<tr> 27 <th class="input">Q3 該当項目をお選びください。</th> 28 <td> 29 <label><input type="radio" name="status" value="項目6" class="js-check" onclick="formSwitch('otherInputBox4')" 30 required><span>項目6</span></label> 31 <label><input type="radio" name="status" value="項目7" class="js-check" required><span>項目7</span></label> 32 <div id="otherInputBox4" style="display: none;"> 33 <input type="text" name="otherToolName" placeholder="項目6をお選びになった方はこちらに詳細をご記入ください"> 34 </div> 35 </td> 36</tr> 37 38====================================================================== 39 40 41<script> 42 document.querySelector('form').addEventListener('submit', function (event) { 43 event.preventDefault(); // フォームのデフォルト送信を防ぐ 44 const formData = new FormData(this); 45 46 fetch('send_mail.php', { 47 method: 'POST', 48 body: formData 49 }) 50 .then(response => response.text()) 51 .then(data => { 52 window.location.href = 'thank_you.html'; 53 }) 54 .catch(error => { 55 console.error('Error:', error); 56 }); 57 }); 58 59 60 function toggleOtherInput(groupName, inputBoxId) { 61 // チェックされている「その他」以外の入力欄を非表示にする 62 const checkboxes = document.querySelectorAll(`input[name="${groupName}"]`); 63 const selectedInputBox = document.getElementById(inputBoxId); 64 let showOtherInput = false; 65 66 // チェックされている項目に「その他」が含まれているか確認 67 checkboxes.forEach((checkbox) => { 68 if (checkbox.checked && checkbox.value === "その他") { 69 showOtherInput = true; 70 } else if (checkbox.checked && checkbox.value !== "その他") { 71 showOtherInput = false; 72 } 73 }); 74 75 // 「その他」がチェックされている場合のみ表示 76 selectedInputBox.style.display = showOtherInput ? "block" : "none"; 77 } 78 79 80 function formSwitch(inputBoxId) { 81 // 他の「その他」入力欄を非表示にする 82 document.querySelectorAll('[id^="otherInputBox"]').forEach(function (box) { 83 box.style.display = "none"; 84 }); 85 86 // 該当する入力欄のみ表示する 87 if (inputBoxId) { 88 var selectedInputBox = document.getElementById(inputBoxId); 89 if (selectedInputBox) { 90 selectedInputBox.style.display = "block"; 91 } 92 } 93 } 94 // ページ読み込み時に初期化 95 window.addEventListener('load', formSwitch); 96 97 98</script>
send_mail.php
1<?php 2if ($_SERVER["REQUEST_METHOD"] == "POST") { 3 $type = htmlspecialchars($_POST['type']); 4 $otherType = htmlspecialchars($_POST['otherType']); 5 $problem = htmlspecialchars($_POST['problem']); 6 $otherProblem = htmlspecialchars($_POST['otherProblem']); 7 $status = htmlspecialchars($_POST['status']); 8 $otherToolName = htmlspecialchars($_POST['otherToolName']); 9 10 $to = "メールアドレスを入れています"; 11 $subject = "株式会社〇〇|お問合せがありました"; 12 $body = "下記内容でお問合せがありました\n\n"; 13 $body .= "Q1 質問1: $type\n"; 14 $body .= "[【Q1でその他】を選択した方のみ]その他の内容: $otherType\n"; 15 $body .= "Q2 質問2: $problem\n"; 16 $body .= "[【Q2でその他】を選択した方のみ]その他の内容: $otherProblem\n"; 17 $body .= "Q3 質問3: $status\n"; 18 $body .= "[【Q3で項目1】を選択した方のみ]項目1の詳細: $otherToolName\n"; 19 20 21 $headers = "From: no-reply@aaa.co.jp"; 22 23 if (mail($to, $subject, $body, $headers)) { 24 echo "success"; 25 } else { 26 echo "failure"; 27 } 28} else { 29 echo "不正なリクエストです。"; 30} 31 32if ($_SERVER['REQUEST_METHOD'] === 'POST') { 33 $recaptchaSecret = ''; 34 $recaptchaResponse = $_POST['g-recaptcha-response']; 35 36 // reCAPTCHAの検証リクエストを送信 37 $url = 'https://www.google.com/recaptcha/api/siteverify'; 38 $data = [ 39 'secret' => $シークレットキー, 40 'response' => $recaptchaResponse 41 ]; 42 43 $options = [ 44 'http' => [ 45 'method' => 'POST', 46 'header' => 'Content-type: application/x-www-form-urlencoded', 47 'content' => http_build_query($data) 48 ] 49 ]; 50 51 $context = stream_context_create($options); 52 $result = file_get_contents($url, false, $context); 53 $resultJson = json_decode($result); 54 55 // reCAPTCHAの検証結果を確認 56 if ($resultJson->success != true) { 57 echo 'reCAPTCHA verification failed. Please try again.'; 58 } else { 59 // ここにフォーム処理のコードを追加 60 echo 'reCAPTCHA verification succeeded.'; 61 } 62} 63
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
いろいろ調べましたが、わかりませんでした。
補足
恥ずかしながらjavasscriptとPHPの初学者でして、どこのコードに問題があるのかわかりかねるため修正箇所を教えていただけないでしょうか。
該当と思われる箇所のコードを添付いたします。
記載内容以外で必要な内容があればご質問頂けますと幸いです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/11 01:46