# 資料庫程式設計 僑光科技大學 資訊科技系 2018/09/17 ~ 2019/01/14 授課老師:高吉隆 電子信箱:[kevinkao888@gmail.com](mailto://kevinkao888@gmail.com) --- ## 課程大綱 * 資料庫的程式設計 * 資料庫的函數使用 * 資料庫的自訂函數 * 資料庫的子查詢 * 資料庫的JOIN查詢 * 資料庫的專題實作 ---- ### 每週上課目標 * 前 9 週上課目標(觀念講解、上課練習) * 後 9 週上課目標(分組練習、專題報告) ---- | 週| 上課日期 | 前 9 週上課目標 | 備註 |:-:|:---------:|------------|:--: | 1 | 107/09/17 |課程設計與簡介| | 2 | 107/09/24 |中秋節放假一天| | 3 | 107/10/01 |資料庫之安裝與建立| | 4 | 107/10/08 |動態網頁程式(PHP)| | 5 | 107/10/15 |資料庫的查詢|小考一 | 6 | 107/10/22 |資料庫的函數使用| | 7 | 107/10/29 |資料庫的自訂函數| | 8 | 107/11/05 |資料庫網頁之實作|小考二 | 9 | 107/11/12 |期中考|30% ---- | 週 | 上課日期 | 後 9 週上課目標 | 備註 |:--:|:----------:| --------------- |:--: | 10 | 107/11/19 | 分組討論與題目訂定 | | 11 | 107/11/26 | 資料庫規畫、分析 | | 12 | 107/12/03 | 資料庫建置與測試資料 | | 13 | 107/12/10 | 資料庫實作之問題討論 | | 14 | 107/12/17 | 資料庫實作之問題解決 | | 15 | 107/12/24 | 分組報告之書面資料 |作業 | 16 | 108/12/31 | 專題實作:上機操作 | | 17 | 108/01/07 | 期末專題成果展示 | | 18 | 108/01/14 | 期末專題成果展示 |30% ---- ### 課程評分方式 * 平時成績:30% (上課互動+二次小考) * 上課互動:10% * 第一次小考:10% (107/10/15) PHP * 第二次小考:10% (107/10/29) MYSQL * 期中成績:30% (上機測驗) * 考試範圍:PHP、MYSQL * 期末成績:40% (期末報告) * 第一次作業:10% (108/01/14) 書面報告 * 專題製作:30% (108/01/14)上台報告、PPT簡報 ---- ### 使用教科書 * 書名:最新PHP+MYSQL+AJAX網頁程式設計 * 出版社:旗標 * 作者:施威銘研究室 ![](https://media.taaze.tw/showLargeImage.html?sc=11100705361&width=340&height=474) ---- ### 網路資源 * 網站:W3Schools * 網址:[https://www.w3schools.com/](https://www.w3schools.com/) * 主題:PHP、MYSQL --- ### XAMPP安裝 * 主要包括以下套件 * Apache、PHP、MySQL * https://www.apachefriends.org/zh_tw/index.html * 打開xampp控制台(Apache, MySQL->Start) ![](https://i.imgur.com/UE0P7Rv.png) --- ### 編輯PHP與測試 * 開啟Apache:按(Start) * 編輯PHP程式:安裝NotePad++([下載](https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.Installer.x64.exe)) * 儲存PHP程式:於(C:\xampp\htdocs\index.php) * 執行PHP程式:按(Admin) ---- ### 案例演練 * 以下參考教學網站:[http://www.twhappy.com/](http://www.twhappy.com/) * 請將每個範例存成 ex01.php ~ exXX.php * 練習1:PHP基本語法([範冽2](http://www.twhappy.com/index.php?action=show&no=100)) * 練習2:PHP註解語法([範冽3](http://www.twhappy.com/index.php?action=show&no=101)) * 練習3:變數的使用([範冽4](http://www.twhappy.com/index.php?action=show&no=102)) * 練習4:字串和數字運算子([範冽5](http://www.twhappy.com/index.php?action=show&no=103)) * 練習5:比較和邏輯運算子([範冽6](http://www.twhappy.com/index.php?action=show&no=104)) * 範例6:判斷控制結構([範冽7-9](http://www.twhappy.com/index.php?action=show&no=105)) ---- ### 第一次小考成績 * 最高分:99,最低分:30 * 平均分:64,全加分:5,其中有1題修正:±3 ![](https://i.imgur.com/eBrIdLm.png) ---- ### 第二次小考成績 * 平均:60,加分:8 ![](https://i.imgur.com/Jy2JxWY.png) ---- ### 期中考成績 * 平均:78 ![](https://i.imgur.com/XKubSwW.png) --- ### 隨堂練習:建立資料表(Student) * 進入test資料庫,手動建立Student資料表 * 設定編碼:utf8mb4_unicode_ci * 建立StudentNo欄位:varchar(10) * 建立StudentName欄位:varchar(10) * 建立Height欄位:int * 建立Weight欄位:int * 執行SQL指令:快速建立方式 ```javscript= CREATE TABLE Student ( StudentNo varchar(10) NOT NULL, StudentName varchar(10) NOT NULL, Height int NOT NULL, Weight int NOT NULL ) CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ---- ### 隨堂練習:匯入資料 * 手動新增資料 * 匯入CSV文字檔 * 開啟test.xlsx檔:[下載](https://my.ocu.tw/db/test.xlsx) * 另存新檔:選擇csv檔案格式(Student.csv) * NotePad++:轉換至UTF-8格式並存檔([下載](https://my.ocu.tw/db/test.csv)) * 資料表匯入 * 選擇檔案 * 欄位名稱:StudentNo,StudentName * 執行 ---- ### 隨堂練習:函數使用 * 產生亂數身高:150 ~ 180 * 產生亂數體重:50 ~ 80 * 使用內建函數 * round():四捨五入 * rand():0~1間產生亂數 ```sql= Update Student set Height = 150 + round(rand() * 30); Update Student set Weight = 50 + round(rand() * 30); ``` ---- #### 建立預存程序BMI * 定義:體重/(身高/100)/(身高/100) * 手動建立: * 預存程序名稱:BMI * 型態:FUNCTION * 參數:Height(int)、Weight(int) * 回傳值類型:int * 定義:RETURN Weight / Power(Height/100, 2) * 執行SQL指令: ```sql= CREATE FUNCTION BMI(Height INT, Weight INT) RETURNS int(11) RETURN Weight / Power(Height/100, 2); ``` ---- ![](https://i.imgur.com/USFjgmO.png) ---- ### 隨堂練習:函數使用 * 建立函數BMI_TEXT(Function) * 輸入參數:BMI * 回傳:過重/超過25 * 回傳過輕:低於18 * 回傳標準:其他 * 回傳字串:varchar(10) ```sql= RETURN CASE WHEN BMI > 25 THEN '過重' WHEN BMI < 18 THEN '過輕' ELSE '標準' END; ``` ---- #### 隨堂練習:函數回傳 * 執行SQL指令 ```sql= CREATE FUNCTION BMI_TEXT(BMI int) RETURNS VARCHAR(10) CHARSET utf8mb4 RETURN CASE WHEN BMI > 25 THEN '過重' WHEN BMI < 18 THEN '過輕' ELSE '標準' END; ``` ---- ![](https://i.imgur.com/UO4G2wn.png) ---- * 檢驗結果 #### 隨堂練習:函數使用 ```javascript= SELECT *, BMI(Height, Weight) as BMI, BMI_TEXT(BMI(Height, Weight)) as BMI_TEXT from student ``` --- ### 隨堂練習:MySQL vs MySQLi ||MySQL|MySQLi |-|:-:|:-:| |PHP版本支援|5.5以前|5以後 |預存程序Stored Procedure|不支援|支援 |預備指令Prepared Statements|不支援|支援 |多行指令Multiple Statements|不支援|支援 |物件導向Object Oriented|不支援|支援 |交易操作Transactions|不支援|支援 ![](https://i.imgur.com/0WG344O.png) ---- #### 隨堂練習:新增紀錄(PHP+MYSQL) * 以下隨堂練習:PHP原始碼([下載](https://my.ocu.tw/db/student.zip)) * 新增PHP檔至:C:\xampp\htdocs\insert.php * 貼上以下原始碼:新增一筆紀錄 ```php= <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $sql = "insert into Student values ('12345678', '測試', 170, 70)"; $DB->query($sql); echo "已新增!"; ?> ``` * 執行以下網址測試:[http://localhost/insert.php](http://localhost/insert.php) ---- #### 隨堂練習:刪除紀錄(PHP+MYSQL) * 新增PHP檔至:C:\xampp\htdocs\delete.php * 貼上以下原始碼:刪除紀錄 ```php= <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $sql = "delete from Student where StudentNo = '12345678'"; $DB->query($sql); echo "已刪除!"; ?> ``` * 執行以下網址測試:[http://localhost/delete.php](http://localhost/delete.php) ---- #### 隨堂練習:修改紀錄(PHP+MYSQL) * 新增PHP檔至:C:\xampp\htdocs\update.php * 貼上以下原始碼:修改紀錄 ```php= <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $sql = "Update Student set Height = 140 + round(rand() * 50);"; $DB->query($sql); echo "已修改!"; ?> ``` * 執行以下網址測試:[http://localhost/update.php](http://localhost/update.php) ---- #### 隨堂練習:回傳值(PHP+MYSQL) * 新增PHP檔至:C:\xampp\htdocs\count.php * 貼上以下原始碼:回傳一欄值 ```php= <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $sql = "select count(*) as No from Student"; $object = $DB->query($sql)->fetch_object(); echo $object->No."<br>"; $row = $DB->query($sql)->fetch_row(); echo $row[0]."<br>"; $assoc = $DB->query($sql)->fetch_assoc(); echo $assoc[No]."<br>"; $array = $DB->query($sql)->fetch_array(); echo $array[0]."<br>"; echo $array[No]."<br>"; ?> ``` * 執行以下網址測試:[http://localhost/count.php](http://localhost/count.php) ---- #### 隨堂練習:回傳所有紀錄(PHP+MYSQL) * 新增PHP檔至:C:\xampp\htdocs\list.php * 貼上以下原始碼:回傳紀錄值 ```php= <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $Data = $DB->query("select * from Student"); while ($myrow = $Data->fetch_assoc()) { echo $myrow["StudentNo"]; echo " ".$myrow["StudentName"]."<br>"; } ?> ``` * 執行以下網址測試:[http://localhost/list.php](http://localhost/list.php) ---- #### 隨堂練習:回傳紀錄套用表格(PHP+MYSQL) * 新增PHP檔至:C:\xampp\htdocs\table.php * 參考以下原始碼:([連結](https://www.w3schools.com/bootstrap4/tryit.asp?filename=trybs_table_striped&stacked=h)) ```htmlmixed= <table class="table table-striped"> <thead> <tr> <th>學號</th> <th>姓名</th> <th>身高</th> <th>體重</th> <th>BMI</th> <th>標準</th> </tr> </thead> <tbody> <?php $DB = new mysqli("localhost", "root", "", "test"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $Data = $DB->query("select *, BMI(Height, Weight) as BMI, BMI_TEXT(BMI(Height, Weight)) as BMI_TEXT from Student"); while ($myrow = $Data->fetch_object()) { echo "<tr>"; echo "<td>$myrow->StudentNo</td>"; echo "<td>$myrow->StudentName</td>"; echo "<td>$myrow->Height</td>"; echo "<td>$myrow->Weight</td>"; echo "<td>$myrow->BMI</td>"; echo "<td>$myrow->BMI_TEXT</td>"; echo "</tr>"; } ?> </tbody> </table> ``` * 執行以下網址測試:[http://localhost/table.php](http://localhost/table.php) --- ### 期末報告進行方式 * 分組:2-4人一組 * 題目:僑光資科系網站 * 資料:舊網站、老師收集 * 工具:Joomla(CMS)/Mobirize |主題內容|主題內容|主題內容|主題內容| |:-:|:-:|:-:|:-:| |首頁編排|佈景製作|認識資科|師資陣容| |課程資訊|專業教室|實驗室|榮譽榜| |法規流程|表單下載|資訊志工|學生輔導| |充電站|產學合作| --- ### Joomla 製作方式 * 參考網站:[產業人才培育平台](http://hr.ocu.tw/index.php/home) * 下載:XAMPP(Apache、MySQL、PHP)[下載](https://www.apachefriends.org/zh_tw/index.html) * 於php.ini中修改 * max_execution_time = 3000 * upload_max_filesize = 10M * 啓動Apache、啓動MySQL * Joomla:[原廠連結](https://downloads.joomla.org/) * 解壓縮後複製至 c:\xampp\htdocs\ 中 * 執行安裝程式:[http://localhost/](http://localhost/) ---- #### 執行安裝程式:[http://localhost/](http://localhost/) ![](https://i.imgur.com/KBN0WH1.png =800x600) ---- #### 設定資料庫 ![](https://i.imgur.com/MAXaSqB.png =800x600) ---- #### 預覽網站 ![](https://i.imgur.com/7VAyJsa.png =800x600) ---- #### 安裝多國語言套件 ![](https://i.imgur.com/9w5mhSv.png =800x600) ---- #### 選擇 Chinese Traditional ![](https://i.imgur.com/fk3eYvb.png =800x600) ---- #### 前台和後台都選擇繁體中文 ![](https://i.imgur.com/utgY1RI.png =800x600) ---- #### 移除安裝資料夾 ![](https://i.imgur.com/8eqQ8tx.png =800x600) ---- #### 前台預覽:[http://localhost/](http://localhost/) ![](https://i.imgur.com/GBkaZyk.png =800x600) ---- #### 後台登入:[http://localhost/administrator/](http://localhost/administrator/) ![](https://i.imgur.com/MNfc6nt.png =800x600) ---- #### 後台預覽 ![](https://i.imgur.com/wDvoiLh.png =800x600) --- ### 安裝Jumi模組 * 下載Jumi模組:[下載](https://my.ocu.tw/db/student.zip) ![](https://i.imgur.com/V7iRdvT.png =800x600) ---- #### 執行Jumi模組 ![](https://i.imgur.com/6X8x2oo.png =800x600) ---- #### 新增Jumi應用程式 * 新增Jumi ![](https://i.imgur.com/wg8wgXo.png =800x600) ---- #### 新增選單項目 * 選單->Main Menu->新增選單項目 * 選擇類型->Jumi Application,標題輸入:Hello * Jumi Application:選擇hello ![](https://i.imgur.com/JZVJX4a.png) ---- #### 修改為學生資料表 * 開啟Jumi Application:Hello * 編輯Custom Script內容:修改資料庫名稱 * 複製以下內容,並貼上 ```javascript= <table class="table table-striped table-hover"> <thead> <tr> <th>學號</th> <th>姓名</th> <th>身高</th> <th>體重</th> <th>BMI</th> <th>標準</th> </tr> </thead> <tbody> <?php $DB = new mysqli("localhost", "root", "", "myweb"); if ($DB->connect_errno) exit(); $DB->set_charset("utf8"); $Data = $DB->query("select *, BMI(Height, Weight) as BMI, BMI_TEXT(BMI(Height, Weight)) as BMI_TEXT from Student"); while ($myrow = $Data->fetch_object()) { echo "<tr>"; echo "<td>$myrow->StudentNo</td>"; echo "<td>$myrow->StudentName</td>"; echo "<td>$myrow->Height</td>"; echo "<td>$myrow->Weight</td>"; echo "<td>$myrow->BMI</td>"; echo "<td>$myrow->BMI_TEXT</td>"; echo "</tr>"; } ?> </tbody> </table> ``` --- ### 使用Joomla免費樣板工具 * Joomla Demo Site:[連結](https://demo.ocu.tw/) * Joomla Demo Administrator:[連結](https://demo.ocu.tw/administrator/) * 帳號:demo,密碼:demo * Helix Ultimate:[連結](https://www.joomshaper.com/downloads/template/helixultimate) * Template Download:[下載](https://www.joomshaper.com/downloads/template/helixultimate/download/2-template) * Quickstart Pack Download:[下載](https://www.joomshaper.com/downloads/template/helixultimate/download/1-quickstart-pack) * Quickstart Pack Demo:[連結](http://demo.ocu.tw/web/) * Quickstart Pack Administrator:[連結](http://demo.ocu.tw/web/administrator/) * 帳號:demo,密碼:demo ---- #### Helix Ultimate功能說明-1 * Basic Setting: * Logo:Image/Text * Header:Sticky Header Switch * Body:Boxed/Full Width * Footer:Copyright Setting * Social Icons:FB/Google+/LinkIn/IG/Youtube * Contact Info:Phone/Mobile/EMail/Opening Hours ---- #### Helix Ultimate功能說明-2 * Layout Builder: * Header Type:Header Switch * Layout:Move Position * Grid:Width Setting * Row:Fluid Width/Padding/Margin * Navigation: * Mega Menu:Menu Type/Off-Canvas Position ---- ### 使用Joomla免費Source Code工具 * Sourcerer:[連結](https://extensions.joomla.org/extension/sourcerer/) * 文章->新增文章:輸入標題TEST1->內容如下 ```javascript= TEST {source} <h1>TEST1</h1> <?php echo "現在時間是:".date("Y-m-d H:i:s"); ?> {/source} ``` * 選單->Main Menu新增選單項目:輸入標題->選單類型(文章->單一文章->選擇文章TEST1) ---- ### Sourcerer範例說明 * 下載資料庫檔案:[下載](http://demo.ocu.tw/download/Teacher.zip) * 進入phpMyAdmin:選擇資料庫->匯入 * ->選擇Teacher.sql->執行 * 修改文章TEST1:內容如下: ```javascript= {source} <div class="container-fluid"> <div class="row"> <?php $DB = new mysqli('localhost', 'root', '', 'test'); if ($DB->connect_errno) exit(); $DB->set_charset('utf8'); $Data = $DB->query("Select TeacherName, WorkName from Teacher where WorkType = '專任' order by SeqNo"); while ($object = $Data->fetch_object()) { ?> <div class="col-sm-6 col-md-4 col-lg-3" style="background-color:lavender;"> <div class="card" style="width:100%"> <img class="card-img-top" src="https://www.w3schools.com/bootstrap4/img_avatar1.png" alt="Card image" style="width:100%"> <div class="card-body"> <h3 class="card-title"><?php echo $object->TeacherName ?></h4> <h6 class="card-text"><?php echo $object->WorkName ?></p> <a href="#" class="btn btn-primary">See Profile</a> </div> </div> </div> <?php } ?> </div> </div> {/source} ``` ---- ### 使用Joomla免費Smart Slider 3工具 * SP Builder Lite:[連結](https://www.joomshaper.com/downloads/extension/sp-page-builder-free) * SP Builder Lite Download:Login to download * SP Builder Lite Download:[下載](http://my.ocu.tw/db/com_sppagebuilder_lite_v3.2.9.zip) * SP Builder Try it Free:[連結](https://try.sppagebuilder.com/index.php/1-home/edit)* Smart Slider 3:[連結](https://smartslider3.com/) * Smart Slider 3 Download:[下載](https://smartslider3.com/free-joomla-slider/)
{"metaMigratedAt":"2023-06-14T18:16:27.772Z","metaMigratedFrom":"Content","title":"資料庫程式設計","breaks":true,"contributors":"[{\"id\":\"9eed60a5-6546-4dfd-8445-07f81bcfde52\",\"add\":20135,\"del\":6657}]"}
    2262 views