post・get以外の方法でhtml間でファイルを渡す
問題点
- input要素に type="hidden" を指定して隠しデータを送る方法は古くセキュリティが脆弱⇒×
- クッキーを使う方法はユーザのPC内に書き込まれるためユーザ側で偽造可能⇒×
セッションを利用する
- sessionを使うと「サーバの中に」ファイルが出来情報が書き込まれる
- 以降サーバを参照して情報を取り出す仕組み
- tmpフォルダ(テンポラリー<一時>フォルダ)の中の、tmpファイルが中身
- データを参照⇒$_SESSION['name']
- フォームの送信用 index.php ⇒formのsendで渡す
- 送信内容の確認用 check.php ⇒sessionで渡す
- 内容をメールで送信し、結果を表示用 send.php
- これらのphpをサーバにアップロードする
- ローカルだと設定していなければメールが送られないので適当なレンタルサーバにアップする
<?php
function h($str){
return htmlspecialchars($str, ENT_QUOTES, "utf-8");
}
session_start();
$name = @$_SESSION['name'];
$email = @$_SESSION['email'];
$message = @$_SESSION['message'];
?>
<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>
<?php
function h($str){
return htmlspecialchars($str, ENT_QUOTES, "utf-8");
}
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'];
?>
<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>
<?php
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$message = $_SESSION['message'];
mb_send_mail('hirowebweb@gmail.com', 'お問い合わせメール', $name.$email.$message);
?>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>
<body>
</body>
</html>
mb_send_mail関数
- phpを送信するphpの関数
- mb_send_mail(宛先, 件名, 本文, ヘッダ情報)
セッションの有効期限について(概要)