WEBデザインの学習 | ナイアルラトホテップ

このブログは池袋にあるフェリカテクニカルアカデミーで学んだ学習過程を記録するためのものです。HTML+CSS及びJavaScript、jQueryなど。

メールフォーム完成

本日でメールフォーム制作が終了した。
午後は少しだけ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文字以内&nbsp;:必須)</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文字以内&nbsp;:必須)</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文字以内&nbsp;:必須)</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();