最後,我們需要把這個 json 資訊存入資料庫,所以會用到更新資料的SQL語法:
UPDATE `資料表名稱` SET `欄位1`='值1', `欄位2`='值2', ... [WHERE 篩選條件] [LIMIT 筆數]
以我們的例子就是:
// 更新該文章的 media 欄位值
$updateSql = "UPDATE news SET media = ? WHERE id = ?";
$updateStmt = $pdo->prepare($updateSql);
$updateStmt->execute([$media, $lastInsertId]);
儲存後,我們必須轉向,避免一直停留在新增的狀態,所以,會用 header("location: 轉向位址");
將畫面導向到另一頁(用header()
之前不可以有任何輸出,故須將「資料已成功儲存」訊息刪除)。
//執行後轉向
header("location: admin.html?op=show&id=$id");
exit;
我們目前儲存後暫時轉到發布界面 admin.html
以方便繼續發布,因為前台還未完成(?op=show&id=$id
則是練習一下get帶參數的傳遞方法,目前尚無作用。將會傳遞兩個參數,分別是用來告之下個欲執行動作的 $_GET['op']
及文章編號 $_GET['id']
)。
<?php
// 建立PDO連線
$dbname = 'blog';
$host = 'localhost';
$charset = 'utf8mb4';
$username = 'root';
$password = '1qazXSW@';
// 處理檔案上傳
$uploadDir = 'uploads/'; // 上傳目錄
// 處理表單提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 取得表單的值
$title = $_POST['title'];
$content = $_POST['content'];
$author = $_POST['author'];
$date = $_POST['date'];
$category = $_POST['category'];
// 建立資料庫連接
$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);
// 準備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();
}
}