教材梳理與核心總結 (Initialization & Alignment)
掌握 PHP 的基礎語法與邏輯結構
任務說明
階段一:教材梳理與核心總結 (Initialization & Alignment)
這份 Lab 的核心目標非常明確:
"Understand the basic concepts of PHP programming."
這份實驗教材透過循序漸進的任務,要求你掌握 PHP 的基礎語法與邏輯結構。以下是為你提取的考點概覽表 (Summary of Core Concepts):
- 變數與資料型態 (Variables & Data Types)
"Create appropriate variables $name, $age, and$weight to store the relevant data."
- 解析:PHP 不需提前宣告型態。你必須能區分
String(字串)、Integer(整數) 與Floating-point(浮點數/小數) 的基本賦值。
- 算術與遞增運算子 (Arithmetic & Increment Operators)
"$x =$a++; ... $x = ++$a;"
- 解析:這是初學者最容易踩坑的地方!必須徹底搞懂「前置遞增 (
++$a)」與「後置遞增 ($a++)」在執行順序上的致命差異。另外也包含加減乘除與取餘數 (%) 的實作。
- 時間函數與條件邏輯 (Dates & Conditionals)
"According to the current month and year, your script will return the number of days of the corresponding month. You have to use switch conditional statement."
- 解析:結合
getdate()與time()取得當前時間,並實作switch與if-elseif來判斷各月份天數與閏年 (Leap year) 規則。
- 陣列與迴圈 (Arrays & Iteration)
"Create an array with the following values... Print these values to the browser separated by commas, using a loop to iterate over the array."
- 解析:將一堆資料放進陣列中,並使用迴圈 (通常是
foreach或for) 把它們一一拿出來處理。
階段二:學習路徑拆解 (Learning Path Decomposition)
根據 Lab 1 的任務份量,我為你制定了 3 個實戰次主題 (Sub-topics)。我們將直接從第一個次主題開始特訓:
- Sub-topic 1: 變數宣告與運算子陷阱 (Tasks 1-4)
- Sub-topic 2: 時間函數與邏輯判斷 (Tasks 5-6)
- Sub-topic 3: 陣列走訪實作 (Final Task)
階段三:知識講解與內化 (Execution: Sub-topic 1)
1. 變數與資料型態
在 Task 1 與 Task 2 中,我們需要建立並印出個人資料。
原文定義:
- "Data Type: $name (String), $age (Integer),$weight (Floating-point)"
💡 白話文與生活比喻:
PHP 的變數就像是一個個「貼著標籤的收納盒」,而且標籤前面一定要加上金錢符號 $。
PHP 是一個「弱型別」語言,這代表你不需要像 Java 一樣提前告訴盒子要裝什麼。
- 你想裝文字(String),就給它穿上引號外套:
$name = "Chan Tai Man"; - 你想裝整數(Integer),直接放進去:
$age = 19; - 你想裝小數(Floating-point),也直接放進去:
$weight = 65.5;
2. 前置遞增與後置遞增的致命陷阱 (Task 4)
Task 4 是程式邏輯選擇題或追蹤題中最愛考的陷阱。
原文定義與代碼:
$x = $a++;$x = ++$a;
💡 白話文解析(先結帳還是先升級?):
這兩個動作最終都會讓 $a 自己加 1,但交給別人的時機點完全不同。
- 後置遞增
$x = $a++;(先結帳,再升級):++寫在後面,代表$a是一個很守規矩的人。他會先把目前的值交給$x(結帳),然後自己再默默加 1。 假設一開始$a = 100,執行後,$x會拿到舊的100,然後$a自己變成101。 - 前置遞增
$x = ++$a;(先升級,再結帳):++寫在前面,代表$a是個急躁的人。他會先把自己加 1,然後再把升級後的新值交給$x。 承接剛才$a = 101,執行這行時,$a先把自己變成102,再把102交給$x。最後兩個人都是102。
Lab 1 - Task 1: 基礎網頁輸出
基本資料輸出環境測試
任務說明
建立一個名為 Lab01_Task1.php 的檔案,並包含標準 HTML 標籤。在 <body> 標籤內建立一個 PHP 區塊,在瀏覽器上分行顯示您的英文姓名、年齡和體重。完成後在瀏覽器中開啟頁面以核對結果。
Lab 1 - Task 2: 變數與型態宣告
PHP 變數與資料型態運用
任務說明
任務說明
重寫 Task 1 的 PHP 腳本,建立適當的變數 $name、$age 和 $weight 來儲存相關數據。使用變數在瀏覽器中不同的行上顯示這三個數據。將檔案儲存為 Lab01_Task2.php。
變數與資料型態規劃:

