Bootstrap サイトにメールフォームを作成
Bootstrapテンプレートで作成したサイトに、
メールフォームを設置しました。
《index.php》
以下を、htmlの直前に記述
<?php require_once(dirname(__FILE__)).'/init.php'; //require_once 'init.php'; $name = ''; $email = ''; $tel = ''; $message = ''; if(isset($_SESSION['mail_data'])) { $name = $_SESSION['mail_data']['name']; $email = $_SESSION['mail_data']['email'] ; $tel = $_SESSION['mail_data']['tel'] ; $message = $_SESSION['mail_data']['message']; } ?>
《index.php》 お問い合わせフォーム
<div id="contact"> <h1>Contact</h1> <form action="check.php" method="post" id="mailform"> <table> <tr> <th><label for="name">お名前: <em>※</em></label></th> <td><input type="text" name="name" id="name" size="30" placeholder="例:鈴木一郎" value = "<?php echo h($name); ?>" ></td> </tr> <tr> <th><label for="email">email: <em>※</em> </label></th> <td><input type="text" name="email" id="email" size="30" placeholder="例:sample@sample.com" value ="<?php echo h($email); ?>"></td> </tr> <tr> <th><label for="tel">お電話番号:</label></th> <td><input type="text" name="tel" id="tel" size="30" placeholder="例:123-4567-8910(半角数字)" value ="<?php echo h($tel); ?>"></td> </tr> <tr> <th><label for="message">お問い合わせ: <em>※</em></label></th> <td><textarea name="message" id="message" cols="30" rows="5" placeholder="お仕事のご依頼・お問い合わせ"><?php echo h($message); ?></textarea></td> </tr> <tr><th></th><td><input type="submit" class="btn" value="確認"></td></tr> </table> </form> </div>
《init.php》
<?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); } header('X-Frame-OPTIONS:DENY'); ob_start(); session_start(); session_regenerate_id(true);
《check.php》
<?php require_once(dirname(__FILE__)).'/init.php'; //require_once 'init.php'; //空データチェック //データがなければ先頭(入力)ページに戻す if(empty($_POST)) { header('Location:index.php'); exit; } //var_dump($_POST); //print_r($_POST); $name = $_POST['name']; $email = $_POST['email']; $tel = $_POST['tel']; $message = $_POST['message']; $error = true; //echo '('.$name.')'; $name_error = ''; $email_error = ''; $tel_error = ''; $message_error = ''; if( mb_strlen($name) > 30 ) { $name_error = 'お名前の入力文字数が多すぎます。'; $error = false; } //受け取れるメールアドレスの限界値は320 //ローカルパート(@の前は64文字) if( mb_strlen($email) > 50 ) { $email_error = 'メールアドレスの入力文字数が多すぎます。'; $error = false; } // if( mb_strlen($tel) > 13 ) { $tel_error = '電話番号の入力文字数が多すぎます。'; $error = false; } if( mb_strlen($message) > 128 ) { $message_error = 'お問い合わせ内容の入力文字数が多すぎます。'; $error = false; } //メールアドレス@チェック if(strpos($email,'@')===false) { $email_error = '不正なメールアドレスです。'; $error = false; } //半角入力チェック(email) if(strlen($email) !==mb_strlen($email, "UTF-8")){ $email_error = 'すべて半角数字で入力してください。'; $error = false; } //半角入力チェック(電話番号) if(strlen($tel) !==mb_strlen($tel, "UTF-8")){ $tel_error = 'すべて半角数字で入力してください。'; $error = false; } //空文字チェック if($name =='') { $name_error = 'お名前が、入力されていません。'; $error = false; } if($email =='') { $email_error = 'メールアドレスが、入力されていません。'; $error = false; } /*if($tel =='') { $tel_error = 'お電話番号が、入力されていません。'; $error = false; }*/ if($message =='') { $message_error = 'メッセージが、入力されていません。'; $error = false; } //エラーチェックをこの直前に挿入(6/5) $_SESSION['mail_data']['name'] = $name; //var_dump($_SESSION['mail_data']['name']); $_SESSION['mail_data']['email'] = $email; //var_dump($_SESSION['mail_data']['email']); $_SESSION['mail_data']['tel'] = $tel; //var_dump($_SESSION['mail_data']['tel']); $_SESSION['mail_data']['message'] = $message; //var_dump($_SESSION['mail_data']['message']); $_SESSION['mail_data']['error'] = $error; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>お問い合わせ確認</title> <link rel="stylesheet" href="css/stylish-portfolio.css"> <style> table { /*border-collapse: collapse;*/ } </style> </head> <body> <div id="contact"> <h1>お問い合わせ内容(確認画面)</h1> <table id="frmTbl" border="1px"> <tr> <th>お名前:</th><td><?php echo h($name).h($name_error); ?></td> </tr> <tr> <th>email:</th><td><?php echo h($email).h($email_error); ?></td> </tr> <tr> <th>お電話番号:</th><td><?php echo h($tel).h($tel_error); ?></td> </tr> <tr> <th>お問い合わせ内容:</th><td><?php echo nl2br(h($message).h($message_error)); ?></td> </tr> </table> <p><a href="index.php">戻る</a> <?php if($error) { echo '<a href="thanks.php">送信</a>'; } ?> </p> </div><!--contact--> </body> </html> <?php ob_end_flush();
《thanks.php》
<?php require_once(dirname(__FILE__)).'/init.php'; //require_once 'init.php'; //var_dump($_SESSION); if(!$_SESSION['mail_data']['error']) { header('Location:index.php'); exit; } //セッションから値を取得 $name = $_SESSION['mail_data']['name']; $email = $_SESSION['mail_data']['email'] ; $tel = $_SESSION['mail_data']['tel'] ; $message = $_SESSION['mail_data']['message']; //$data = $_SESSION['mail_data']; //var_dump($data); //セッションを取っておく必要がないのでクリア $_SESSION['mail_data'] = array(); unset($_SESSION['mail_data']); if(isset($_COOKIE[session_name()] )) { setcookie( session_name(), '', time()-42000, '/'); } session_destroy(); //セッションを破棄する //クライアントへのメール送信内容の設定 $to = "XXXXXX@yahoo.co.jp"; //メール送信宛先 $subject = 'お問い合わせ'; $from = $email; //$body = $name . $email . $tel . $message; $body = <<< BODY 【お問い合わせメール】 以下内容で承りました。 お名前: {$name} メールアドレス: {$email} お電話番号: {$tel} メッセージ: {$message} BODY; //メールのエンコーディング設定 mb_language('japanese'); mb_internal_encoding('UTF-8'); $r = mb_send_mail($to, $subject, $body); //var_dump($r); //mb_send_mail("送信先","表題","本文","ヘッダオプション"); $thanks_message = '上記の内容でお問い合わせメールを承りました。'; if(!$r) { $thanks_message = 'メール送信エラー。以下お問い合わせは送信されませんでした。'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>送信終了</title> <link rel="stylesheet" href="css/stylish-portfolio.css"> <style> th { backgroud: #D3D3D3; } </style> </head> <body> <div id="contact"> <h1>送信終了</h1> <table id="frmTbl" border="1px"> <tr class="small"> <th>お名前:</th> <td><?php echo h($name); ?></td> </tr> <tr class="small"> <th>email:</th> <td><?php echo h($email); ?></td> </tr> <tr class="small"> <th>お電話番号:</th> <td><?php echo h($tel); ?></td> </tr> <tr> <th>お問い合わせ内容:</th> <td><?php echo nl2br(h($message)); ?></td> </tr> </table> <p> <?php if(!$r) { echo '<span>'.h($thanks_message).'</span>'; } else { echo h($thanks_message); } ?> </p> <p id="sbubutton"><a href="index.php">戻る</a></p> </div><!--contact--> </body> </html> <?php ob_end_flush();