web制作 | 夜間飛行 備忘録

web制作講座で教わったあれこれを書き留めていきます

72日目 | web制作

本日は…

■テスト
メールフォームテスト

phpでメールフォーム制作続き
check.phpに書き加えていく

<?php
if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){//$_POST['']の中身が入っていなければ
  header('Location:./index.php');//index.phpに戻す
  exit;
}
?>

これで、中身が入っていないときは、index.phpに戻すことが出来る。

⇒index.phpで入力された内容を取得して、メールで送るために…
check.php

<?php
session_start();
$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
//以下略
?>

として、sessionの中にpostの中身を代入していく
session_start();をすると、サーバにセッションファイルが作成される
→これで任意のページからデータを取り出すことが出来る。(_POSTでは取り出せるのは次のページまで)

⇒send.phpを作る
send.php

<?php
session_start();
$name = $SESSION['name'];
//以下略
?>

これで、$nameの中にSESSIONからデータが入れられる。

これをメールで送ってやるには

<?php
$body = <<<EOF
{$name}さんからメールが送信されました。
メールアドレスは{$email}です。
内容は以下の通りです。
{$message}
EOF;
mb_send_mail('メアド','メールが届いています',$body);//$bodyの内容が指定したメアドに届く
?>

※EOFのところは何でもいい
※<<<から先の改行はメール上反映される。
とする。

まだこの状態では、内容を確認したときにミスがあったら戻る、ということが出来ない。

⇒戻るボタンを付けてやる
check.phpにて、アンカーリンクで戻る

戻った時にフォームの中が全部消えているのは辛い…ので、中身が入ったままで戻るようにする。

index.php
⇒一度入れた内容はcheck.phpにきた段階で、$_SESSIONの中に収納されているので、そこから引っ張りだしてやればいい

<?php
var name = $_SESSION['name'];
?>

⇒これをvalueの中に突っ込んでやればOK

<input value="<?php echo htmlspecialchars($name,ENT_QUOTES,'utf-8'); ?>">

ただし、textareaにはvalueを設定できないので

<textarea id="" name=""><?php echo nl2br(htmlspecialchars($name,ENT_QUOTES,'utf-8')); ?>

としてやる。
※nl2brは入力された改行を反映させるため

⇒このままでは、全て送信し終わった後に入力画面に戻ったときにもvalueの中身が入ってしまう。これは気持ちがわるいので、そこの段階で戻ったら中身は空っぽの状態にしてやる。

send.php

<?php
$_SESSION = array();
unset($_SESSION['name']);
//中略
session_destroy();
?>

index.php

<?php
if(isset($_SESSION['name'])){
  $name = $_SESSION['name'];
}
?>

を項目の数だけ設定
※これだけだと、初めて開いたときには$_SESSIONが設定されていないので変な文字が入ってしまう

<?php
$name = '';
?>

を各項目に設定=初期化してやる。

これで、最初に開いたときは空の値をvalueに入れることになるので、変な文字列は出ない。
後に戻ってきたときは、check.phpからであれば、SESSIONの中に値があるので、valueにそれが代入される。
send.phpから戻ってきたときは、SESSIONの中身はないので、''のほうが代入される。

■明日はpostから受け取った情報をいたずら防止しつつ出力という部分のテスト