構造
- index.php…フォームを記述、フォームをpostで送信
- check.php…送られた内容のチェック、合っていればsendへ、間違っていれば戻る
- send.php…メールの送信
- func.php…共通化できる関数をまとめ呼び出せるようにする
<?php
require_once dirname(__FILE__).'/func.php';
$name ='';
$email ='';
$message ='';
$name_error='';
$email_error='';
$message_error='';
if(isset($_SESSION['mail']['name'])){
$name = $_SESSION['mail']['name'];
}
if(isset($_SESSION['mail']['email'])){
$email = $_SESSION['mail']['email'];
}
if(isset($_SESSION['mail']['message'])){
$message = $_SESSION['mail']['message'];
}
if(isset($_SESSION['mail']['name_error'])){
$name_error = $_SESSION['mail']['name_error'];
}
if(isset($_SESSION['mail']['email_error'])){
$email_error = $_SESSION['mail']['email_error'];
}
if(isset($_SESSION['mail']['message_error'])){
$message_error = $_SESSION['mail']['message_error'];
}
?>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせフォーム</title>
<style>
span {
color:red;
}
</style>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<form action="check.php" method="post">
<table>
<tr>
<th><label for="name">お名前:</label>(20文字以内)</th><td><input type="text" name="name" id="name" value="<?php echo h($name);?>" maxlength="20" maxlength="20" size="50" placeholder="例:猫田猫男" required autofocus>
<?php
if(!empty($name_error)){
echo "<span>{$name_error}</span>";
}
?>
</td>
</tr>
<tr>
<th><label for="email">Eメール:</label>(25文字以内)</th><td><input type="email" name="email" id="email" value="<?php echo h($email);?>" maxlength="25" placeholder="例:example@example.com" size="50" required><?php if(!empty($email_error)){echo "<span>{$email_error}</span>";}?></td>
</tr>
<tr>
<th><label for="message">お問い合わせ:</label>(150文字以内)</th><td><textarea name="message" id="message" maxlength="150" placeholder="例:資料を請求いたします。" cols="40" rows="5" required><?php echo h($message);?></textarea><?php if(!empty($message_error)){echo "<span>{$message_error}</span>";}?></td>
</tr>
</table>
<input type="submit" value="確認">
</form>
</body>
</html>
<?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'];
$success = true;
$name_error='';
$email_error='';
$message_error='';
if(strpos($email,'@')===false){
$email_error = '@マークがありません';
$success = false;
}
if(strlen($email)!=mb_strlen($email,'utf-8')){
$email_error = 'Eメールに全角文字が含まれています';
$success = false;
}
if(mb_strlen($name,'utf-8')>20){
$name_error = 'お名前が長すぎます';
$success = false;
}
if(mb_strlen($email,'utf-8')>25){
$email_error = 'Eメールが長すぎます';
$success = false;
}
if(mb_strlen($message,'utf-8')>150){
$message_error = 'お問い合わせ内容が長すぎます';
$success = false;
}
if(empty($name)){
$name_error= '名前が入力されてません';
$success = false;
}
if(empty($email)){
$email_error= 'Eメールが入力されてません';
$success = false;
}
if(empty($message)){
$message_error= 'お問い合わせ内容が入力されてません';
$success = false;
}
$_SESSION['mail']['name']= $_POST['name'];
$_SESSION['mail']['email']= $_POST['email'];
$_SESSION['mail']['message']= $_POST['message'];
$_SESSION['success'] = $success;
$_SESSION['mail']['name_error'] = $name_error ;
$_SESSION['mail']['email_error'] = $email_error ;
$_SESSION['mail']['message_error'] = $message_error ;
if(!$success){
header('Location:index.php');
exit;
}
?>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
</head>
<body>
<h1>お問い合わせ確認</h1>
<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>
<p><a href="send.php">送信</a></p>
</body>
</html>
<?php
require_once dirname(__FILE__).'/func.php';
if(!$_SESSION['mail']['success']){
header('Location:index.php');
exit;
}
$name = $_SESSION['mail']['name'];
$email = $_SESSION['mail']['email'];
$message = $_SESSION['mail']['message'];
$_SESSION = array();
unset($_SESSION['mail']);
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();
$body =<<<EOF
{$name}様よりお問い合わせメールが送信されました。
内容は以下の通りです
******************************
{$message}
{$name}様のメールアドレス:{$email}
EOF;
$r=mb_send_mail('xxxx@.com','お問い合わせメール',$body);
?>
<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>
<?php
function h($str){
return htmlspecialchars($str,ENT_QUOTES,'utf-8');
}
session_start();