phpでメールフォームをつくる①

  • PHP, web

今回、phpを使ってメールフォームを作成しました。
手順は、以下の通りです。

  1. 入力フォームをつくる(index.html)
  2. 確認画面をつくる(check.php)
  3. 送信画面をつくる(send.php)

ファイルの保存場所について

以下、MacOS MAMPの場合ですが

MAMP>htdocs 以下のフォルダに保存すること
内容を確認するときはブラウザでlocalhost:8888/xxxをたたく
(xxxは自分が作ったフォルダの名前に変えてパスを正しく指定!)

自分のような初学者の方は、お気をつけてくださいー

1.入力フォームをつくる(index.html)

フォームに入力された値をcheck.phpに渡します。

入力欄は「ニックネーム」「メールアドレス」「感想」の3つにしました

この入力してもらうページ(=index.html)のポイントは、
formタグとinputタグの属性でした

formタグの指定

<form action="check.php" method="POST">
この中に入力用のテキストボックスを3つ作る
</form>

action="check.php"

action:フォームに入力された値を渡す先を指定

method="POST"

method:データを送信する方法の指定

送り方にはGETとPOSTがある
GETはURLに付加してデータを送るので、内容が丸見え
個人情報などを含む場合はPOSTで送ろう

inputタグの指定

<input type="text" name="nickname">

name属性の値が重要。
入力された値の「ラベル」みたいなもの。

→ name属性値”nickname”が付いたテキストボックスに入力された値

ほかのものと被らないように注意

2.確認画面をつくる(check.php)

いよいよphpです。
以下、やりたいことリスト

  1. POSTで渡された値を変数に格納しておく
  2. 渡された値がちゃんと入力されていなかったら、
    もう一度前画面に戻って入力してもらう
  3. すべての項目が入力されたら送信する

2-1.POSTで渡された値を変数に格納する

check.phpにhtmlのDOCTYPE宣言など諸々書いてから、
<body>内に以下のコードを記述

<?php
$nickname=$_POST['nickname'];
$email=$_POST['email'];
 $hitokoto=$_POST['hitokoto'];
?>

$nicknameは、変数名(nicknameじゃなくてもOK)
$_POST[‘nickname’]は、POSTで送られたname属性値がnicknameの値

$nicknameに$_POST[‘nickname’]を代入している(変数に格納した)

変数名とname属性の値は、同じにしなくても動くけど、
同じだと、変数になにが入っているのかわかりやすい

確認|ちゃんと変数に値を代入できているか出力して確認してみる

phpで出力したいときの書き方

ecoh $変数名;
ecoh 'おはよう';


文字列は”(シングルクオート)で括る

さっきのコードにechoを追加してみると

<?php
$nickname=$_POST['nickname'];
$email=$_POST['email'];

$hitokoto=$_POST['hitokoto'];

ecoh $nickname;
ecoh $email;
echo $hitokoto;


?>

index.htmlで入力された値を、check.phpで受け取り出力した!わーい

しかし横一列になってしまう…
そういうときは、<br>タグも一緒にechoして出力しよう
(htmlのタグもechoできる!便利!)

だがしかし、便利なだけではなく以下のようなことも可能ということ

ニックネームを<h1>で括って入力すると、めちゃ主張してくる…

悪意のあるプログラムが投げ込まれたら、THE ENDです
なので、さきほどのコードにすこし書き加えて、エスケープ処理をします

<?php
$nickname = htmlspecialchars($_POST['nickname']);
$email = htmlspecialchars($_POST['email']);

$hitokoto = htmlspecialchars($_POST['hitokoto']);

echo $nickname;
echo $email;
echo $hitokoto;


?>

変数に代入する値(=index.htmlで入力された値)に
htmlspecialchars(値)
というのを追加しました

htmlで特別な意味を持つ記号(“<“とか”>”とか…)を普通の文字列として扱うという処理のようです

次は、

渡された値がちゃんと入力されていなかったら、
もう一度前画面に戻って入力してもらう

という条件分岐による処理です

つづきは、また今度

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です