WEB制作の備忘録|朧なる足痕

メールフォーム実習2:確認ページ

確認ページをつくる

check.phpを新規作成

【check.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>お問い合わせ確認</h1>


</body>
</html>
var_dumpでデータがcheck.phpに渡るか確認

【check.php

<?php
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>お問い合わせ確認</h1>


</body>
</html>

検証

  1. MAMPのApachとMySQLサーバーをスタート
  2. index.phpをブラウザで開き、テストする値を入力して確認ボタンをクリック
  3. check.phpが開き下記の表示のように、入力した値が出たらOK

【check.php:ブラウザ表示】

index.phpの値をcheck.phpに表示させる
  1. //var_dump($_POST);をコメントアウトにする
  2. ポストの値を変数に代入
  3. index.phpのtabel内容をコピー&ペースト
  4. thタグのlabel、tdタグの内容を消します
  5. phpの出力を入れる(htmlspesialcharsを忘れずに)
  6. お問い合わせのみhtmlspesialcharsの前にnl2br()を記述
  7. リダイレクトをかける

【check.php

<?php
if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){
  header('Location:index.php');
  exit;
}
//var_dump($_POST);
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>お問い合わせ確認</h1>
<table>
<tr>
<th>お名前:</th><td><?php echo htmlspecialchars($name,ENT_QUOTES,'utf-8'); ?></td>
</tr>
<tr>
<th>Eメール:</th><td><?php echo htmlspecialchars($email,ENT_QUOTES,'utf-8'); ?></td>
</tr>
<tr>
<th>お問い合わせ:</th><td><?php echo nl2br(htmlspecialchars($message,ENT_QUOTES,'utf-8')); ?></td>
</tr>
</table>
</body>
</html>

検証

  1. MAMPのApachとMySQLサーバーをスタート
  2. index.phpをブラウザで開き、アンカーリンクを各項目に、お問い合わせ内容に改行を入れて確認ボタンをクリック
  3. アンカーリンクではなく文字として表示、お問い合わせ内容が改行されていればOK
  4. アドレスバーのindex.phpの箇所をcheck.phpに変更してエンター、index.phpに自動的に変わればOK

【index.php:ブラウザ表示】

【check.php:ブラウザ表示】

ポイント

var_dump();
  • 引数に指定した式に関しての型や値を含む情報を表示
var_dump($_POST);
ポストの値を変数に代入
  • フォームからポストというメソッドを使って値を送信
  • $_POST['email'];は、index.phpのinputタグのname="email"に対応:データにラベリングしている
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
htmlspecialchars()
  • echoはタグもそのまま返してしまうため、アンカーリンクが生きてしまいます。これを文字に置き換えるために使用します
  • ENT_QUOTES:シングルクォーテーションを認識させるように記述
  • XXS=クロスサイトスクリプティング対策(悪意あるいたずら)
htmlspecialchars(変数,ENT_QUOTES,'utf-8');
リダイレクト
  • index.php入力画面に戻す
if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){
  header('Location:index.php');
  exit;
  • isset()
    • 変数が存在しているかどうかの判別を行います
  • header('Location:index.php');
    • index.phpへ移動します
    • (アップロードする場合は、絶対パスに変更します)
  • exit;
    • if文の結果がtrueの場合、ここで命令を抜けます