PHP - 表單驗證
你好,有志於PHP開發的們!今天,我們將進入表單驗證的精彩世界。作為你們親切友善的鄰居計算機老師,我在這裡指導你們這個網頁開發的重要環節。相信我,掌握表單驗證就像學騎自行車一樣 - 一旦你學會了,你就永遠不會忘記!
表單驗證的重要性
在我們跳進代碼之前,讓我們先來討論一下為什麼表單驗證如此重要。想象一下,你正在經營一個線上披薩外賣服務。如果有人訂購'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()
函數做了三件重要的事情:
-
trim()
從字符串兩端移除空白字符 -
stripslashes()
移除反斜杠 -
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;
?>
這個腚本:
- 定義變量和函數
- 在提交表單時進行驗證
- 如果有錯誤,則顯示表單和錯誤消息
- 顯示驗證後的輸入
驗證方法表
這裡是一個常用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