【サンプル】お問い合わせフォーム(バリデーション、メール送信)

(ブログ記事の一覧は「こちら」)

お問い合わせフォームのサンプルを確認していきましょう。

f:id:MJeeeey:20200112184456p:plain:w360

以下の入力項目を用意します。

  • お名前
  • メールアドレス
  • お問い合わせ内容

メール送信する場合、これらの項目が正しく入力されているかを事前にチェックする必要があります。事前にチェックすることを「バリデーション」と言います。

メール送信は、mb_send_mail関数を使用します。


サンプルプログラムを確認していきましょう。

基本となるHTMLは以下のようになります。

<html>
<head>
   <meta charset="UTF-8">
</head>

<body>
<h1>お問い合わせ</h1>

<form action="" method="POST">
    お名前:
    <p><input type="text" name="name"></p>
    メールアドレス:
    <p><input type="text" name="email"></p>
    お問い合わせ内容:
    <p><textarea name="inquiry"></textarea></p>
    <input type="submit" value="送信する">
</form>

</body>
</html>


上記の基本となるHTMLに、必要なPHPプログラムを追加していきます。

  • [1] POSTで送信しているか?
  • [2] POSTデータを取得
  • [3] バリデーション(入力内容のチェック)
  • [4] メール送信
  • [5] 結果を出力

完成したPHPプログラムは以下になります。

<?php
// [1] POSTで送信しているか?
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // [2] POSTデータを取得
    $name = $_POST['name'];
    $email = $_POST['email'];
    $inquiry = $_POST['inquiry'];

    $errs = [];

    // [3] バリデーション(入力内容のチェック)
    // お名前の条件
    if (mb_strlen($name) == 0) {
        $errs = 'お名前を入力してください。' . "<br>";
    }

    // メールアドレスの条件(正規表現)
    $pattern = '/\A([a-z0-9_\-\+\/\?]+)(\.[a-z0-9_\-\+\/\?]+)*';
    $pattern .= '@([a-z0-9\-]+\.)+[a-z]{2,6}\z/i';
    if (!preg_match($pattern, $email)) {
        $errs .= 'メールアドレスの形式が違います。' . "<br>";
    }

    // お問い合わせ内容の条件
    if (mb_strlen($inquiry) == 0) {
        $errs .= 'お問い合わせ内容を入力してください。' . "<br>";
    }

    if (!isset($errs)) {
        // [4] メール送信
        // 言語、文字コードを設定
        mb_language("Japanese");
        mb_internal_encoding("UTF-8");

        // 送信先メールアドレス(送信したいアドレスに変更してください)
        $addressTo = "minamino@xxxxxxxx.com";
        // 件名
        $subject = 'お問い合わせありがとうございます。';
        // 本文
        $inquiry = "お名前:" . "\n" . $name . "様" . "\n\n" . "メールアドレス:" . "\n" . $email . "\n\n" . "お問い合わせ内容:" . "\n" . $inquiry;
        // 送信元
        $addressFrom = "From: " . $email . "\n";

        // メール送信
        if (mb_send_mail($addressTo, $subject, $inquiry, $addressFrom) === FALSE) {
            $message = 'メールの送信に失敗しました。';
        } else {
            $message = 'お問い合わせを受け付けました。';
        }
    }
}
?>

<html>
<head>
   <meta charset="UTF-8">
</head>
<body>
<h1>お問い合わせ</h1>
<?php
// [5] 結果を出力
if (isset($message)) {
    echo '<p style="color:red">' . $message . '</p>';
}

if (isset($errs)) {
    echo '<p style="color:red">' . $errs . '</p>';
}
?>

<form action="" method="POST">
    お名前:
    <p><input type="text" name="name"></p>
    メールアドレス:
    <p><input type="text" name="email"></p>
    お問い合わせ内容:
    <p><textarea name="inquiry"></textarea></p>
    <input type="submit" value="送信する">
</form>
</body>
</html>

実際にメール送信を行うには、実際のサーバーで動作させる必要があります。(XAMPPでは動作しません。)
XFREEなど、PHPが実行できるフリーのレンタルサーバーを利用してください。