/* Google Analytics ▽ */ /* Google Analytics △ */

WEB制作の勉強メモ / 猫脳人間

HTML CSS JavaScript ActionScript jQuery WordPress PHP Illustrator Photoshop Flash … 猫サイズの脳でも覚えるぞ と…

PHP の授業(6日目) メールフォーム完成

PHP の授業。メールフォームがひとまず完成

あくまで授業の中での完成です。
  他の人に参考になる内容かどうかは分かりません。

index.php

<?php

require_once dirname(__FILE__).'/func.php';
// func.php を読み込む記述

$name='';
$email='';
$message = '';
// 空文字を代入して初期化する

$name_error='';
$email_error='';
$message_error='';

if(isset($_SESSION['mail']['name'])){
  $name = $_SESSION['mail']['name'];
}
// mail という配列に name を入れる

if(isset($_SESSION['mail']['email'])){
  $email = $_SESSION['mail']['email'];
// mail という配列に email を加える
}

if(isset($_SESSION['mail']['message'])){
  $message = $_SESSION['mail']['message'];
}
// 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>お問合せフォーム|初めてのPHP</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>

<body>

<div id="container">

<header>
<h1>お問合せフォーム</h1>
</header>

<section>
<form action="check.php" method="post">
<table>
<tbody>

<tr>
<th><label for="name">お名前: <br>
<span>(20文字以内)</span></label></th>
<td><input type="text" name="name" id="name" value="<?php echo h($name); ?>" maxlength="20" size="50" placeholder="例:猫田寝子" required autofocus>
<!-- required で入力必須に。outofocus で自動的にカーソルがそこに入る -->

<?php
if(!empty($name_error)){
  echo "<span> {$name_error} </span>";
}
 ?>
</td>
</tr>

<tr>
<th><label for="email">Eメール: <br>
<span>(25文字以内)</span></label></th>
<td><input type="email" name="email" id="email" value="<?php echo h($email); ?>" maxlength="25" size="50" placeholder="例:example@example.com" required>
<!-- type=email にする事で Eメールかどうかある程度判定してくれる(HTML5) -->

<?php
if(!empty($email_error)){
  echo "<span> {$email_error} </span>";
}
 ?>
</td>
</tr>

<tr>
<th><label for="message">お問合せ内容: <br>
<span>(150文字以内)</span></label></th>
<td><textarea name="message" id="message" cols="50" rows="7" maxlength="150" placeholder="例:お問合せ内容" required><?php echo h($message); ?></textarea>
<?php
if(!empty($message_error)){
  echo "<span> {$message_error} </span>";
}
 ?>
</td>
</tr>

</tbody>
</table>
<input type="submit" value=" 確認 ">
</form>
</section>

<footer>
<p><small>(c) Silent Cait</small></p>
</footer>

</div><!-- /#container -->

</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;
} // 値が無い場合に、index.php に飛ばす
// Location:index.php のリダイレクトは、実際にサーバー上で動かす時は絶対パスにする。

// var_dump($_POST);

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];


$success = true;
$name_error='';
$email_error='';
$message_error='';
// 空文字を代入した

if(strpos($email,'@') ===false){
  $email_error = 'Eメールアドレスに 「@マーク」 が含まれていません';
  $success = false;
}

if(strlen($email)!=mb_strlen($email,'UTF-8')){
  $email_error = 'Eメールアドレスに全角文字が含まれています';
  $success = false;
// strlen (stting length) で文字数を取得

}

if(mb_strlen($name,'UTF-8')>20){
  $name_error = 'お名前が長すぎます';
  $success = false;
// mb_strlen (multibyte string length) で、文字数を何バイトか数字で取得する

}
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;

  $email_error= 'Eメールアドレスは必須項目です';
  $success = false;

  $message_error='お問い合わせ内容は必須項目です';
  $success = false;
}

$_SESSION['mail']['name']=$_POST['name'];
$_SESSION['mail']['email']=$_POST['email'];
$_SESSION['mail']['message']=$_POST['message'];
$_SESSION['mail']['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>お問合せ内容確認画面|PHP2日目</title>
</head>
<link rel="stylesheet" type="text/css" href="css/style.css">

<body>

<div id="container">

<header>
<h1>お問合せ内容確認画面</h1>
</header>

<section>

<table>
<tbody>

<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>

</tbody>
</table>


<p><a href="index.php"><strong>【 戻る 】</strong></a></p>

<p><a href="send.php"><strong>【 送信 】</strong></a></p>

</section>

<footer>
<p><small>(c) S.S</small></p>
</footer>

</div><!-- /#container -->


</body>
</html>

send.php

<?php

require_once dirname(__FILE__).'/func.php';
// この一行を記述し func.php を読み込むんで func.php の内容を実行


/*var_dump($_SESSION['success']);
exit; エラーチェックに使うソース*/

if(!$_SESSION['mail']['success']){
  header('Location:index.php');
  exit;
}

$name = $_SESSION['mail']['name'];
$email = $_SESSION['mail']['email'];
$message = $_SESSION['mail']['message'];

$_SESSION = array();
// 配列に対して array() をかけると 配列が空になる
unset($_SESSION['mail']);
// unset 一旦できた器を壊す関数

if(isset($_COOKIE[session_name()])) {
  setcookie(session_name(),'',time()-42000,'/');
}
// session_name セッションの名前を取得
// '' コンテンツの中身を空にするために空文字に
// time()-42000 現在の時刻を取得し、記録、過去の時間を設定し、クッキーの有効期限を失効にする

session_destroy();
// セッションの関連性を断ち切る関数

$body = <<<MBODY
{$name} 様より
お問合せメールが送信されました。
内容は以下の通りです。

────────────────────

{$message}

────────────────────

メールアドレス: {$email}

────────────────────
MBODY;
// インデントなどのスペースは入れない。
// 改行は改行として反映する。
// <<<MBODY ~ MBODY; を「ヒアドキュメント」と言う
// MBODY は任意の文字列でOK。始まりと終わりの文字列の一致は必要。


mb_send_mail('silentcait@gmail.com','【PHP】お問合せメール',$body);


// http://felica-portfolio.com/user11/mail0316/
?>


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>メール送信終了|send.php</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>

<body>

<div id="container">

<h1>メール送信終了</h1>

<p>以下の内容でメールが送信されました。</p>
<p>お問合せありがとうございました。</p>

<table>
<tbody>

<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>

</tbody>
</table>

<p><a href="index.php">トップに戻る</a></p>

</div><!-- /#container -->

</body>
</html>

func.php

<?php

/* 繰り返し記述が出てくる記述をこのファイルに記述し、
require_once dirname(__FILE__).'/func.php';
の記述でこのファイルを呼び出す */

function h($str){
  return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
} // h() 
//→自作関数、ユーザー定義関数 と言う

session_start();


?>

PHP: mb_strlen - Manual

COOKIE の内容を確認する画面(Google Chrome

f:id:silentcait:20150715174352p:plain