← 完成版とシステムの改良へ戻る / ソース一覧へ
common/common.php
このページはソースコードを表示するためのHTMLです。source_common/common/common.php への直接リンクではないため,PHPスクリプトは実行されません。
<?php
// common/common.php
// 第5章後半で使用する共通処理ファイル
$dsn = 'mysql:host=localhost;dbname=challenge;charset=utf8mb4';
$user = 'root';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
} catch (PDOException $e) {
exit('データベース接続に失敗しました。');
}
function h($value): string
{
return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}
function login_check(): array
{
global $dbh;
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
if (!isset($_SESSION['id'], $_SESSION['time'])) {
header('Location: index.php');
exit();
}
if ($_SESSION['time'] + 3600 <= time()) {
header('Location: logout.php');
exit();
}
$_SESSION['time'] = time();
$sql = 'SELECT * FROM member WHERE id = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', (int)$_SESSION['id'], PDO::PARAM_INT);
$stmt->execute();
$member = $stmt->fetch();
if (!$member) {
header('Location: logout.php');
exit();
}
return $member;
}
function get_admin_id(string $admin_name = 'admin'): ?int
{
global $dbh;
$sql = 'SELECT id FROM member WHERE name = :name';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':name', $admin_name, PDO::PARAM_STR);
$stmt->execute();
$admin = $stmt->fetch();
return $admin ? (int)$admin['id'] : null;
}
function is_admin(array $member, string $admin_name = 'admin'): bool
{
$admin_id = get_admin_id($admin_name);
return $admin_id !== null && (int)$member['id'] === $admin_id;
}