:::

4-5 更新資料(寫入檔案資訊)

  1. 最後,我們需要把這個 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]);

     

  2. 儲存後,我們必須轉向,避免一直停留在新增的狀態,所以,會用 header("location: 轉向位址"); 將畫面導向到另一頁(用header()之前不可以有任何輸出,故須將「資料已成功儲存」訊息刪除)。

    //執行後轉向
    header("location: admin.html?op=show&id=$id");
    exit;

    我們目前儲存後暫時轉到發布界面 admin.html 以方便繼續發布,因為前台還未完成(?op=show&id=$id 則是練習一下get帶參數的傳遞方法,目前尚無作用。將會傳遞兩個參數,分別是用來告之下個欲執行動作的 $_GET['op'] 及文章編號 $_GET['id'])。

三、目前完整語法

  1. 請試著發布幾篇文章看看,也記得順便上傳幾個檔案試試
    <?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();
        }
    }
    

     

  2. 資料可以先直接到 adminer 去看看有無寫入資料即可,檔案則是查看 uploads 下有無檔案就知道了

:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1976

計數器

今天: 1517151715171517
昨天: 1416141614161416
總計: 7340164734016473401647340164734016473401647340164