2014.6.12

お問い合わせフォーム

------------------------------index.html------------------------------

<?php
//dirname(__FILE__)→ディレクトリー(親)からのパスを探している。(Cドライブのどこか的な・・・なくてもOK)↓
require_once dirname(__FILE__).'/init.php';
$name="";
$email="";
$tel="";
$message="";
//thanksまでで記載した時に間違いを見つけindexに戻った際にthanksまでに打った文字を記載させとくため下記を打つ。↓
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'];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせ入力フォーム</title>
<link rel="stylesheet" href="css/style1.css">
</head>
<body>
<div id="container">
<h1>お問い合わせ入力フォーム</h1>
<!--valueに記載すると初期値になる--><!--requiredはエラーメッセージの表示のため記載-->
<form action="check.php" method="post" id="mailform">
<table>
<tr class="small">
<th><label for="name">お名前:&nbsp;&nbsp;<span>※必須</span>&nbsp;&nbsp;(30文字以内)</label></th>
<td><input type="text" name="name" id="name" size="60" maxlength="30" placeholder="例:佐藤寛子" value="<?php print e($name); ?>" required></td>
</tr>
<!--input type="email"にすると@が入っていませんとなりエラーがでる。-->
<tr class="small">
<th><label for="email">email:<br><span>※必須</span>&nbsp;&nbsp;(50文字以内)</label></th>
<td><input type="email" name="email" id="email" size="60" maxlength="50" placeholder="例:sample@xxx.com" value="<?php print e($email); ?>" required></td>
</tr>
<tr class="small">
<th><label for="tel">お電話番号:&nbsp;&nbsp;<span>※必須</span>&nbsp;&nbsp;(半角数字)</label></th>
<td><input type="tel" name="tel" id="tel" size="60" maxlength="15" placeholder="例:123-4567-8910" value="<?php print e($tel); ?>" required></td>
</tr>
<tr class="small">
<th><label for="message">お問い合わせ:&nbsp;&nbsp;<span>※必須</span>&nbsp;&nbsp;(128文字以内)</label></th>
<td><textarea name="message" id="message" cols="50" rows="5" maxlength="128" placeholder="例:御社商品の資料請求を致します。" required><?php print e($message); ?></textarea></td>
</tr>
</table>
<input type="submit" value="確認">
</form>
</div>
</body>
</html>
<?php
ob_end_flush();

------------------------------check.php------------------------------

<?php
require_once dirname(__FILE__).'/init.php';//htmlspecialchars命令をし、無害な文字列にさせる
//CRSF のいたずら防止
/*
$referer_domain='';
if(strpos($_SERVER[HTTP_REFERER],$referer_domain)===false){
header('Location:index.php');
exit
}
*/
if(empty($_POST)){//直接http:のアドレスに直接アクセスされたとき(不正アクセスされたとき)に跳ね返すための処理/if(empty($_POST===true)){
    header('Location:index.php');//header('Location:index.php');→ここのページに飛ばしますよ☆
    exit;//exit;→この先の処理をしませんよってこと。
}
//var_dump($_POST);
$name=$_POST['name'];//$_POST[]:グローバル変数(普通の変数とは違う)//$nameに$_POST['name']の値に変えている
$email=$_POST['email'];
$tel=$_POST['tel'];
$message=$_POST['message'];
$error=true;

$name_error='';//各項目の値が空かどうか確認(空だった場合は下記の記述が表示される)
$email_error='';
$tel_error='';
$message_error='';
//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・文字長さチェック
//日本語は3byteなので10字以上打ったらエラーがでる。そのため、mb_strlen($name,'utf-8')>30と記載してあげる。他のも同様。
if(mb_strlen($name,'utf-8')>30){//strlen→文字の数を決める
    $name_error='お名前が長すぎます。';
    $error=false;
}
if(mb_strlen($email,'utf-8')>50){
    $email_error='メールアドレスが長すぎます。';
    $error=false;
}
if(mb_strlen($tel,'utf-8')>13){
    $tel_error='電話番号が長すぎます。';
    $error=false;
}
if(mb_strlen($message,'utf-8')>128){
    $message_error='お問い合わせ内容が長すぎます。';
    $error=false;
}
//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・@チェック
if(strpos($email,'@')===false){//@の有無の確認
    $email_error='不正なメールアドレスです。';
    $error=false;
}
//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・半角文字チェック
if(strlen($tel)!==mb_strlen($tel,"utf-8")){//半角数字にする(!==mb_strlen($tel,"utf-8"))
    $tel_error='半角数字で入力してください。';
    $error=false;
}
if(strlen($email)!==mb_strlen($email,"utf-8")){
    $email_error='半角数字で入力してください。';
    $error=false;
}

