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

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

[PHP]セッションの利用

post・get以外の方法でhtml間でファイルを渡す

問題点
  • input要素に type="hidden" を指定して隠しデータを送る方法は古くセキュリティが脆弱⇒×
  • クッキーを使う方法はユーザのPC内に書き込まれるためユーザ側で偽造可能⇒×
セッションを利用する
  • sessionを使うと「サーバの中に」ファイルが出来情報が書き込まれる
  • 以降サーバを参照して情報を取り出す仕組み
  • tmpフォルダ(テンポラリー<一時>フォルダ)の中の、tmpファイルが中身
  • データを参照⇒$_SESSION['name']

用意するphp

  1. フォームの送信用 index.php ⇒formのsendで渡す
  2. 送信内容の確認用 check.php ⇒sessionで渡す
  3. 内容をメールで送信し、結果を表示用 send.php
  4. これらのphpをサーバにアップロードする
  5. ローカルだと設定していなければメールが送られないので適当なレンタルサーバにアップする
index.php
<?php
function h($str){
  return htmlspecialchars($str, ENT_QUOTES, "utf-8");
}
/* sessionを利用(後述) */
session_start();
/* 初回はsessionの値が無い⇒undefinedなので@でエラー回避する(応急策) */
$name = @$_SESSION['name'];
$email = @$_SESSION['email'];
$message = @$_SESSION['message'];
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問合せフォーム</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="container">
<h1>メールフォーム</h1>
<form action="check.php" method="post">
<table>
<tr><th><label for="name">お名前</label></th><td><input type="text" name="name" id="name" value=<?php echo($name); ?>></td></tr>
<tr><th><label for="email">Eメール</label></th><td><input type="text" name="email" id="email" value=<?php echo($email); ?>></td></tr>
<tr><th><label for="message">お問合せ</label></th><td><textarea name="message" id="message" value=<?php echo($message); ?>></textarea></td></tr>
</table>
<input type="submit" value="確認" id="submit">
</form>
</div>
</body>
</html>
check.php
<?php
/* htmlspecialcharsを使いやすくするために自作関数化 */
function h($str){
  return htmlspecialchars($str, ENT_QUOTES, "utf-8");
}
/* フォーム情報がない場合index.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(empty($name)){ $name_error = '名前が入力されていません';}
  if(empty($email)){ $email_error = 'メールアドレスが入力されていません';}
  if(empty($message)){ $message_error = 'お問合せ内容が入力されていません';} 
/* セッションを使う */
session_start();
  $_SESSION['name'] = $_POST['name'];
  $_SESSION['email'] = $_POST['email'];
  $_SESSION['message'] = $_POST['message'];
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>入力内容の確認</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="container">
<h1>入力内容の確認</h1>
<table>
<tr><th>お名前</th><td><?php echo h($name); echo h($name_error); ?></td></tr>
<tr><th>Eメール</th><td><?php echo h($email); echo '<span>',h($email_error),'</span>'; ?></td></tr>
<tr><th>お問合せ</th><td><?php echo nl2br(h($message)); echo '<span>',h($message_error),'</span>'; ?></td></tr>
</table>
<p><a href="index.php" >戻る</a></p>
<p><a href="send.php" >送信</a></p>
</div>
</body>
</html>
send.php
<?php
/* セッションを利用 */
  session_start();
  $name = $_SESSION['name'];
  $email = $_SESSION['email'];
  $message = $_SESSION['message'];
/* サーバからメールを送信 */
  mb_send_mail('hirowebweb@gmail.com', 'お問い合わせメール', $name.$email.$message);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>
<body>
</body>
</html>
mb_send_mail関数
  • phpを送信するphpの関数
  • mb_send_mail(宛先, 件名, 本文, ヘッダ情報)
セッションの有効期限について(概要)
  • ある条件でtmpデータは消える
  • 分母と分子の関係