Toggle main menu visibility
下載輕鬆架
套件下載
使用手冊
發問討論
網站地圖
:::
登入
登入
帳號
密碼
登入
:::
所有書籍
「用AI學PHP8」目錄
MarkDown
5-2-3 建立縮圖並產生json資料
1. 學好程式的幾個建議
1-1 安裝PHP運作環境
1-2 安裝 VSCode 開發工具
1-3 安裝 Composer
1-4 關於PHP8
1-5 上課範例及需求
1-6 研習時需要的學習心態
1-7 建立專案目錄
2. 開始動手做界面
2-1 請AI幫我們做前端界面
2-2 請AI幫我們做滑動圖輪播區
2-3 將首頁和滑動圖整併在一起
2-4 請AI製作文章發布界面
3. 精修完整界面樣板
3-1 安裝Smarty樣板引擎
3-2 建立前、後台樣板檔並套用之
3-3 將主樣板檔拆分成小樣板
3-3-1 美化頁首樣板檔 header.tpl
3-3-2 優化導覽列 nav.tpl
3-3-3 統一主內容樣式 main.tpl
3-3-4 微調一下側邊欄
3-3-5 修改頁尾
4. 讓表單開始有作用
4-1 傳入變數讓程式知道現在要做什麼
4-2 根據不同動作自動載入相對應樣板
4-3 修改編輯表單使之可以送出資料
4-4 製作共同頁首檔 header.php
5. 將資料存到資料庫
5-1 建立資料庫連線
5-2 用AI來產生表單儲存功能
5-2-1 接收表單的值
5-2-2 用PDO寫入資料庫
5-2-3 建立縮圖並產生json資料
5-2-4 檔案上傳與接收
5-3 完成整個新增流程
6. 製作顯示單一文章的功能
6-1 將資料庫取出的值帶入樣板
6-2 讓滑動圖可以真的運作
6-3 套用真實圖片到輪播圖中
7. 製作首頁列表功能
7-1 取得指定的新聞資料數
7-2 完成首頁輪播圖及新聞列表
7-3 製作文章摘要
7-4 加入文章分頁功能
7-5 完成側邊欄的近期新聞
8. 開始加入管理功能
8-1 讓系統記住是否為管理員
8-2 製作登入、登出功能
8-3 加入管理工具功能
8-4 製作編輯功能
8-5 初步完成更新功能
8-6 完成圖片管理
8-7 加入刪除功能
9. 完成各種小細節
9-1 完成點閱數功能
9-2 用影片替換輪播圖
9-3 加入搜尋功能
9-4 點擊學校可以列出該校文章
9-5 產生內嵌語法
5-3 完成整個新增流程
用AI學PHP8 ======== ### 一、單一個檔案的上傳基本概念 1. 若表單中有 `file `元件,其表單一定要加上 `enctype="multipart/form-data`" 2. 假設 `file `欄位名稱為 `image_files`(先將`[]`及`multiple `拿掉,也就是只上傳一個檔),如此送出後會產生一組 `$_FILES` 超級全域變數(二維陣列): - `$_FILES['image_files']['name']`:上傳檔案原始名稱。 - `$_FILES['image_files']['type']`:檔案的 MIME 類型,例如“image/gif”。 - `$_FILES['image_files']['size']`:已上傳檔案的大小,單位為bytes。 - `$_FILES['image_files']['tmp_name']`:檔案被上傳後的臨時檔案名。 - `$_FILES['image_files']['error']`:和該檔案上傳相關的錯誤代碼。 3.
上傳的步驟:**送出上傳 → 檔案會暫時放到主機的暫存目錄(如:tmp中) → 程式要搬移該暫存檔 `$_FILES['image_files']['tmp_name'] `到指定的位置。** 4. 搬移上傳檔方法: ```php move_uploaded_file($_FILES['image_files']['tmp_name'], 新路徑檔名); ```
### 二、多個檔案的上傳基本概念: 1. 假設 file 欄位名稱為 `image_files`,多檔上傳的 `name `屬性必須加上`[]`及`multiple`屬性,如: ```markup
``` 2. 假設選了兩個檔送出後` $_FILES` 超級全域變數會變成像這樣(三維陣列): 1. 第一個檔案 - `$_FILES['image_files']['name'][0]`:第一個檔案原始名稱。 - `$_FILES['image_files']['type'][0]`:第一個檔案的 MIME 類型,例如“image/gif”。 - `$_FILES['image_files']['size'][0]`:第一個檔案的大小,單位為bytes。 - `$_FILES['image_files']['tmp_name'][0]`:第一個檔案被上傳後的臨時檔案名。 - `$_FILES['image_files']['error'][0]`:第一個檔案上傳相關的錯誤代碼。 2. 第二個檔案 - `$_FILES['image_files']['name'][1]`:第二個檔案原始名稱。 - `$_FILES['image_files']['type'][1]`:第二個檔案的 MIME 類型,例如“image/gif”。 - `$_FILES['image_files']['size'][1]`:第二個檔案的大小,單位為bytes。 - `$_FILES['image_files']['tmp_name'][1]`:第二個檔案被上傳後的臨時檔案名。 - `$_FILES['image_files']['error'][1]`:第二個檔案上傳相關的錯誤代碼。 ### 三、調整我們的上傳語法: 1. 先用 [file\_exists()](https://www.php.net/file_exists) 檢查目錄是否存在,若不存在就建立上傳目錄。而目錄會根據文章 `id `編號來建立子目錄,例如 `id=12` 的文章,其目錄路徑就是 `/uploads/12/`,這樣可以避免圖檔互相覆蓋,避免誤刪或者未來要刪除文章時也比較容易刪掉附檔。 ```php // 獲取插入的ID $id= $pdo->lastInsertId(); // 創建上傳目錄 $upload_dir = "uploads/{$id}/"; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0777, true); } ``` 其中 `0777 `是指任何人都可以寫入,而最後的 `true `則是連同父目錄(`uploads`)都一併建立 2. 我們的上傳欄位為: ```markup
``` 所以需要用 `foreach()` 迴圈來讀取 `$_FILES['image_files']`,以便一個檔一個檔抽出來,用 [move\_uploaded\_file()](https://www.php.net/move_uploaded_file) 完成上傳動作。 3. 目前AI給的上傳檔案的語法: ```php // 處理文件上傳 if ($_POST['upload_type'] === 'image' && !empty($_FILES['image_files']['name'][0])) { foreach ($_FILES['image_files']['name'] as $key => $name) { $tmp_name = $_FILES['image_files']['tmp_name'][$key]; $error = $_FILES['image_files']['error'][$key]; if ($error === UPLOAD_ERR_OK) { $extension = pathinfo($name, PATHINFO_EXTENSION); $new_name = uniqid() . '.' . $extension; $destination = $upload_dir . $new_name; if (move_uploaded_file($tmp_name, $destination)) { $media_json[$name] = $destination; } } } } ``` 4. 檔案上傳後,我們必須把所有檔案資訊記錄下來,這樣日後讀出時,才能知道此文章有把些檔案。其中 `$media_json `就是用來儲存所有上傳的檔案陣列,`$name `是原始檔名,用來作為` $media_json `的陣列索引;`$destination `則是真實檔案的完整路徑,如此便可得知這張圖片放在主機的什麼位置。 5. 最後,只要將 `$media_json `資料用 [json\_encode()](https://www.php.net/json_encode) 編成JSON格式(加上 `JSON_UNESCAPED_UNICODE `參數可以讓中文正確呈現,否則會用Unicode編碼,不過 `JSON_UNESCAPED_UNICODE `太難記,所以可以直接輸入其對應值 `256 `就好),再寫進資料庫就OK囉! ```php // 更新media欄位 if (!empty($media_json)) { $update_sql = "UPDATE school_news SET media = ? WHERE id = ?"; $update_stmt = $pdo->prepare($update_sql); $json_data = json_encode($media_json, 256); $update_stmt->execute([$json_data, $id]); } ```
:::
書籍目錄
展開
|
闔起
快速登入
所有討論區
Tad Search 資料查詢
懶人框架討論區
實戰PHP7+MySQL
XOOPS輕鬆架快速上手
校園網站輕鬆架一般討論區
Booking Helper 預約助手
es_stud_sign 班級報名
es charge 學生收費管理
E-Stud import 學生名冊管理
es_after_school 課後照顧報名
es_exam 學生作業繳交
ES_panel 校務行政面板
es_timetable 課表
ES_youtube 本校影音
info_whats 網路設備記錄
jill booking 場地預約
jill_notice 臨時公告
jill query 簡易查詢
jill receipt 領據填報
kw club 社團報名
kw device 設備借用管理系統
ntpc_oprnid 新北市 OpenID 登入
TinyD嵌入內容模組
ugm contact us 聯絡我們
ugm page 自訂頁面
ugm table 萬用表格
Yaoh Servicelearning 服務學習管理系統
dummy 自訂模組
soone_submit 投稿模組
Tad Adm 站長工具箱
Tad Assignment 作業上傳展示模組
Tad Blocks 進階區塊管理
Tad Book3 線上書籍
Tad Cal 行事曆
Tad Cbox 即時留言簿
Tad Discuss 討論區模組
Tad Embed 崁入模組
Tad Evaluation 評鑑檔案管理
Tad Form 萬用表單模組
Tad FAQ 常見問答
Tad Google 相簿
Tad Gallery 電子相簿
Tad Guide 安裝精靈
Tad Honor 榮譽榜
Tad idioms 背背成語
Tad Link 好站連結
Tad Login 快速登入
Tad Lunch3 午餐資訊
Tad Lunch2 營養午餐公告
Tad Meeting 會議系統
Tad Merage 線上合併套印
Tad News 本站消息
Tad Player 影音播放
Tad RSS 友站新聞
Tad Repair 維修通報
Tad SiteMap網站地圖
Tad Timeline 重要紀事
Tad Themes 佈景管理
Tad Tools 工具包
Tad TV 直播電視
Tad Uploader 檔案上傳模組
Tad Users 大量會員管理
Tad Web 多人網頁模組
MyTabs 我的頁籤
Random Quote 隨機小語
LogCounterX 網站流量統計
Yaoh light 多區塊多層次跑馬燈模組
校園網站輕鬆架功能建議區
佈景討論區
即時留言簿
search
進階搜尋
計數器
今天:
昨天:
總計: