在之前的文章中為大家帶來了《PHP資料庫學習之怎樣設定與取得PDO屬性? 》,其中詳細的介紹了PHP中怎樣設定與取得PDO屬性的相關知識,本篇我們來看看PHP表單的相關問題,希望對大家有幫助!
在先前的文章中我們已經了解了PHP的基礎,其中就有$_GET
和 $_POST
變量,它們用來檢索表單中的信息,其中需要我們注意的知識點就是PHP表單使用者輸入和表單驗證。那接下來我們就來看看PHP中表單輸入與表單驗證的相關知識吧。
PHP表單和使用者輸入
#想要去了解PHP表單和使用者輸入,首先我們要明白什麼是表單。 Web表單準確來說算是一個互動平台,主要的功能就是讓瀏覽者和網站有一個互動的平台。表單主要就是在網頁中用來傳送資料到伺服器。
例如,註冊資訊時使用到的表單,當你填寫完資訊時需要提交,這時候提交就是將你註冊時表單上的內容從客戶端瀏覽器傳送到伺服器端,再經過PHP程式處理後,再將使用者所需的資訊傳遞回到客戶端瀏覽器上,透過取得使用者的訊息,使得PHP與Web表單實現互動。就是提供了這麼一個互動的平台。
接下來我們透過範例來看表單,範例如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP中文网</title> </head> <body> <form action="form.php" method="post"> 名字: <input type="text" name="fname"><br> 年龄: <input type="text" name="age"><br> <input type="submit" value="提交"> </form> </body> </html>
其中需要我們注意的是表單屬於HTML的知識,更多的相關知識,大家可以點擊《HTML教學》進行學習,上述範例的運行結果:
這便是我們所說的表單,那麼我們在其中填寫的資料也就是表單資料會傳送到哪裡呢?當我們點擊提交的時候,表單中的資料就會以POST的形式,發送到form.php這個頁面。
<?php header("Content-type:text/html;charset=utf-8"); //设置编码 echo "欢迎你:".$_POST["fname"] ."<br/>"; echo "你的年龄是:".$_POST['age']; ?>
我們傳送到from.php的運行結果如下:
#當使用者輸入完成後,這時候就需要對表單進行驗證了,應該在任何可能的時候透過客戶端腳本對使用者輸入進行驗證。瀏覽器驗證速度更快,並且可以減輕伺服器的負載。
如果使用者輸入需要插入資料庫,您應該考慮使用伺服器驗證。在伺服器驗證表單的一個很好的方法是,把表單傳給它自己,而不是跳到不同的頁面。這樣使用者就可以在同一張表單頁面得到錯誤訊息。用戶也就更容易發現錯誤了。那接下來我們一起來看看表單驗證的相關知識吧。
PHP表單驗證
#在處理PHP表單時我們需要考慮安全性。我們將展示PHP表單資料安全處理,為了防止駭客及垃圾資訊我們需要對表單進行資料安全驗證。接下來我們透過實例來看表單中的必須與可選文字字段,單選按鈕,及提交按鈕。
範例如下:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP.cn</title> </head> <body> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name" value=""> <br> E-mail: <input type="text" name="email" value=""> <br> 网址: <input type="text" name="website" value=""> <br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
輸出結果:
#其中我們需要注意的是不同的欄位有不同的驗證規則,上述範例中不同欄位的驗證規則如下:
名字的驗證規則是必須的,並且只能包含字母和空格。 E-mail的驗證規則是必須的,其中必須是一個有效的電子郵件地址(包含'@'和'.')。網址的驗證規則的是可選的,如果存在,它必須包含一個有效的URL。備註的驗證規則是可選的,多行輸入欄位。性別的驗證規則是必須的,必須選擇一個。
透過上述範例我們再來看一下其中所用到的知識:
<span style="font-size: 16px;"><strong>#$_SERVER["PHP_SELF"] </strong></span>
變數
$_SERVER["PHP_SELF"]
是一種超全域變數,它會傳回目前執行腳本的檔案名稱。因此,$_SERVER["PHP_SELF"]
將表單資料傳送到頁面本身,而不是跳到另一張頁面。這樣,使用者就能夠在表單頁面獲得錯誤提示訊息。
<strong><span style="font-size: 16px;">htmlspecialchars()</span></strong>
# 函數##
htmlspecialchars()
函数把特殊字符转换为 HTML 实体。这意味着 之类的 HTML 字符会被替换为 92d33664ec5f827b86e068a341370a86 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
其中我们需要注意的是:
$_SERVER["PHP_SELF"]
变量能够被黑客利用,如何避免 $_SERVER["PHP_SELF"]
被利用?
$_SERVER["PHP_SELF"]
可以通过 htmlspecialchars()
函数来避免被利用。
form 代码如下所示:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 把一些预定义的字符转换为 HTML 实体。现在如果用户想利用 PHP_SELF 变量, 结果将输出如下所示:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
尝试该漏洞失败!
通过PHP验证表单数据
我们要做的第一件事是通过 PHP 的 htmlspecialchars()
函数传递所有变量。在用户提交该表单时,我们还要做两件事:
首先通过 PHP trim()
函数去除用户输入数据中不必要的字符,比如多余的空格、制表符、换行等,然后通过 PHP stripslashes()
函数删除用户输入数据中的反斜杠(\
)。接下来我们创建一个检查函数,我们把函数命名为 test_input()
。最后我们能够通过 test_input()
函数检查每个 $_POST
变量。
我们将验证程序可以放到上述示例中去,示例如下:
PHP中文网(php.cn) PHP 表单验证实例
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字:
E-mail:
网址:
备注:
性别: 女 男
您输入的内容是:"; echo $name; echo "
"; echo $email; echo "
"; echo $website; echo "
"; echo $comment; echo "
"; echo $gender; ?>
输出结果:
其中我们需要注意的是:
我们在执行以上脚本时,会通过$_SERVER["REQUEST_METHOD"]
来检测表单是否被提交 。如果 REQUEST_METHOD
是 POST, 表单将被提交 - 数据将被验证。如果表单未提交将跳过验证并显示空白。在以上实例中使用输入项都是可选的,即使用户不输入任何数据也可以正常显示。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上是PHP表單學習表單的輸入與驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!