PHPでテンプレートを使ってみよう
前回の記事で、最低限のコードでお問い合わせフォームを作ってみました。
- 1 入力画面 データを入力させる
- 2 確認画面 データを受け取り、受け取ったデータを表示する
- 3 完了画面 メールを送信して、ありがとうメッセージを表示する
という流れでした。
データの引き渡しをやってみた、というところです。
で、今回は前回の記事に書いていた__やっておいた方が良い事__のうち、テンプレートの使用をやってみたいと思います。
前提
今回もフレームワークは使いません。
なので、厳密な意味でのテンプレートエンジンは使用しません。
PHPファイルとhtmlを書いたファイルを分離することを目的とします。
では、作っていきます。
構成
index.html // 入力画面です
confirm.php // index.htmlで入力されたデータを受け取ります
confirm.html // confirm.phpで受け取ったデータを表示します
complete.php // confirm.htmlからデータを受け取りメール送信します
complete.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
<?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の記述がなくなってる。
<?php
〜 略 〜
// confirm.html 読み込み
$htmlString = file_get_contents("./confirm.html");
file_get_contents 使って confirm.html を読み込むようにしてます。
そして、読み込んだ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
<?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
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>Insert title here</title>
</head>
<body>
****replace_onamae****さん、お問い合わせありがとうございます。
</body>
</html>
終わりに
はい、これで前回作った機能を無くすことなく、PHPファイルとhtmlファイルを分けることが出来るようになりました。
無理やり感があるけれど、今後フレームワークを使ったりしていくので今のところはこんな感じで・・・
さて次は入力チェック系やってみましょう。