Lab 1 - Task 3: 算術運算子
算術運算子與動態資料計算
任務說明
編寫一個名為 Lab01_Task3.php 的 PHP 腳本,在瀏覽器上列印出算術運算的完整結果。設變數 $x = 20 且 $y = 6。
需要輸出的運算式包含:加法 (+)、減法 (-)、乘法 (*)、除法 (/) 以及模數/取餘數 (%)。
Lab 1 - Task 4: 遞增運算子
前置與後置遞增/遞減運算子追踪
任務說明
輸入並執行以下 PHP 腳本,觀察並追踪變數的值在執行前置與後置遞增時的變化過程,並寫下最終的輸出結果。
<?php
$a = 100;
$x = $a++;
echo "a: " . $a . "<br />";
echo "x: " . $x . "<br />";
$x = ++$a;
echo "a: " . $a . "<br />";
echo "x: " . $x . "<br />";
?>
Lab 1 - Task 5: Switch 條件控制
利用 Switch 條件控制計算月份天數
任務說明
編寫一個 PHP 腳本以顯示目前日期,格式為 [dd mm yy]。根據目前的月份和年份,您的腳本將返回對應月份的天數。您必須使用 switch 條件控制語句。將檔案儲存為 Lab01_Task5.php。
提示:閏年的判斷標準為:能被 4 整除,但不能被 100 整除(除非同時能被 400 整除)。
Lab 1 - Task 6: If-Else 重構
將條件控制重構為 If-Else-If 架構
任務說明
將 Task 5 重新改寫,改為使用 If-Else-If 條件控制結構來完成相同邏輯的月份天數計算,並將檔案儲存為 Lab01_Task6.php。
Lab 2 - Task 1: For 迴圈平方表
使用 For 迴圈建立乘方數列表格
任務說明
編寫一個 PHP 腳本,使用 for 迴圈 在瀏覽器上產生 1 到 10 的平方相乘列表輸出(例如:1 * 1 is 1)。將 PHP 檔案儲存為 Lab02_Task1.php。
Lab 2 - Task 2: 陣列綜合運算
結合陣列與多種迴圈進行數據分析
任務說明
編寫一個名為 Lab02_Task2.php 的新 PHP 文件。使用短陣列語法建立一個名為 $mathMark 的陣列,其中包含以下指定數值與順序:
70, 40, 60, 50, 20, 30, 10, 100, 80, 90
- 使用 do-while 迴圈 在瀏覽器上列印每個陣列元素。
- 使用 while 迴圈 找出最大值(Maximum mark)並顯示在瀏覽器上。
- 使用 for 迴圈 找出最小值(Minimum mark)並顯示在瀏覽器上。
Lab 2 - Task 3: 費氏數列表格
遞迴動態增長:費氏數列之 HTML 表格化
任務說明
費氏數列(Fibonacci sequence)的規律如下:1, 1, 2, 3, 5, 8, 13, 21, 34, . . .。
請使用 2 欄的 HTML 表格 印出前 20 個費氏數列元素。同時推算或思考第 50 個、第 500 個以及第 5000 個元素在記憶體中的處理方式。
Lab 3 - Task 1: 表單處理與驗證
表單資料接收與防呆驗證
任務說明
建立一個名為 Lab03_Task1.html 的 HTML 表單頁面,包含以下欄位:
- Name: 文字框 (text)
- Graduate Year: 數字框 (number)
- Alumni: 單選按鈕 (radio) - 包含 Yes 與 No 兩個選項
- Comments: 多行文字框 (textarea)
撰寫一個 PHP 腳本 (例如 Lab03_Task1_v4.php) 來接收並處理使用者點擊 Submit 後傳送的 POST 表單數據。
防呆驗證要求: 腳本必須檢查所有欄位是否皆已填寫(包含單選按鈕是否被選取)。如果有任何欄位未填寫,必須在瀏覽器上顯示對應的警告訊息;若全部填寫正確,則輸出所有接收到的資料。
Lab 3 - Task 2: 自定義函式
自定義函式與數值計算
任務說明
建立一個名為 Lab03_Task2.html 的表單,包含兩個輸入框,讓使用者輸入兩個數字(first Number 與 second Number)。
撰寫一個 PHP 腳本 Lab03_Task2.php 來處理表單:
- 接收
POST傳送來的兩個數字。 - 宣告一個名為
calTwoNumbers($n1, $n2)的自定義函式,該函式需負責將傳入的兩個數字相加並return其總和。 - 呼叫該函式並將結果顯示在瀏覽器上。
Lab 3 - Task 3: 挑戰題 - 年齡計算
年齡計算與條件判斷
任務說明
建立包含三個文字框的 HTML 表單 Lab03_Task3.html:First Name、Last Name 與 Year of Birth。
撰寫 PHP 腳本 Lab03_Task3.php 處理表單,需具備以下邏輯:
- 使用
extract($_POST)將陣列索引自動轉換為變數(例如$fname,$lname,$birthyear)。 - 防呆機制:檢查三個欄位是否皆已填寫,若有空白(使用
trim()消除空白後長度為 0),則累加錯誤訊息,並提供返回表單的連結。 - 動態年齡計算:利用
date('Y')獲取伺服器當前年份,減去出生的年份計算使用者年齡。 - 條件判斷:若年齡
>= 18歲,顯示歡迎訊息;若< 18歲,則顯示拒絕/警告訊息。
Lab 4 - Task 1: 資料庫數據讀取
資料庫數據讀取與表格顯示
任務說明
建立一個名為 Lab04_1.php 的檔案,連接至本機 MySQL 資料庫並從 customers 資料表中讀取所有的客戶記錄,最後使用標準的 HTML 表格將所有數據完整顯示在瀏覽器上。
顯示欄位要求: Cust ID、Cust Name、Cust Password、Cust Gender。
資料庫結構參考 (lab04.sql):
CREATE TABLE Customers(
custID Varchar(4) NOT NULL,
custName Varchar(30) NOT NULL,
custPswd Varchar(6) NOT NULL,
custGender Varchar(1) NOT NULL,
PRIMARY KEY (custID)
);
Lab 4 - Task 2: 表單元件數據綁定
表單元件與資料庫欄位綁定
任務說明
重新改寫 Task 1 的資料讀取網頁。這次從資料庫讀取出資料後,不能直接顯示成純文字表格,而是必須**將資料與 HTML 表單元件(Form Controls)進行數據綁定**:
- 客戶姓名與密碼必須顯示在可修改的輸入方塊(
<input type="text">)內。 - 性別欄位必須改為兩個單選按鈕(Male 和 Female),並且系統要根據資料庫取出的性別值,自動將正確的選項加上
checked="checked"的勾選標記。
完成後將檔案儲存為 Lab04_2.php。
Lab 4 - Task 3: 資料庫記錄寫入
資料庫記錄寫入與重複檢查
任務說明
建立一個整合新增資料表單與後端處理邏輯的 PHP 頁面 Lab04_3.php。本任務需要實作向資料庫寫入新資料的防呆核心機制:
- 一頁式多重處理:表單的
action設定為指向自己本身($_SERVER['PHP_SELF'])。當偵測到有 POST 提交的資料時進入後端資料庫檢查與儲存流程;未提交時則單純呈現輸入表單。 - 防重複檢查:在執行
INSERT之前,必須先以SELECT語法查詢資料庫。若偵測到即將新增的 Customer ID 已經存在,後端必須停止動作,並透過 URL 回傳錯誤訊息:"Record already exist!"。 - 新增成功提示:若 ID 未重複,成功執行寫入指令後,在頁面上提示訊息:"A record is added successfully"。
Lab 5 - Task 1: 超連結刪除 (GET)
使用 GET 方法與超連結刪除資料
任務說明
重新改寫資料讀取網頁,建立一個名為 Lab05_1a.php 的檔案。在表格中新增一欄「Action」,在每個儲存格內生成一個用於刪除該筆記錄的超連結(Hyperlink)。
- GET 方法傳參: 每個生成的超連結必須動態帶有查詢字串(Query String),格式為
?custID=xxxx(xxxx 為該列客戶的 ID)。 - 後端刪除腳本: 建立
Lab05_1b.php,負責接收$_REQUEST['custID']或$_GET['custID'],執行DELETE的 SQL 語法。 - 自動重新導向: 刪除成功後,後端必須使用
header("location:Lab05_1a.php")自動跳轉回原列表頁面。
Lab 5 - Task 2: 按鈕刪除 (POST)
使用 POST 方法與隱藏欄位刪除資料
任務說明
將 Task 1 的超連結刪除方式改寫,建立 Lab05_2a.php。改為使用** HTML 表單、按鈕(Button)與 JavaScript 配合 POST 方法**來進行刪除:
- 隱藏欄位傳參: 表單內放置一個隱藏元件(
<input type="hidden" name="custID" id="custID" />)。 - JavaScript 觸發提交: 點擊表格內的「Delete Record」按鈕時,調用自定義 JavaScript 函式
setValue(n),將該筆資料的custID寫入隱藏欄位中,並以程式碼觸發表單提交(document.forms[0].submit();)。 - 後端處理解答: 建立
Lab05_2b.php接收 POST 來的數據,執行刪除並導回Lab05_2a.php。
Lab 5 - Task 3: 更新資料記錄
動態資料更新與舊資料回填表單
任務說明
實作完整的資料庫資料修改功能。建立 Lab05_3a.php 網頁,將列表與編輯表單做整合:
- 一頁式載入: 表格第一欄為「Update Record」超連結。點擊超連結後,網頁會重新載入自己,並在網址列帶上
?custID=xxxx。 - 資料回填表單: 如果網頁偵測到 URL 有帶入
custID,則在表格下方顯示一個修改表單,並從資料庫查詢該客戶的舊資料自動填入(Customer ID 設定為readonly唯讀模式避免被修改)。 - 更新提交處理: 表單使用
POST提交至Lab05_3b.php,使用UPDATE語法更新資料庫,完成後使用header()重新導回Lab05_3a.php。