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
若是引不到檔案,系統出現警告訊息,但仍會繼續執行