網頁設計 EP09-PHP 表單處理(下)

更新 發佈閱讀 10 分鐘

在EP04介紹超全域變數時,曾提及$_SERVER$_POST$_GET這三個常見用於表單驗證的內建全域變數

網頁設計 EP04-PHP 變數範圍

當按下送出表單的按鈕(HTML button)後,表單會透過設定的方法(GET或POST)將資料送到 form action 屬性設定的目標網址,這個時候必須要用 PHP 的 $_POST$_GET 變數來接收資料,本篇要介紹 PHP 接收 Form 的過程與範例。

表單處理入門

當使用者填寫完表單並點擊提交按鈕後,表單資料將會被傳送到名為「form.php」的PHP 檔案進行處理,而表單資料透過 HTTP POST 方法發送,透過超全域變數$_POST顯示哪位貴賓登入。

<?PHP
    echo "welcome".$_POST['account'];
?>

完成了簡易的表單處理後,會發現缺乏安全性,最常見的就是 XSS(Cross-Site Scripting,跨站腳本攻擊)。

XSS(Cross-Site Scripting,跨站腳本攻擊)

XSS (cross-site scripting) 是很常見的網路攻擊,利用網站中的漏洞,透過 HTTP 網路請求注入惡意腳本,網路伺服器執行客戶端腳本,從而實現內容操控或資料竊取,也就是惡意用戶會張貼 JavaScript 代碼上來,當其他用戶瀏覽到這一頁時,瀏覽器就會執行 JavaScript 代碼。


那該如何防範呢?


本篇要介紹的就是後端針對任何允許用戶輸出的內容都要檢查以及刪除相關的關鍵字指令等等。

第一步:

第一步先確認表單傳遞方式是不是透過 POST 或是 GET,這是最重要的守門員。如果沒有這一行,當你第一次打開網頁(還沒填表單)時,PHP 就會急著去抓 $_POST,結果抓不到就會報錯 (Warning)。這行程式碼確保了「只有按了按鈕送出表單後,才開始檢查」

<?PHP
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    echo "welcome".$_POST['account'];
}
?>

第二步:

這是一個防護罩。如果駭客在 Email 欄位輸入 <script>alert('Hacked')</script>,這個函式會把它轉譯成無害的純文字。在台灣的資安規範中,這是防止 XSS (Cross-Site Scripting 跨網站指令碼攻擊) 的基本功。

<?PHP
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $account = htmlspecialchars($_POST['account']);
    $password = htmlspecialchars($_POST['pw']);
    echo "welcome".$account;
}
?>

第3、4行用變數 $account 以及 $password 來儲存所接收到的資料,這裡要注意的是 $_POST不等於$_post,大小寫是完全不一樣的事情,根據 PHP 的規則,若寫成小寫會失效。

第三步:

最後根據表單發送的資料做比對,將最終結果顯示在網頁上。

<?PHP
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $account = htmlspecialchars($_POST['account']);
    $password = htmlspecialchars($_POST['pw']);

    if(!empty($password)){

        if($password == "1234"){
           echo "welcome".$account;
         }
        else{
        echo "password is error";
        }
}
    else{
       echo "password is missing";
        }
}
?>

常用於驗證的函式

htmlspecialchars()

