CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑩公開用投稿記事ページのコメントフォーム受付画面作成
2021-07-22
今回は投稿記事ページのコメントフォーム受付処理画面を作成します。
星マークが作成済みのファイルになります。
雲マークのファイルを今回作成します。
以前、cms作成の段階で少し触れましたが、もう一度ここで「記事に対するコメント受付」について、まとめておきます。
1.記事に対するコメントが送信される(single.php)
2.コメントを仮のテーブルに保存し、コメント内容とcms loginのurlを記載したmailを管理者に自動送信する(comment.php)
3.管理者はmailに記載されたコメント内容を確認後、cmsにログイン(set_top.php)
4.cmsでコメントの認証待ちを確認(comment.check.php)
5.cmsでコメントを認証する(仮のテーブルから本テーブルへコメントを移動させる)(comment_done.php)
6.投稿記事に認証したコメントが反映される(single.php)
7.管理者がコメントに対して返信したい場合は、cmsのコメント返信から可能(comment_list.php comment_hensin.php comment_hensin_done.php)
少し長いですが、上記のような感じです。
少し長いですが、上記のような感じです。
2以外は全てファイルを作成済みですので、今回は2のファイルを作成し、実際に1~7までのテストを実施したいと思います。
※mailの自動送信についてはWEBサーバーにアップロード後(公開後)でなければテストできないので、最後に確認します。
投稿記事ページのコメントフォーム受付処理画面
comment.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"]; $com = $post["com"]; $code = $post["code"]; $title = $post["tit"]; $com = str_replace(PHP_EOL, '', $com); if(empty($name) === true or empty($com) === true) { print "<br><br>"; print "名前かコメントが空白です。"; print "<br><br>"; print "<form>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; } else { $title = strip_tags($title); $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 karicm(name, title, honbun, id, time) VALUES(?,?,?,?,NOW())"; $stmt = $dbh -> prepare($sql); $data[] = $name; $data[] = $title; $data[] = $com; $data[] = $code; $stmt -> execute($data); $data = array(); $dbh = null; print "<br><br>"; print "コメントを送信しました。<br>"; print "コメントは認証後に反映されます。<br><br>"; print "<a href='single.php?n=".$code."'>"; print "戻る"; print "</a>"; $bun = ""; $bun .= $name."様よりコメント\n\n"; $bun .= $title." の記事\n\n"; $bun .= $com."\n\n下記URLよりログインして認証可否して下さい。\n\n"; $bun .= "https://masimaro-comp.com/setting/set_login.php"; //print "<br>"; //print nl2br($bun); $title = "コメントが入りました。"; $header = "From:".$name; $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ディレクトリにcomment.phpを作成します。
このページでは、single.phpで記事に対するコメントを受け付けた際、そこからpostされた値に漏れがないかのチェック後、内容をテーブルに保存し、管理者にmail送信しています。
postのデータは、コメント者の名前、タイトル、本文、投稿された記事のid、を受け取っています。
$com = str_replace(PHP_EOL, '', $com); は、コメントの改行を削除しています。(今回の設計上、改行があると次ページへ遷移出来ない為。postすりゃ問題はないのですが。。)
初めのif文はコメントの入力漏れを確認しています。
問題なければ、仮のテーブルである「karicm」にコメント内容を保存します。
コメント送信者に対しては認証待ちの旨を伝えておきます。
下部の$title~mb send mailが、管理者にmailを送信するプログラムになります。
$bun .= で繋がれた文字列が、send mailに指定したアドレスへ送信されます。
それでは、前途した1~7のテストを実施してみましょう。
コメントフォームテスト
1.記事からコメントを投稿
作成した記事の中からどれでもいいので、コメントを送信してみます。
これは実際に当blogに投稿されたことのあるコメントを再現してみました。非常に不愉快なのでやめて下さいね。
2.karicmテーブルに反映しているか確認
コメントが送信されたか確認します。
mailは送信されないので、エラーが発生していますが今は無視します。
テーブルに反映されているか確認します。
3.cmsにログイン
本来であればmailからログインのurlでcmsに飛べるようにしていますが、今回はローカルから直接アクセスしてログインします。
それでは、コメント認証画面へ行ってみます。
4.コメントの認証待ちを確認
karicmテーブルに情報があれば、コメントの認待ちとして表示されるので、それを確認します。
認証してみます。
5.コメントを認証
認証すれば、その旨のコメントが表示されます。
認証すれば、karicmテーブルからhoncmテーブルへ情報を移動させています。honcmテーブルの内容が、記事へ反映されるためですね。
karicmの内容は消す仕組みにしているのは、残ったままだと、認証しても「認証待ち」として残ってしまうためです。
それではそれぞれのテーブルの状態を確認してみます。
honcmテーブルに情報が移行していて、kariテーブルは消去されていればOKです。
それでは、記事を確認してみましょう。
6.コメントが投稿された記事を確認
d9dcc5404f02ac1e9a555f0f33e2dfad-1.png次のように、コメントが投稿された記事に対して、認証したコメントが反映していればOKです。
ここまでが、コメント認証の一連の流れとなります。
7.コメント返信
管理者がコメントを返信する際は、いちいち今のような手順を踏むのは面倒なので、cmsのコメント返信から実行します。
コメント返信画面では、認証済みのコメント一覧が表示されます。
未返信のコメントには「未返信」と表示されています。
それでは、返信をしてみます。
送信後、記事に返信が反映されているはずです。
以上です。
次回は、固定ページのテンプレを作成します。