//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・空文字チェック
if($name==''){//($name=='')→何かはいっている時は$name_error='';$error=false;を通り抜ける
    $name_error='お名前が入力されていません。';
    $error=false;
}
if($email==''){
    $email_error='メールアドレスが入力されていません。';
    $error=false;
}
if($tel==''){
    $tel_error='お電話番号が入力されていません。';
    $error=false;
}
if($message==''){
    $message_error='お問い合わせ内容が入力されていません。';
    $error=false;
}
$_SESSION['mail_data'] ['name'] =$name;
$_SESSION['mail_data'] ['email'] =$email;
$_SESSION['mail_data'] ['tel'] =$tel;
$_SESSION['mail_data'] ['message'] =$message;
$_SESSION['mail_data'] ['error'] =$error;
//var_dump($_SESSION['mail_data'] ['name']);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせ確認画面</title>
<link rel="stylesheet" href="css/style1.css">
</head>
<body>
<div id="container">
<h1>お問い合わせ確認</h1>
<table>
<tr class="small">
<th>お名前:</th><td><?php print e($name).e($name_error); ?></td>
</tr>
<tr class="small">
<th>email:</th><td><?php print e($email).e($email_error); ?></td>
</tr>
<tr class="small">
<th>お電話番号:</th><td><?php print e($tel).e($tel_error); ?></td>
</tr>
<tr class="small">
<th>お問い合わせ内容:</th><td><?php print nl2br(e($message).e($message_error)); ?></td>
</tr>
</table>
<p><a href="index.php">戻る</a>
<?php
if($error){
    echo '<a href="thanks.php">送信</a>';
}
?>
</p>
</div>
</body>
</html>
<?php
ob_end_flush();

------------------------------thanks.php------------------------------

<?php
require_once dirname(__FILE__).'/init.php';
if(!$_SESSION['mail_data'] ['error']){
header('Location:index.php');
exit;
}//teurではない場合index.phpに飛ぶ
//var_dump($_SESSION);
$name = $_SESSION['mail_data'] ['name'];//セッションから値を$nameの値に変換
$email = $_SESSION['mail_data'] ['email'];
$tel = $_SESSION['mail_data'] ['tel'];
$message = $_SESSION['mail_data'] ['message'];
//var_dump($_SESSION['mail_data'] ['name']);
//セッションをとっておく必要がないのでクリア↓
$_SESSION['mail_data']=array();//array()→mail_dataの中身をクリア(初期化)
unset($_SESSION['mail_data']);//unset→$_SESSION['mail_data']をクリア(初期化)
if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-4200,'/');//time()-4200→有効時間
}//thanksまで打ち終わったらcookieのコンテンツのアドレスが消える(有効期限が切れる)
session_destroy(); //セッションを破棄する
//クライアントへのメール送信↓
$to='piroko.happysmiling@gmail.com';
$subject='お問い合わせメール';
$from=$email;
$body=<<<BODY
【お問い合わせメール】
以下内容で承りました。
お名前:
{$name}
メールアドレス:
{$email}
お電話番号:
{$tel}
メッセージ:
{$message}
BODY;
//メールのエンコーディング設定↓
mb_language('Japanese');
mb_internal_encoding('UTF-8');
$r=mb_send_mail($to,$subject,$body);//mb_send_mail("送信先","表題","本文","ヘッダオプション");
//var_dump($r);
$thanks_message='上記の内容でお問い合わせメールを承りました。';
if(!$r){
    $thanks_message='メール送信エラー。以下のお問い合わせは送信されませんでした。';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>送信終了</title>
<link rel="stylesheet" href="css/style1.css">
</head>
<body>
<div id="container">
<h1>送信終了</h1>
<p></p>
<table>
<tr>
<th>お名前:</th>
<td><?php print e($name); ?></td>
</tr>
<tr>
<th>email:</th>
<td><?php print e($email); ?></td>
</tr>
<tr>
<th>お電話番号:</th>
<td><?php print e($tel); ?></td>
</tr>
<tr>
<th>お問い合わせ内容:</th>
<td><?php print nl2br(e($message)); ?></td>
</tr>
</table>
<p>
<?php
if(!$r){
    print '<span>'.e($thanks_message).'</span>';
}else{
    print e($thanks_message);
}
?>
</p>
<p id="sbubutton"><a href="index.php">戻る</a></p>
</div>
</body>
</html>
<?php
ob_end_flush();

------------------------------init.php------------------------------

<?php
function e($str,$charset='UTF-8'){
    return htmlspecialchars($str,ENT_QUOTES,$charset);
}//html~・・・などの関数をまとめてeという関数に置き換え、リンクさせて使用。
header('X-Frame-OPTIONS:DENY');//いたずら防止のため
ob_start();
session_start();
session_regenerate_id(true);//Session Fixationを原因としたセッションハイジャックを防ぐために、セッションIDを置き換える関数