:::

4-8 整併並引入共同執行檔案 header.php

  1. 由於前台 index.php 及後台 admin.php 裡面都要連線資料庫,萬一資料庫日後改設定,便要改好幾個檔案,維護起來不易,檔案也顯得複雜,因此,可以將共同的部份獨立成一個php檔
  2. 我們建立一個 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();
    }
    

     

  3. index.php admin.php 只要用 require_once 引入該檔案即可
  4. 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();
        }
    }
    

     

  5. 至於引入的方法有 requirerequire_once) 及 include include_once)兩大類,這兩著功能幾乎一樣,最大的差異在於:
    1. require 若是引不到檔案,系統會引發嚴重錯誤,並立即停止
    2. include 若是引不到檔案,系統出現警告訊息,但仍會繼續執行

:::

書籍目錄

展開 | 闔起

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

計數器

今天: 1487148714871487
昨天: 1416141614161416
總計: 7340134734013473401347340134734013473401347340134