CMSを自作してオリジナル動的ホームページをフルスクラッチ開発⑤CMSのプロフィール、スポンサーリンク追加画面の作成
2021-07-22

今回はCMSのプロフィール、スポンサーリンク追加画面を作成します。
星マークが作成済みのページです。今回は雲マークのページを作成します。
後ほど作成する公開用の動的ページで調整しますが、プロフィールとスポンサーリンクは、公開ページのサイドメニュー部に表示させるようにします。↓
それでは初めに、プロフィールとスポンサーリンクの情報を保存するテーブルから作成します。
テーブルの作成
pro(プロフィール情報のテーブル)
データベース名「test」に「pro」テーブルを作成します。
カラムは4とし、詳細は下記の通りとします。
| 名前 | データ型 | その他 |
| code | int | AI |
| name | varchar 値50 | - |
| img | varchar 値100 | - |
| honbun | varchar 値200 | - |
sp(スポンサーリンク情報のテーブル)
データベース名「test」に「sp」テーブルを作成します。
カラムは4とし、詳細は下記の通りとします。
| 名前 | データ型 | その他 |
| code | int | AI |
| name | varchar 値50 | - |
| img | varchar 値100 | - |
| url | varchar 値50 | - |
プロフィール入力画面
pro.php
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION["login"]) === false) {
print "ログインしていません。<br><br>";
print "<a href='set_login.php'>ログイン画面へ</a>";
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>cms</title>
<link rel="stylesheet" href="style2.css">
</head>
<body>
プロフィールを入力して下さい。
<br><br>
管理人名<br>
<form action="pro_check.php" method="post" enctype="multipart/form-data">
<input type="text" name="name">
<br><br>
画像<br>
<input type="file" name="img">
<br><br>
紹介文<br>
<input type="textarea" name="honbun">
<br><br>
<input type="submit" value="OK">
<input type="button" onclick="history.back()" value="戻る">
</form>
</body>
</html>
settingディレクトリ配下にpro.phpを作成します。
このページはプロフィール情報を入力する画面になります。
formタグで名前、画像、紹介文を入力して次ページへpostするだけですね。

プロフィール登録画面
pro_check.php
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION["login"]) === false) {
print "ログインしていません。<br><br>";
print "<a href='set_login.php'>ログイン画面へ</a>";
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>cms</title>
<link rel="stylesheet" href="../style.css">
</head>
<body>
<aside>
<?php
try {
require_once("../common/common.php");
$post = sanitize($_POST);
$name = $post["name"];
$img = $_FILES["img"];
$honbun = $post["honbun"];
if(empty($name) === true or empty($img["name"]) === true or empty($honbun) === true) {
print "プロフィール情報を全て入力して下さい";
print "<form>";
print "<input type='button' onclick='history.back()' value='戻る'>";
print "</form>";
exit();
}
move_uploaded_file($img["tmp_name"],"./img/".$img["name"]);
$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 * FROM pro WHERE1";
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
$rec = $stmt -> fetch(PDO::FETCH_ASSOC);
if(empty($rec["code"]) === true) {
$sql = "INSERT INTO pro(name, img, honbun) VALUES(?,?,?)";
$stmt = $dbh -> prepare($sql);
$data[] = $name;
$data[] = $img["name"];
$data[] = $honbun;
$stmt -> execute($data);
//$rec2 = $stmt -> fetch(PDO::FETCH_ASSOC);
} else {
$sql = "UPDATE pro SET name=?, img=?, honbun=? WHERE code=?";
$stmt = $dbh -> prepare($sql);
$data[] = $name;
$data[] = $img["name"];
$data[] = $honbun;
$data[] = $rec["code"];
$stmt -> execute($data);
}
print "<h2>管理人</h2>";
print "<div class='box'>";
print "<h3>".$name."</h3>";
print "<div class='img'>";
print "<img src='img/".$img['name']."'>";
print "</div>";
print $honbun;
print "</div>";
}
catch(Exception $e) {
print "サーバーに異常が発生しました。<br>";
print "<a href='set_top.php'>cmsトップへ</a>";
exit();
}
?>
<br><br>
上記内容で登録しました。
<br><br>
<a href="pro.php">プロフィール作成画面へ戻る</a>
<br>
<a href="set_top.php">トップメニューへ</a>
</aside>
</body>
</html>
settingディレクトリ配下にpro_check.phpを作成します。
このページは入力されたプロフィール情報のチェック、プレビュー表示、テーブルに登録、する画面になります。
入力に誤りが無ければ、まず画像ファイルをimgディレクトリにアップロードさせています。
続いてデータベースに接続し、proテーブルに情報が無ければ、そのまま入力情報を登録。
proテーブルに情報がすでに存在していれば、UPDATEのSQLで既存の情報を上書き修正しています。
つまり、プロフィールは1つしか要らないので、追加で登録できない仕組みにしています。
テーブルに登録後は、プレビュー表示させています。
プレビューの表示が味気ないですが、これは後で作成する公開用ページのCSSでまとめてスタイリングさせます。
テーブルに情報が反映されているか確認します。
スポンサーリンク入力画面
sp.php
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION["login"]) === false) {
print "ログインしていません。<br><br>";
print "<a href='set_login.php'>ログイン画面へ</a>";
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>cms</title>
<link rel="stylesheet" href="style2.css">
</head>
<body>
スポンサーリンクを入力して下さい。
<br><br>
スポンサー名<br>
<form action="sp_check.php" method="post" enctype="multipart/form-data">
<input type="text" name="name">
<br><br>
画像<br>
<input type="file" name="img">
<br><br>
url<br>
<input type="text" name="url">
<br><br>
<input type="submit" value="OK">
<input type="button" onclick="history.back()" value="戻る">
</form>
</body>
</html>
settingディレクトリ配下にsp.phpを作成します。
このページはスポンサーリンク情報を入力する画面になります。
formタグで名前、画像、リンク先となるURLを入力して次ページへpostするだけです。
スポンサーリンク登録画面
sp_check.php
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION["login"]) === false) {
print "ログインしていません。<br><br>";
print "<a href='set_login.php'>ログイン画面へ</a>";
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>cms</title>
<link rel="stylesheet" href="../style.css">
</head>
<body>
<aside>
<?php
try {
require_once("../common/common.php");
$post = sanitize($_POST);
$name = $post["name"];
$img = $_FILES["img"];
$url = $post["url"];
if(empty($name) === true or empty($img["name"]) === true or empty($url) === true) {
print "スポンサー情報を全て入力して下さい";
print "<form>";
print "<input type='button' onclick='history.back()' value='戻る'>";
print "</form>";
exit();
}
move_uploaded_file($img["tmp_name"],"./img/".$img["name"]);
$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 sp(name, img, url) VALUES(?,?,?)";
$stmt = $dbh -> prepare($sql);
$data[] = $name;
$data[] = $img["name"];
$data[] = $url;
$stmt -> execute($data);
$sql = "SELECT name, img, url FROM sp WHERE1";
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
print "<h2>管理人</h2>";
while(true) {
$rec = $stmt -> fetch(PDO::FETCH_ASSOC);
if(empty($rec["name"]) === true) {
break;
}
print "<div class='box'>";
print "<h3>".$rec["name"]."</h3>";
print "<div class='img'>";
print "<a href='".$rec['url']."'>";
print "<img src='img/".$rec['img']."'>";
print "</a>";
print "</div>";
print "</div>";
}
}
catch(Exception $e) {
print "サーバーに異常が発生しました。<br>";
print "<a href='set_top.php'>cmsトップへ</a>";
exit();
}
?>
<br><br>
上記内容で登録しました。
<br><br>
<a href="sp.php">スポンサー作成画面へ戻る</a>
<br>
<a href="set_top.php">トップメニューへ</a>
</aside>
</body>
</html>
settingディレクトリ配下にsp_check.phpを作成します。
このページは入力されたスポンサーリンク情報のチェック、プレビュー表示、テーブルに登録、する画面になります。
入力に誤りが無ければ、まず画像ファイルをimgディレクトリにアップロードさせています。
続いてデータベースに接続し、spテーブルに情報を追加します。
その後、spテーブルに保存されているスポンサーの一覧をプレビューさせます。
スポンサーリンクについては、登録されている情報をすべて公開ページに表示させたいので、このようにしました。
それでは2つ程登録してみます。
こちらもプレビューの表示が味気ないですが、これは後で作成する公開用ページのCSSでまとめてスタイリングさせます。
テーブルに情報が反映されているか確認します。
次回は、コメントの認証チェック、登録可否のページを作成します。