PHP 防範 XSS 的重要工具,能夠把預定義字符(< > & ' ")轉換成HTML可以顯示出來的符號,讓輸入的東西變成純文字,不被解釋為 HTML 或是 Js 。

isset()

檢查變數是否存在(undefined、沒有初始值、null)且值不為 null,回傳 true,反之。

常用於檢查變數以及陣列中的 key 是否存在。

<?php
$var = 1;
$var1 = "";
$var2 = null;
$var3 = [];
$var4;

echo var_dump(isset($var)); //輸出bool(true)
echo var_dump(isset($var1)); //輸出bool(true)
echo var_dump(isset($var2)); //輸出bool(false)
echo var_dump(isset($var3)); //輸出bool(true)
echo var_dump(isset($var4)); //輸出bool(false)
echo var_dump(isset($var5)); //輸出bool(false)
?>

除了一次檢查一個變數以外也可以一次檢查多個,只要其中一個為 false,就會回傳false。

<?php​
echo var_dump(isset($var, $var1, $var2, $var3));//輸出bool(false)
?

empty()

檢查變數是否為空值,如果為空,回傳 true,反之。

❗特別的是,即使是空字串""、整數00.0"0"nullfalse[]$var 以及undefined都會被判定為空。

<?php
$var = 0;
$var1 = "0";
$var2 = null;
$var3 = [];
$var4 = 0.0;
$var5 = false;
$var6 = "";
$var7 ;

echo var_dump(empty($var)); //輸出為bool(true)
echo var_dump(empty($var1)); //輸出為bool(true)
echo var_dump(empty($var2)); //輸出為bool(true)
echo var_dump(empty($var3)); //輸出為bool(true)
echo var_dump(empty($var4)); //輸出為bool(true)
echo var_dump(empty($var5)); //輸出為bool(true)
echo var_dump(empty($var6)); //輸出為bool(true)
echo var_dump(empty($var7)); //輸出為bool(true)
echo var_dump(empty($var8)); //輸出為bool(true)
?>

is_null()

檢查變數是否為 null,如果為 null,回傳 true,反之。

<?php
$var = 0;
$var1 = "0";
$var2 = null;
$var3 = [];
$var4 = 0.0;
$var5 = false;
$var6 = "";
$var7 ;

echo var_dump(is_null($var)); //輸出為boll(false)
echo var_dump(is_null($var1)); //輸出為boll(false)
echo var_dump(is_null($var2)); //輸出為boll(true)
echo var_dump(is_null($var3)); //輸出為boll(false)
echo var_dump(is_null($var4)); //輸出為boll(false)
echo var_dump(is_null($var5)); //輸出為boll(false)
echo var_dump(is_null($var6)); //輸出為boll(false)
echo var_dump(is_null($var7)); //輸出為boll(true)
echo var_dump(is_null($var8)); //輸出為boll(true)
?>


本篇文章到這裡就結束了,如果喜歡我的文章或覺得有用的話,歡迎動動手指點擊愛心,你/妳的支持是我最大的動力,我們下篇文章見🙌。

留言
avatar-img
逃的沙龍
3會員
13內容數
分享學習路上的內容與心得
逃的沙龍的其他內容
2026/03/24
本文深入介紹 HTML 表單處理的核心概念,包含 form 標籤的各種屬性(如 action, method, target 等)及其作用,以及 input, label, button 等常用輸入元素。此外,也提及了 div 容器、id 與 class 的區別,為後續的表單驗證主題打下基礎。
Thumbnail
2026/03/24
本文深入介紹 HTML 表單處理的核心概念,包含 form 標籤的各種屬性(如 action, method, target 等)及其作用,以及 input, label, button 等常用輸入元素。此外,也提及了 div 容器、id 與 class 的區別,為後續的表單驗證主題打下基礎。
Thumbnail
2026/03/03
本篇文章將深入探討 PHP 函數的核心概念,從內建函數的介紹,到如何撰寫自訂函數,以及參數的傳遞方式。我們將詳細解釋參數預設值、資料型別指定、可變參數、具名參數,以及可變函數、匿名函數和箭頭函數等進階主題。透過清晰的說明與範例,幫助你有效率地編寫更具彈性和可讀性的 PHP 程式碼。
Thumbnail
2026/03/03
本篇文章將深入探討 PHP 函數的核心概念,從內建函數的介紹,到如何撰寫自訂函數,以及參數的傳遞方式。我們將詳細解釋參數預設值、資料型別指定、可變參數、具名參數,以及可變函數、匿名函數和箭頭函數等進階主題。透過清晰的說明與範例,幫助你有效率地編寫更具彈性和可讀性的 PHP 程式碼。
Thumbnail
2026/02/25
深入瞭解 PHP 運算子的種類與應用,包含算術、賦值、邏輯、字串、比較、位元、錯誤控制與執行運算子,助您掌握程式邏輯,提升程式開發效率。
Thumbnail
2026/02/25
深入瞭解 PHP 運算子的種類與應用,包含算術、賦值、邏輯、字串、比較、位元、錯誤控制與執行運算子,助您掌握程式邏輯,提升程式開發效率。
Thumbnail
看更多
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
大家好!我們都知道,程式碼寫出來不代表就完工了,還要確保它真的“做到”我們想要的。這就是測試的力量!尤其是在 Web 開發中,測試確保我們的應用正確、穩定且高效地運行。今天,我們就來探討如何在 Gin 應用中進行測試和單元測試。
Thumbnail
大家好!我們都知道,程式碼寫出來不代表就完工了,還要確保它真的“做到”我們想要的。這就是測試的力量!尤其是在 Web 開發中,測試確保我們的應用正確、穩定且高效地運行。今天,我們就來探討如何在 Gin 應用中進行測試和單元測試。
Thumbnail
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
JWT(JSON Web Token)是基於 JSON 格式的開放標準,主要用於身份驗證與權限確認。本文介紹了JWT的基本結構,並闡述其特點,如降低資料庫壓力、靈活性及無狀態性。JWT 特別適用於分佈式系統。本篇將協助讀者深入理解 JWT 的重要性與實際應用。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
Vibe Coding 正在顛覆傳統程式開發模式,這種由 OpenAI 共同創辦人 Andrej Karpathy 在 2025 年提出的全新開發範式,讓開發者能夠用自然語言描述需求,由 AI 自動生成程式碼。這種「氛圍式程式設計」不僅降低了軟體開發門檻,更讓非專業的人也能透過 AI 開發應用程式。
Thumbnail
Vibe Coding 正在顛覆傳統程式開發模式,這種由 OpenAI 共同創辦人 Andrej Karpathy 在 2025 年提出的全新開發範式,讓開發者能夠用自然語言描述需求,由 AI 自動生成程式碼。這種「氛圍式程式設計」不僅降低了軟體開發門檻,更讓非專業的人也能透過 AI 開發應用程式。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
前幾天看到一則標題『貼牌的中國製智慧門鈴內含安全漏洞』,讓我想到以前寫過類似的故事,關於小型資訊公司與貼牌軟體漏洞的故事,也想重新整理思路當面對類似問題無論是開發公司或是購買軟體的公司該如何面對。
Thumbnail
前幾天看到一則標題『貼牌的中國製智慧門鈴內含安全漏洞』,讓我想到以前寫過類似的故事,關於小型資訊公司與貼牌軟體漏洞的故事,也想重新整理思路當面對類似問題無論是開發公司或是購買軟體的公司該如何面對。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News