masimaro blog

menu

home > WEBアプリ開発:CMS > CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑩公開用投稿記事ページのコメントフォーム受付画面作成

CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑩公開用投稿記事ページのコメントフォーム受付画面作成


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のコメント返信から実行します。

コメント返信画面では、認証済みのコメント一覧が表示されます。

未返信のコメントには「未返信」と表示されています。

それでは、返信をしてみます。

送信後、記事に返信が反映されているはずです。

以上です。

次回は、固定ページのテンプレを作成します。

コメントを残す

お名前

コメント



コメント一覧

コメントはまだありません
MENU