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のコメント返信から実行します。
コメント返信画面では、認証済みのコメント一覧が表示されます。
未返信のコメントには「未返信」と表示されています。
それでは、返信をしてみます。
送信後、記事に返信が反映されているはずです。
以上です。
次回は、固定ページのテンプレを作成します。