masimaro blog

menu

home > WEBアプリ開発:CMS > CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑪公開用固定記事ページ、問合せフォーム処理画面作成

CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑪公開用固定記事ページ、問合せフォーム処理画面作成


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サーバーにアップロード後、初めて確認が可能となります。

 

これでほぼ完成となりました。次回はカテゴリー別で記事を一覧表示させるテンプレートファイルを作成して、公開用ページを完成させたいと思います。

コメントを残す

お名前

コメント



コメント一覧

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