LoginSignup
3
4

More than 3 years have passed since last update.

PHPでお問い合わせフォームを作る その2 テンプレートを使ってみる

Posted at

PHPでテンプレートを使ってみよう

前回の記事で、最低限のコードでお問い合わせフォームを作ってみました。

  • 1 入力画面 データを入力させる
  • 2 確認画面 データを受け取り、受け取ったデータを表示する
  • 3 完了画面 メールを送信して、ありがとうメッセージを表示する

という流れでした。
データの引き渡しをやってみた、というところです。

で、今回は前回の記事に書いていたやっておいた方が良い事のうち、テンプレートの使用をやってみたいと思います。

前提

今回もフレームワークは使いません。
なので、厳密な意味でのテンプレートエンジンは使用しません。
PHPファイルとhtmlを書いたファイルを分離することを目的とします。
では、作っていきます。

構成

index.html       // 入力画面です
confirm.php      // index.htmlで入力されたデータを受け取ります
confirm.html     // confirm.phpで受け取ったデータを表示します
complete.php     // confirm.htmlからデータを受け取りメール送信します
complete.html    // メール送信後、ありがとうメッセージを表示します

いや〜簡単な構成ですね・・・・ では次から各ファイルを見ていきます。

作ってみる

index.html

index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phpでフォーム送信</title>
</head>
<body>
<form action="./confirm.php" method="post">
    <div id="contents">
        <div id="name">
          お名前 <input type="text" name="name">
        </div>
        <div id="mail">
          メールアドレス <input type="text" name="mail">
        </div>
        <div id="toiawase">
          お問い合わせ内容 <textarea name="toiawase"></textarea>
        </div>
        </br>
        </br>
        <input type="submit" value="確認">
    </div>
</form>
</body>
</html>

はい、このファイルは前回から変更ありません。
味気のない入力フォームです。

confirm.php

confirm.php
<?php

    $name = $_POST['name'];
    $mail = $_POST['mail'];
    $toiawase = $_POST['toiawase'];

    // confirm.html 読み込み
    $htmlString = file_get_contents("./confirm.html");

    // html内の変換文字列を使ってconfirm.html内の文字列を変換
    $printHtml = str_replace("****replace_onamae****", $name, $htmlString);  // 名前の変換
    $printHtml = str_replace("****replace_mailaddress****", $mail, $printHtml);  // メールアドレスの変換
    $printHtml = str_replace("****replace_toiawase****", $toiawase, $printHtml);  // メールアドレスの変換

    echo $printHtml;

あれ、htmlの記述がなくなってる。

confirm.php
<?php
  〜  〜
    // confirm.html 読み込み
    $htmlString = file_get_contents("./confirm.html");

file_get_contents 使って confirm.html を読み込むようにしてます。
そして、読み込んだhtml内の変換用の文字列を使って、取得した名前・メールアドレス・問い合わせ内容を書き換えてます。

では、confirm.htmlはどうなっているかというと

confirm.html

confirm.html
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Insert title here</title>
</head>
<body>
お名前:****replace_onamae****
</br>
メールアドレス:****replace_mailaddress****
</br>
お問い合わせ内容
</br>
****replace_toiawase****
</br>
</br>
<form action='./complete.php' method='post'>
<input type='hidden' name='name' value='****replace_onamae****'>
<input type='hidden' name='mail' value='****replace_mailaddress****'>
<input type='hidden' name='toiawase' value='****replace_toiawase****'>
<input type='button' onclick='history.back()' value='戻る'>
<input type='submit' value='確認'>
</form>
</body>
</html>

めっちゃ無理やりやな・・・・
confirm.php で confirm.html を読み込んで、html内の ****replace_onamae**** をconfirm.php で取得した名前に変換しとるんやね。
同じやり方で ****replace_mailaddress**** をメールアドレス
****replace_toiawase**** をお問い合わせ内容

このやり方だったらフレームワークもテンプレートエンジンも使わずにのPHPでPHPファイルとhtmlファイルを強引に分けることができる。
あとは同じやり方でcomplete.php と complete.html も作りましょう

complete.php

complete.php
<?php

    $name = $_POST['name'];
    $mail = $_POST['mail'];

    $toiawase = $_POST['toiawase'];

    $mailHeader = "From: from@from.com";
    $mailSubject = "お問い合わせありがとうございます";
    $mailBody = $name . "様 お問い合わせありがとうございます";
    $mailBody .= "¥n";
    $mailBody .= "ご返信まで~~~~";

    mail($mail, $mailSubject, $mailBody, $mailHeader);

    $printHtml = file_get_contents("./complete.html");
    $echoHtml = str_replace("****replace_onamae****", $name, $printHtml);

    echo $echoHtml;

complete.html

complete.html
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Insert title here</title>
</head>
<body>
****replace_onamae****さん、お問い合わせありがとうございます。
</body>
</html>

終わりに

はい、これで前回作った機能を無くすことなく、PHPファイルとhtmlファイルを分けることが出来るようになりました。
無理やり感があるけれど、今後フレームワークを使ったりしていくので今のところはこんな感じで・・・

さて次は入力チェック系やってみましょう。

3
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4