くろひょうのwebデザインのお勉強帳

フェリカテクニカルアカデミー web制作科の受講生です。授業の要点、復習でつまづいた点などを記録し、レベルアップに励みます。

クリエイターになるための、お勉強の記録帳

[PHP]入力フォーム⑦

フォームを送信後に入力フォームをクリアにする

以下のコードによって、送信完了すると、セッションファイルに保存されていたデータが破棄されるようになる。

【send.php

$_SESSION = array();
unset($_SESSION['name']);
unset($_SESSION['email']);
unset($_SESSION['msg']);
session_destroy();

 

初めてページを開くと、画面にエラーがでる。それを回避する方法

f:id:pleasure10501:20150613214950p:plain

セッションファイルが作成されていないのが原因。

回避する方法は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で出力した場合空に見える。 

 

テキストエリアに入力したメッセージに改行が入らない

 

f:id:pleasure10501:20150613215730p:plain

お問い合わせ欄に入力した文章が、入力確認ページでは改行されずに出力される。

これを成形する為の方法。

f:id:pleasure10501:20150613215753p:plain

 

 

 

nl2br( )を使用

( )内の文字列に含まれる改行を反映して返す

 

【check.phpとsend.php

お問い合わせ内容:<td><?php echo nl2br(htmlspecialchars($msg, ENT_QUOTES,'UTF-8')); ?>

※htmlspecialchars()をnl2br()で囲む。

 

結果

f:id:pleasure10501:20150613220734p:plain

 

f:id:pleasure10501:20150613220745p:plain

 

 

ここまでのファイルの内容

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

 

広告を非表示にする