PHP - 表單驗證

你好,有志於PHP開發的們!今天,我們將進入表單驗證的精彩世界。作為你們親切友善的鄰居計算機老師,我在這裡指導你們這個網頁開發的重要環節。相信我,掌握表單驗證就像學騎自行車一樣 - 一旦你學會了,你就永遠不會忘記!

PHP - Form Validation

表單驗證的重要性

在我們跳進代碼之前,讓我們先來討論一下為什麼表單驗證如此重要。想象一下,你正在經營一個線上披薩外賣服務。如果有人訂購'ABC'個披薩或輸入'-5'作為他們的手機號碼,你會陷入一個非常棘手的局面!這就是表單驗證出場救援的地方,確保你接收到的數據是正確且可用的。

客戶端與服務器端驗證

在表單驗證的世界中,我們有兩個主要角色:客戶端和服務器端驗證。今天,我們將專注於使用PHP的服務器端驗證,但讓我們先簡單地介紹一下兩者:

客戶端驗證

客戶端驗證發生在用戶的瀏覽器中,在數據被發送到服務器之前。它速度快,並提供即時反饋,但它可以被熟練的用戶繞過。

服務器端驗證

服務器端驗證在表單提交後在服務器上發生。它更安全、更可靠,因為用戶無法篡改它。這就是我們今天將深入探討的內容。

開始使用PHP表單驗證

讓我們從一個簡單的表單開始,並逐步建立我們的驗證。這是我們的基本HTML表單:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名稱: <input type="text" name="name"><br>
年齡: <input type="text" name="age"><br>
<input type="submit" name="submit" value="提交">
</form>

現在,讓我們添加一些PHP魔法來驗證這個表單!

驗證函數

在我們深入具體的驗證之前,讓我們創建一些幫助函數:

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

這個test_input()函數做了三件重要的事情:

  1. trim()從字符串兩端移除空白字符
  2. stripslashes()移除反斜杠
  3. htmlspecialchars()將特殊字符轉換為HTML實體

這些步驟有助於防止惡意代碼注入,並確保我們的數據是乾淨的。

表單為空

讓我們從一個基本的檢查開始:表單是否為空?這是我們如何做到這一點:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "名稱為必填";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "年齡為必填";
} else {
$age = test_input($_POST["age"]);
}
}
?>

在這段代碼中:

  • 我們初始化變量以存儲我們的表單數據和錯誤消息。
  • 我們檢查表單是否已經使用POST提交。
  • 對於每個字段,我們檢查它是否為空。如果是,我們設置一個錯誤消息。如果不是,我們使用我們的test_input()函數清潔輸入。

年齡字段不是數字

現在,讓我們為年齡字段添加一個特定的檢查,以確保它是一個數字:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ... 以前的檢查 ...

if (empty($_POST["age"])) {
$ageErr = "年齡為必填";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年齡必須是數字";
}
}
}

在這裡,我們使用is_numeric()添加了一個額外的檢查,以確保年齡實際上是數字。如果不是,我們設置一個適當的錯誤消息。

所有一切整合起來

現在,讓我們看看我們完整的表單驗證腚本是如何的:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "名稱為必填";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "年齡為必填";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年齡必須是數字";
}
}
}
?>

<h2>PHP 表單驗證範例</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名稱: <input type="text" name="name">
<span class="error"><?php echo $nameErr;?></span>
<br><br>
年齡: <input type="text" name="age">
<span class="error"><?php echo $ageErr;?></span>
<br><br>
<input type="submit" name="submit" value="提交">
</form>

<?php
echo "<h2>你的輸入:</h2>";
echo $name;
echo "<br>";
echo $age;
?>

這個腚本:

  1. 定義變量和函數
  2. 在提交表單時進行驗證
  3. 如果有錯誤,則顯示表單和錯誤消息
  4. 顯示驗證後的輸入

驗證方法表

這裡是一個常用PHP驗證方法的便捷表格:

方法 描述 示例
empty() 檢查變量是否為空 if (empty($var))
isset() 檢查變量是否設置且不是NULL if (isset($var))
is_numeric() 檢查變量是否為數字或數字字符串 if (is_numeric($var))
strlen() 獲取字符串的長度 if (strlen($var) > 5)
preg_match() 执行正則表达式匹配 if (preg_match("/pattern/", $var))
filter_var() 使用指定過濾器過濾變量 if (filter_var($var, FILTER_VALIDATE_EMAIL))

記住,表單驗證是關於確保數據完整性和提高用戶體驗的。它就像在俱樂部當保鏢一樣 - 你希望讓好數據進來,壞數據出去!

在我們結束之前,我希望能夠這個教程給了你一個堅實的PHP表單驗證基礎。記住,熟能生巧,所以不要害怕嘗試不同的表單和驗證技巧。在你還沒有察覺之前,你就會像專家一樣驗證表單!

快樂編程,願你的表單總是有效!

Credits: Image by storyset