下記サイトを参考にし、問い合わせフォームを作成したのですが、
脆弱性や気になる点などあれば、助言を頂けると助かります。
https://designsupply-web.com/knowledgeside/1642/
入力 → 確認 → 送信 と画面を遷移してメールを送ります。
入力ページ
php
1 2<form id="mail-form" action="./confirm.php" method="post"> 3 <dl> 4 <dt>会社名<span class="hissu">必須</span></dt> 5 <dd> 6 <input type="text" class="validate required" id="company" name="company" value="" placeholder="株式会社〇〇〇"> 7 <span class="error_required"></span> 8 <span class="error_company"></span> 9 </dd> 10 </dl> 11 <dl> 12 <dt>住所</dt> 13 <dd><input type="text" class="" id="address" name="address" value="" size="50"> 14 <span class="error_required"></span> 15 <span class="error_address"></span> 16 </dd> 17 </dl> 18 <dl> 19 <dt>氏名<span class="hissu">必須</span></dt> 20 <dd><input type="text" class="validate required" id="name" size="50" name="name" value="" placeholder="山田 花子"> 21 <span class="error_required"></span> 22 <span class="error_name"></span> 23 </dd> 24 </dl> 25 <dl> 26 <dt>電話番号<span class="hissu">必須</span></dt> 27 <dd><input type="text" class="validate required tel" id="tel" size="50" name="tel" value="" size="14" maxlength="14" placeholder="091-123-4567"> 28 <span class="error_tel"></span> 29 </dd> 30 </dl> 31 <dl> 32 <dt>メールアドレス<span class="hissu">必須</span></dt> 33 <dd> 34 <input type="text" value="" size="50" name="email" class="email validate required"/> 35 </dd> 36 </dl> 37 <dl> 38 <dt>お問い合わせ内容<span class="hissu">必須</span></dt> 39 <dd><textarea id="message" class="validate required" name="message" value="" rows="5" cols="50"></textarea> 40 <span class="error_required"></span> 41 </dd> 42 </dl> 43 <button type="input-submit-check" id="input-submit-check" value="input-submit-check" name="input-submit-check">同意し、確認画面へ</button> 44 </form> 45
確認ページ
php
1<?php 2 $postData = $_POST; 3 $page_flag = 0; 4 $error = array(); 5 function formValidation($postData) { 6 $error = array(); 7 if(empty($postData['company'])) { 8 $error[] = "会社名を入力してください"; 9 } 10 if(empty($postData['name'])) { 11 $error[] = "お名前を入力してください"; 12 } else if(!preg_match('/^[ぁ-んァ-ヶー一-龠 \r\n\t]+$/',$postData['name'])) { 13 $error[] = "お名前は全角文字で入力してください"; 14 } 15 if(empty($postData['email'])) { 16 $error[] = "メールアドレスを入力してください"; 17 } else if(!preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/',$postData['email'])) { 18 $error[] = "メールアドレスを正しく入力してください"; 19 } 20 if(empty($postData['tel'])) { 21 $error[] = "電話番号を入力してください"; 22 } else if(!preg_match('/^0\d{1,4}-\d{1,4}-\d{3,4}$/',$postData['tel'])) { 23 $error[] = "電話番号を正しく入力してください"; 24 } 25 if(empty($postData['message'])) { 26 $error[] = "問い合わせ内容を入力してください"; 27 } else if(!preg_match('/^[ぁ-んァ-ヶー一-龠]+$/',$postData['message'])) { 28 $error[] = "全角文字で入力してください"; 29 } 30 return $error; 31 } 32 $error = formValidation($postData); 33 if(empty($postData['input-submit-check']) || !empty($error)) { 34 $page_flag = 1; 35 } else { 36 $page_flag = 0; 37 } 38?> 39 40<form id="confirm" action="./send.php" method="post"> 41 <input type="hidden" name="company" value="<?php echo $company; ?>"> 42 <input type="hidden" name="address" value="<?php echo $address; ?>"> 43 <input type="hidden" name="name" value="<?php echo $name; ?>"> 44 <input type="hidden" name="email" value="<?php echo $email; ?>"> 45 <input type="hidden" name="tel" value="<?php echo $tel; ?>"> 46 <input type="hidden" name="message" value="<?php echo $message; ?>"> 47 48 <?php if($page_flag == 1): ?> 49<ul class="error"> 50 <?php foreach( $error as $value ): ?> 51 <li><?php echo $value; ?> 52 </li> 53 <?php endforeach; ?> 54</ul> 55<?php endif; ?> 56 <dl> 57 <dt> 58 <label>会社名</label> 59 </dt> 60 <dd><?php echo htmlspecialchars($_POST['company'], ENT_QUOTES, 'UTF-8'); ?></dd> 61 </dl> 62 <dl> 63 <dt> 64 <label>住所</label> 65 </dt> 66 <dd><?php echo htmlspecialchars($_POST['address'], ENT_QUOTES, 'UTF-8'); ?></dd> 67 </dl> 68 <dl> 69 <dt> 70 <label>ご担当者 氏名</label> 71 </dt> 72 <dd><?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?></dd> 73 </dl> 74 <dl> 75 <dt> 76 <label>電話番号</label> 77 </dt> 78 <dd><?php echo htmlspecialchars($_POST['tel'], ENT_QUOTES, 'UTF-8'); ?></dd> 79 </dl> 80 <dl> 81 <dt> 82 <label>メールアドレス</label> 83 </dt> 84 <dd><?php echo htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?></dd> 85 </dl> 86 <dl> 87 <dt> 88 <label>お問い合わせ内容</label> 89 </dt> 90 <dd><?php echo htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'); ?></dd> 91 </dl> 92 <div class="btnBlock"> 93 <p class="btn02"><a class="button" value="内容を修正する" onclick="history.back(-1)"><span>内容を修正する</span></a></p> 94 95 <?php 96 if($page_flag == 0) { 97 echo '<button type="submit" id="submit" name="submit">送信する</button>'; 98 } 99?> 100 </div> 101 </form>
完了ページ
php
1<?php 2session_start(); 3if(!$_SESSION){ 4 header('Location: ./input.php'); 5} 6 $company = $_POST["company"]; 7 $address = $_POST["address"]; 8 $name = $_POST["name"]; 9 $email = $_POST["email"]; 10 $tel = $_POST["tel"]; 11 $message = $_POST["message"]; 12$add_header ="From:info@\n"; 13$add_header .= "Reply-to: info@\n"; 14$add_header .= "X-Mailer: PHP/". phpversion(); 15//自動返信メール本文 16$messageuser = sprintf("%s",$name); 17$messageuser .= " 様\n\n"; 18$messageuser .= "この度はお問い合わせいただき誠にありがとうございます。\n\n"; 19$messageuser .= "下記の内容でお問い合わせを承りました。\n\n\n"; 20$messageuser .= "================================\n\n"; 21$messageuser .= sprintf("会社名:%s\n",$company); 22$messageuser .= sprintf("住所:%s\n",$address); 23$messageuser .= sprintf("お名前:%s\n",$name); 24$messageuser .= sprintf("メールアドレス:%s\n",$email); 25$messageuser .= sprintf("電話番号:%s\n",$tel); 26$messageuser .= sprintf("お問い合わせ内容:%s\n",$message); 27$messageuser .= "================================\n\n"; 28//管理者確認用メール本文 29$messageadmin = "フォームより下記の内容でお問い合わせがありました。\n\n\n"; 30$messageadmin .= "================================\n\n"; 31$messageadmin .= sprintf("会社名:%s\n",$company); 32$messageadmin .= sprintf("住所:%s\n",$address); 33$messageadmin .= sprintf("お名前:%s\n",$name); 34$messageadmin .= sprintf("メールアドレス:%s\n",$email); 35$messageadmin .= sprintf("電話番号:%s\n",$tel); 36$messageadmin .= sprintf("お問い合わせ内容:%s\n",$message); 37$messageadmin .= "================================\n\n"; 38//メール設定 39mb_language("ja"); 40mb_internal_encoding("UTF-8"); 41//自動返信メール送信設定 42mb_send_mail($email,"お問い合わせありがとうございます",$messageuser,$add_header); 43//管理者確認用メール送信設定 44mb_send_mail("info@","コンタクトフォームよりお問い合わせがありました",$messageadmin,$add_header); 45session_destroy(); 46?>
回答3件
あなたの回答
tips
プレビュー