CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑪公開用固定記事ページ、問合せフォーム処理画面作成
2021-07-22
今回は固定ページのテンプレートと、問合せフォームの処理画面を作成します。
星マークが作成済みのファイルです。今回は雲マークのファイルを作成します。
それではあらかじめ、cmsで固定記事を2つほど作成しておきます。
1つは問合せフォームあり、もう一つは無しにしておきます。
固定記事テンプレート
page.php
<?php require_once("header.php");?> <warapper> <main> <?php require_once("pankuzu.php");?> <?php try { require_once("common/common.php"); $get = sanitize($_GET); $code = $get["p"]; $dsn = "mysql:host=localhost;dbname=test;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT title, img, time, honbun, com FROM page WHERE code=$code"; $stmt = $dbh -> prepare($sql); $stmt -> execute(); //$dbh = null; $rec = $stmt -> fetch(PDO::FETCH_ASSOC); print $rec["title"]; print "<br>"; print $rec["time"]; print "<br>"; if(!empty($rec["img"]) === true) { print "<img src='setting/img/".$rec['img']."'>"; } print "<br>"; print $rec["honbun"]; if($rec["com"] === "ari") { print "<form action='toi.php' method='post'>"; print "お名前"; print "<br>"; print "<div class='toi'>"; print "<input type='text' name='name'>"; print "<br>"; print "mail"; print "<br>"; print "<input type='text' name='mail'>"; print "</div>"; print "<br>"; print "内容"; print "<br>"; print "<div class='toi2'>"; print "<textarea name='honbun'></textarea>"; print "</div>"; print "<br><br>"; print "<input type='submit' value='送信'>"; print "</form>"; } } catch(Exception $e) { print "異常"; exit(); } ?> <?php require_once("nav.php");?> </main> <?php require_once("side.php");?> <?php require_once("footer.php");?>
cmsディレクトリにpage.phpを作成します。
このファイルは固定記事を表示させるテンプレートになります。
固定記事へのリンクは、スマホではスライドメニューに、PCではsideメニューに表示されるようになっています。
そして、リンクには固定記事のidをパラメータとして乗せています。
したがって、固定記事を表示させるためのテンプレートであるこのファイルでは、先頭で固定記事のidである「p」の値を受け取っています。
その後は、データベースに接続して、該当する記事を表示させているだけです。
問合せフォームの有無については、固定記事のテーブルの「com」カラムで判別できるので、そこの値が「ari」ならば、フォームを表示させるようにしています。
ファイルを作成後、固定記事へアクセスすればこんな感じになってるはずです。↓
問合せフォーム処理ページ
toi.php
<?php require_once("header.php");?> <warapper> <main> <?php require_once("pankuzu.php");?> <?php try { require_once("common/common.php"); $post = sanitize($_POST); $name = $post["name"]; $mail = $post["mail"]; $honbun = $post["honbun"]; $flag = true; if(empty($name) === true) { print "名前が入力されていません。"; print "<br><br>"; $flag = false; } if(preg_match("/\A[\w\-\.]+\@[\w\-\.]+\.([a-z]+)\z/", $mail) === 0) { print "正しいemailを入力してください。"; print "<br><br>"; $flag = false; } if(empty($honbun) === true) { print "問い合わせ内容が入力されていません。"; print "<br><br>"; $flag = false; } if($flag === false) { print "<form>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; } else { $dsn = "mysql:host=localhost;dbname=test;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO toi(name, mail, honbun) VALUES(?,?,?)"; $stmt = $dbh -> prepare($sql); $data[] = $name; $data[] = $mail; $data[] = $honbun; $stmt -> execute($data); $dbh = null; //$rec = $stmt -> fetch(PDO::FETCH_ASSOC); print "<br><br>"; print "問い合わせを送信いたしました。"; print "<br><br>"; print "<form>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; $bun = ""; $bun .= $name."様より問い合わせ\n\n"; $bun .= $honbun; print "<br>"; print nl2br($bun); $title = "お客様より問い合わせが入りました。"; $header = "From:".$mail; $honbun = html_entity_decode($bun, ENT_QUOTES, "UTF-8"); mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail("ketunorobio@gmail.com", $title, $bun, $header); } } catch(Exception $e) { print "異常"; exit(); } ?> <?php require_once("nav.php");?> </main> <?php require_once("side.php");?> <?php require_once("footer.php");?>
cmsディレクトリにtoi.phpを作成します。
このページでは、固定記事からの問合せが入った際、その内容のチェックし、管理者にmail送信しています。
postデータをエスケープ処理したあと、各値を正規表現のチェックにかけています。
1つでも入力に誤りがれば、フラグでNG処理とするようにしています。
問題なければ、$bun .= に問合せ内容を格納し、send mail文で管理者へ自動送信となっています。
mailに関しては、以前作成したコメントフォームと同じ内容ですので、ローカルの開発環境では確認ができません。
WEBサーバーにアップロード後、初めて確認が可能となります。
これでほぼ完成となりました。次回はカテゴリー別で記事を一覧表示させるテンプレートファイルを作成して、公開用ページを完成させたいと思います。