Webデザインの勉強と製作 | あかとんぼ

フェリカテクニカルアカデミーの学習をベースに、Webについての勉強と製作の過程をまとめています。

[PHP]フォームの制作…まとめ

構造

  • index.php…フォームを記述、フォームをpostで送信
  • check.php…送られた内容のチェック、合っていればsendへ、間違っていれば戻る
  • send.php…メールの送信
  • func.php…共通化できる関数をまとめ呼び出せるようにする
index.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'];
}
?>

<!DOCTYPE HTML>
<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>
check.php
<?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;
}
?>
<!DOCTYPE HTML>
<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>
send.php
<?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);
?>
<!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>
func.php
<?php
function h($str){
  return htmlspecialchars($str,ENT_QUOTES,'utf-8');
}
session_start();