:::
4. 用AI來產生表單儲存功能
一、關於PHP的資料庫連線
- 填完表單送出後,就準備寫入資料庫了。
- 要寫入資料庫,必須先連上資料庫,PHP的MySQL連線方式有
mysqli及pdo兩種方式mysqli僅支援MySQL,但其語法和早期的 mysql 系列函數很像,所以,適合舊系統轉換,或者熟悉mysql系列函數者pdo則支援十幾種資料庫,因此,若有需要切換資料庫者,這是不二選擇,缺點是性能較mysqli差一點。
二、請AI來產生寫入語法
- 請輸入以下提示詞:
請根據上述表單及資料庫欄位來產生PHP 8.2的程式語法:
將表單送到 admin.php 後
將所有值以PDO物件用?佔位符的方式,存入上述資料表中,並取得存入的 id 值。
接著根據 id 值建立 uploads/id/ 文章檔案目錄來存放圖檔
完成多個檔案上傳至文章檔案目錄的功能,並以檔名為索引,檔案路徑為值,存為 json 格式。
取得json值後,更新該文章的 media 欄位值 -
會產生如下結果:
<?php // 處理檔案上傳 $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=localhost;dbname=your_database;charset=utf8mb4'; $username = 'your_username'; $password = 'your_password'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 準備SQL語句 $sql = "INSERT INTO news (title, content, author, date, category) 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); // 更新該文章的 media 欄位值 $updateSql = "UPDATE news SET media = ? WHERE id = ?"; $updateStmt = $pdo->prepare($updateSql); $updateStmt->execute([$media, $lastInsertId]); } echo "資料插入成功!"; } else { echo "資料插入失敗!"; } } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); } }基本上已經差不多相當完整,我們稍加調整即可,所以,先建立一個新檔,貼上以上語法,存為
admin.php即可。 -
每次產生結果可能都不太一樣,不過,大致可以分為幾大部份:
-
過濾存入變數
-
指定並建立上傳目錄
-
連線資料庫
-
寫入資料庫
-
3-3-5 發布頁面 admin.html 初步完成