メールフォーム完成
本日でメールフォーム制作が終了した。
午後は少しだけDBに入った。百人一首のデータをさわった。
index.php
<?php //func.phpを呼び出し //ファイルを読み込む命令 ↓パスを読む書き方 require_once dirname(__FILE__) . '/func.php'; //初期化:ここの部分で空文字を設定してあげている $name=''; $email=''; $message=''; $error_name=''; $error_email=''; $error_message=''; //session_start(); この部分はfunc.phpにまとめた if(isset($_SESSION['mail']['name'])){ $name=$_SESSION['mail']['name']; }//sessionの値がセットされていたら$nemeに値を代入する if(isset($_SESSION['mail']['email'])){ $email=$_SESSION['mail']['email']; } if(isset($_SESSION['mail']['message'])){ $message=$_SESSION['mail']['message']; } //エラー情報をセッションから取得 if(isset($_SESSION['mail']['error_name'])){ $error_name=$_SESSION['mail']['error_name']; } if(isset($_SESSION['mail']['error_email'])){ $error_email=$_SESSION['mail']['error_email']; } if(isset($_SESSION['mail']['error_message'])){ $error_message=$_SESSION['mail']['error_message']; } ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>入力画面</title> <style> #container{ width: 800px; margin: 0 auto;} table{ border-collapse:collapse; margin-bottom:10px;} th{ background: pink; white-space: nowrap;} span{ font-size:12px;} span.red{ color: red; margin: 0 1em;} </style> </head> <body> <div id="container"> <form action="check.php" method="post"> <h1>入力画面</h1> <p>必要項目を入力して「確認する」ボタンをクリックしてください。</p> <table border="1"> <tr><th><label for="name">お名前<span>(30文字以内 :必須)</span></label></th><td><input style="text" name="name" id="name" value="<?php echo h($name); ?>" maxlength="30" placeholder="例:猫山猫尾" required autofocus><?php if(!empty($error_name)){echo '<span class="red">'.h($error_name).'</span>';} ?></td></tr> <tr><th><label for="email">Eメール<span>(50文字以内 :必須)</span></label></th><td><input type="email" name="email" id="email" value="<?php echo h($email); ?>" maxlength="50" placeholder="aaaa@aaaa.com" required><?php echo h($error_email); ?></td></tr> <tr><th><label for="message" >お問い合わせ<span>(150文字以内 :必須)</span></label></th><td><textarea name="message" id="message" maxlength="150" placeholder="お問い合わせ内容" required><?php echo h($message); ?></textarea><?php echo h($error_message); ?></td></tr> </table> <input type="submit" value="確認する"> </form> </div><!--/#container--> </body> </html>
check.php
<?php //func.phpを呼び出し require_once dirname(__FILE__) . '/func.php'; if(!isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['message'])){ header('Location:index.php');//本来はここに相対パスではなくフルパスを入れる exit; } $name=$_POST['name']; $email=$_POST['email']; $message=$_POST['message']; //初期化 $error_name=''; $error_email=''; $error_message=''; $success_flg = true; //空白を判定 //トリムで削除すると文字数が変わる 文字数をカウント if(mb_strlen(trim(mb_convert_kana($name,"s",'utf-8')))!=mb_strlen($name,'utf-8')){ $error_name ='名前の前後、あるいは全てに空白が使われています'; $success_flg = false; } //@マークが入っているかチェック if(strpos($email,'@')===false){ $error_email = '@がありません'; $success_flg = false; } //メールアドレスの半角全角チェック if(mb_strlen($email,'utf-8')!=strlen($email)){//文字のバイト数をチェック $error_email = '全角文字が入っています'; $success_flg = false; } //長さチェック if(mb_strlen($name,'utf-8')>30){ $error_name = 'お名前が長すぎます'; $success_flg = false; } if(mb_strlen($email,'utf-8')>50){ $error_email = 'アドレスが長すぎます'; $success_flg = false; } if(mb_strlen($message,'utf-8')>150){ $error_message = 'お問い合わせ内容が長すぎます'; $success_flg = false; } //空のチェック if(empty($name)){ $error_name='お名前を入力してください'; $success_flg = false; } if(empty($email)){ $error_email='Eメールを入力してください'; $success_flg = false; } if(empty($message)){ $error_message='お問い合わせ内容を入力してください'; $success_flg = false; } //session_start(); この部分はfunc.phpにまとめた $_SESSION['mail']['name']=$_POST['name']; $_SESSION['mail']['email']=$_POST['email']; $_SESSION['mail']['message']=$_POST['message']; $_SESSION['mail']['success_flg'] = $success_flg; //エラー情報をindexに渡すためにセッション利用 $_SESSION['mail']['error_name'] = $error_name; $_SESSION['mail']['error_email'] = $error_email; $_SESSION['mail']['error_message'] = $error_message; if(!$success_flg){ header('Location:index.php'); exit; } //メールの改ざんを防ぐため、セッションにもサクセスフラグ情報を埋め込む。 ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>入力確認画面</title> <style> #container{ width: 800px; margin: 0 auto;} table{ border-collapse:collapse; margin-bottom:10px;} th{ background: pink; white-space: nowrap;} </style> </head> <body> <div id="container"> <h1>入力確認画面</h1> <table border="1"> <tr><th>お名前:</th><td><?php echo h($name); ?></td></tr> <tr><th>Eメール:</th><td><?php echo h($email); ?></td></tr> <tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr> </table> <p><a href="index.php">フォームに戻る</a></p> <p><a href="send.php">メールを送信する</a></p> </div><!--/#container--> </body> </html>
send.php
<?php //func.phpを呼び出し require_once dirname(__FILE__) . '/func.php'; //session_start(); この部分はfunc.phpにまとめた // ↓直接打ち込んでセッションデータがないとき ↓値がfalseの時 if(!isset($_SESSION['mail']['success_flg']) || !$_SESSION['mail']['success_flg']){ header('Location:index.php'); exit; } $name=$_SESSION['mail']['name']; $email=$_SESSION['mail']['email']; $message=$_SESSION['mail']['message']; //var_dump($_SESSION); $_SESSION=array();//sessionファイルの中身を空にする unset($_SESSION['mail']);//sessionの小部屋を破棄するイメージ //cookieの削除 session_destoroyの前に書くにはそうしないとセッションネームが削除されているから。 if(isset($_COOKIE[session_name()])){ setcookie(session_name(),'',time()-200000,'/'); } session_destroy();//接続する設定を破壊しているイメージ //ヒアドキュメント $body=<<<EOF {$name}さんからメールが送信されました。 メールアドレスは{$email}です。 内容は、以下の通りです。 {$message} EOF; //var_dump($body); mb_send_mail('thouarttheman5@gmail.com','お問い合わせがありました',$body); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>メール送信画面</title> </head> <body> <h1>メール送信画面</h1> <p>以下内容でメールが送信されました</p> <table> <tr><th>お名前:</th><td><?php echo h($name); ?></td></tr> <tr><th>Eメール:</th><td><?php echo h($email); ?></td></tr> <tr><th>お問い合わせ内容:</th><td><?php echo nl2br(h($message)); ?></td></tr> </table> <p><a href="index.php">入力画面に戻る</a></p> </body> </html>
fanc.php
<?php //htmlspecialcharsが長いので関数化 function h($str){ return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } session_start();