← 完成版とシステムの改良へ戻る / ソース一覧へ

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;
}

Copyright (c) 2014-2026 T.Kouya Laboratory @ Otemon Gakuin University. All rights reserved.