:::
主內容區域
4-8 整併並引入共同執行檔案 header.php
- 由於前台
index.php及後台admin.php裡面都要連線資料庫,萬一資料庫日後改設定,便要改好幾個檔案,維護起來不易,檔案也顯得複雜,因此,可以將共同的部份獨立成一個php檔 - 我們建立一個
header.php,也就是所有檔案一開始做的動作都放在這裡,例如:<?php // 建立PDO連線 $dbname = 'blog'; $host = 'localhost'; $charset = 'utf8mb4'; $username = 'root'; $password = '1qazXSW@'; // 建立資料庫連接 $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset"; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); } index.php及admin.php只要用require_once引入該檔案即可index.php部份:<?php require_once 'header.php'; try { // 準備SQL語句 $sql = "SELECT * FROM news ORDER BY date DESC"; // 預備語句 $stmt = $pdo->prepare($sql); // 綁定參數並執行語句 $stmt->execute(); $news = $stmt->fetchAll(); foreach ($news as $row) { // 在這裡處理每一筆資料 $row = array_map('htmlspecialchars', $row); echo "<li>{$row['title']}</li>"; } } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); }admimn.php部份:<?php require_once 'header.php'; // 處理檔案上傳 $uploadDir = 'uploads/'; // 上傳目錄 // 處理表單提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 取得表單的值 $title = $_POST['title']; $content = $_POST['content']; $author = $_POST['author']; $date = $_POST['date']; $category = $_POST['category']; try { // 準備SQL語句 $sql = "INSERT INTO news (title, content, author, date, category, media) VALUES (?, ?, ?, ?, ?, ?)"; // 預備語句 $stmt = $pdo->prepare($sql); // 綁定參數並執行語句 $stmt->execute([$title, $content, $author, $date, $category, '[]']); // 取得插入的資料行數 $rowCount = $stmt->rowCount(); if ($rowCount > 0) { // 取得插入的 id 值 $lastInsertId = $pdo->lastInsertId(); // 建立存放圖檔的目錄 $articleDir = $uploadDir . $lastInsertId . '/'; if (!file_exists($articleDir)) { mkdir($articleDir, 0777, true); } // 處理多檔案上傳 if (!empty($_FILES['media'])) { $fileData = array(); foreach ($_FILES['media']['name'] as $index => $fileName) { $fileTmpName = $_FILES['media']['tmp_name'][$index]; $fileDestination = $articleDir . $fileName; // 將檔案移動到文章檔案目錄 move_uploaded_file($fileTmpName, $fileDestination); // 將檔案路徑存入陣列 $fileData[$fileName] = $fileDestination; } // 將檔案相關資訊轉換為JSON格式 $media = json_encode($fileData, 256); // 更新該文章的 media 欄位值 $updateSql = "UPDATE news SET media = ? WHERE id = ?"; $updateStmt = $pdo->prepare($updateSql); $updateStmt->execute([$media, $lastInsertId]); } //執行後轉向 header("location: admin.html?op=show&id=$lastInsertId"); exit; } else { echo "資料插入失敗!"; } } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); } }- 至於引入的方法有
require(require_once) 及include(include_once)兩大類,這兩著功能幾乎一樣,最大的差異在於:require若是引不到檔案,系統會引發嚴重錯誤,並立即停止include若是引不到檔案,系統出現警告訊息,但仍會繼續執行
4-7 讀出資料的過濾