[PHP]入力フォーム⑦
フォームを送信後に入力フォームをクリアにする
以下のコードによって、送信完了すると、セッションファイルに保存されていたデータが破棄されるようになる。
【send.php】
$_SESSION = array();
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['msg']);
session_destroy();
初めてページを開くと、画面にエラーがでる。それを回避する方法
セッションファイルが作成されていないのが原因。
回避する方法は2つ
①エラー制御演算子「@」を使う
②isset関数を使う
①エラー制御演算子を使う場合
【index.php】 既に記述した以下のコードを変更
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];↓
$name = @$_SESSION['name'];
$email = @$_SESSION['email'];
$msg = @$_SESSION['msg'];
②isset関数を使う場合
1)まず次のコードを削除する
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];
2)isset関数
$_SESSION['○○']の値がある場合、変数○○にその値を代入するようにする
if(isset($_SESSION['name'])){
$name = $_SESSION['name'];
}
if(isset($_SESSION['email'])){
$email = $_SESSION['email'];
}
if(isset($_SESSION['msg'])){
$msg = $_SESSION['msg'];
}
3)変数$name、$email、$msgの初期値を空にする
$name = '';
$email = '';
$msg = '';
※ ’’・・・シングルクォーテーション2つで「空文字列」。
値は空だが、中身は空ではない。
echoで出力した場合空に見える。
テキストエリアに入力したメッセージに改行が入らない
お問い合わせ欄に入力した文章が、入力確認ページでは改行されずに出力される。
これを成形する為の方法。
nl2br( )を使用
( )内の文字列に含まれる改行を反映して返す
お問い合わせ内容:<td><?php echo nl2br(htmlspecialchars($msg, ENT_QUOTES,'UTF-8')); ?>
※htmlspecialchars()をnl2br()で囲む。
結果
ここまでのファイルの内容
【index.php】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
<?php
$name = '';
$email = '';
$msg = '';
session_start();
if(isset($_SESSION['name'])){
$name = $_SESSION['name'];
}
if(isset($_SESSION['email'])){
$email = $_SESSION['email'];
}
if(isset($_SESSION['msg'])){
$msg = $_SESSION['msg'];
}
?>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<p>必要事項を入力して「確認する」ボタンをクリックしてください。</p>
<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 htmlspecialchars($name, ENT_QUOTES,'UTF-8'); ?>"></td></tr>
<tr><th><label for="email">メールアドレス:</label></th><td><input type="text" name="email" id="email" value="<?php echo htmlspecialchars($email, ENT_QUOTES,'UTF-8'); ?>"></td></tr>
<tr><th><label for="msg">お問い合わせ内容:</label></th><td><textarea name="msg" id="msg"><?php echo htmlspecialchars($msg, ENT_QUOTES,'UTF-8'); ?></textarea></td></tr>
</table>
<p><input type="submit" value="確認する"></p>
</form>
</body>
</html>
【check.php】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力確認画面</title>
<?php
if( !isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['msg']) ){
header('Location:./index.php');
exit;
}
$name = $_POST['name'];
$email = $_POST['email'];
$msg = $_POST['msg'];
session_start();
$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['msg'] = $_POST['msg'];
?>
</head>
<body>
<h1>入力内容確認画面</h1>
<table>
<tr><th>お名前:</th><td><?php echo htmlspecialchars($name, ENT_QUOTES,'UTF-8'); ?></td></tr>
<tr><th>メールアドレス:</th><td><?php echo htmlspecialchars($email, ENT_QUOTES,'UTF-8'); ?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(htmlspecialchars($msg, ENT_QUOTES,'UTF-8')); ?></td></tr>
</table>
<p><a href="send.php">送信する</a></p>
<p><a href="index.php">入力画面に戻る</a></p>
</body>
</html>
【send.php】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メール送信画面</title>
<?php
session_start();
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$msg = $_SESSION['msg'];
$_SESSION = array();
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['msg']);
session_destroy();
//ヒアドキュメント
$body=<<<EOF
お問い合わせが送信されました。
送信者のお名前:{$name}
メールアドレス:{$email}
内容は以下の通りです。
{$msg}
EOF;
mb_send_mail('xxx@xxxxx.com','お問い合わせがありました','$body');
?>
</head>
<body>
<h1>メール送信画面</h1>
<p>以下の内容で送信しました。</p>
<table>
<tr><th>お名前:</th><td><?php echo htmlspecialchars($name,ENT_QUOTES, 'UTF-8');?> </td></tr>
<tr><th>メールアドレス:</th><td><?php echo htmlspecialchars($email,ENT_QUOTES, 'UTF-8');?></td></tr>
<tr><th>お問い合わせ内容:</th><td><?php echo nl2br(htmlspecialchars($msg,ENT_QUOTES, 'UTF-8'));?></td></tr>
</table>
<p><a href="index.php">入力画面へ戻る</a></p>
</body>
</html>