Web表單的功能就是讓瀏覽者和網站有一個互動的平臺。表單主要用來在網頁中發送數據到服務器。例如,你註冊信息是所使用的表單,當你填寫完信息時,你要提交(submit),提交就是將你表單中的內容從客戶端瀏覽器傳送到服務器端,經過PHP程序進行處理後,再將用戶所需要的信息傳遞迴客戶端瀏覽器上,通過獲取用戶的信息,使PHP與Web表單實現交互。
本文實現了一個表單驗證的列子:
1:通過用戶輸入的名字,郵件,網址,性別等信息,並對相關信息進行合法性驗證。
2:用戶輸入錯誤,提示紅色錯誤提示信息。
3:輸入信息全部合法之後,才顯示用戶的輸入信息。
表單驗證代碼如下:
<html>
<head>
<meta charset="utf-8">
<title>PHP學習</title>
</head>
<style>
.error {color: #FF0000;}
</style>
<body>
<?php
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// 定義變量並默認設置爲空值
$name = $email = $gender = $comment = $website = "";
$nameErr = $emailErr = $genderErr = $commentErr = $websiteErr ="";
$flag = true;
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["name"])){
$nameErr = "姓名是必須填的";
$flag = false;
} else {
$name = test_input($_POST["name"]);
// 檢查姓名是否包含字母和空白字符
if (!preg_match("/^[a-zA-Z ]*$/", $name)){
$nameErr = "只允許字母和空格";
$flag = false;
}
}
if (empty($_POST["email"])){
$emailErr = "郵件是必填的";
$flag = false;
} else {
$email = test_input($_POST["email"]);
// 檢查郵件地址語法是否有效
if(!preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$email)){
$emailErr = "無效的email格式";
$flag = false;
}
}
if (empty($_POST["website"])){
$flag = false;
} else {
$website = test_input($_POST["website"]);
// 檢查URL地址語法是否有效(正則表達式也允許URL中的斜槓)
if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)){
$websiteErr = "無效的URL";
$flag = false;
}
}
if (empty($_POST["gender"])){
$genderErr = "性別是必選的";
$flag = false;
} else {
$gender = test_input($_POST["gender"]);
}
if (!empty($_POST["comment"])){
$comment = test_input($_POST["comment"]);
}
}
?>
<h2>PHP 表單驗證實例</h2>
<form method="post" action="<?php echohtmlspecialchars($_SERVER["PHP_SELF"]);?>">
名字:<inputtype="text" name="name">
<span class="error">*<?php echo$nameErr;?></span>
<br><br>
E-mail:<input type="text" name="email">
<span class="error">* <?php echo$emailErr;?></span>
<br><br>
網址:<inputtype="text" name="website">
<span class="error">* <?php echo$websiteErr;?></span>
<br><br>
備註:<textareaname="comment" rows="5"cols="40"></textarea>
<br><br>
性別:
<input type="radio" name="gender"value="female">女
<input type="radio" name="gender"value="male">男
<span class="error">* <?php echo$genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="提交">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST" and $flag)
{
echo "<h2>您輸入的內容是:</h2>";
echo "名字:" .$name . "<br>";
echo "E-mail:" . $email . "<br>";
echo "網址:" . $website . "<br>";
echo "備註:" . $_POST["comment"] . "<br>";
echo "性別:" . $_POST["gender"] . "<br>";
}
?>
</body>
</html>
初始狀態:
運行結果:
用到的知識:
1:$_SERVER[“PHP_SELF”]是一個超全局變量,返回房錢執行腳本的文件名。
2:htmlspecialchars()函數把特殊字符轉化爲HTML實體。這意味着 < 和 > 之類的 HTML 字符會被替換爲 < 和 > 。這樣可防止攻擊者通過在表單中注入 HTML 或 JavaScript 代碼(跨站點腳本攻擊)對代碼進行利用。
3:可以通過$_SERVER[“REQUEST_METHOD”]來檢測表單是否被提交。
4:在用戶提交表單時,應進行的處理:(通過 PHP trim() 函數)去除用戶輸入數據中不必要的字符(多餘的空格、製表符、換行);(通過 PHP stripslashes() 函數)刪除用戶輸入數據中的反斜槓(\)。
5:使用正則表達式驗證字符串是否符合條件:
正則表達式簡單介紹
preg_match ( string
^表示開始;$表示結束。
在正則表達式中字母使用\w、而數字使用\d(\D表示非數字)來表示
• + 表示一個或者多個
• * 表示0個或者多個
• ? 表示有或者沒有
• {n} 表示具體幾位
• {m,n} 表示大於m個,小於n個
使用或條件可以用來匹配字符串,如果僅僅是單個的字母或者字符,則可以使用範圍表示
使用[]可以表示一個字符的取值範圍
‘/[a0.]/’可以匹配包含了a或者0或者.的任意字符串
另外,正則表達式還可以使用-來表示一組範圍
• [a-z] 表示小寫的26個字母中的任意一個
• [A-Z] 表示一個大寫字母
• [0-9] 表示一位十進制數