當前位置 : IT培訓網 > PHP開發 > php教程 > PHP教程之PHP表單驗證

PHP教程之PHP表單驗證

時間:2016-11-25 10:30:57??來源:php培訓網??作者:鄭州IT培訓網??已有:名學員訪問該課程
今天,IT培訓網小編給大家介紹的是PHP教程之PHP表單驗證。本章節我們將介紹如何使用PHP驗證客戶端提交的表單數據。

  今天,IT培訓網小編給大家介紹的是PHP教程之PHP表單驗證。本章節我們將介紹如何使用PHP驗證客戶端提交的表單數據。在處理PHP表單時我們需要考慮安全性。

  本章節我們將展示PHP表單數據安全處理,為了防止黑客及垃圾信息我們需要對表單進行數據安全驗證。

  在本章節介紹的HTML表單中包含以下輸入字段: 必須與可選文本字段,單選按鈕,及提交按鈕:

PHP 表單驗證實例

* 必需字段。

名字:  

E-mail:  

網址:  

備注:  

性別: 女 男 

 

您輸入的內容是:

  查看代碼 :

  <!DOCTYPE HTML>

  <html>

  <head>

  <meta charset="utf-8">

  <title>IT培訓網(cnitedu.cn)</title>

  <style>

  .error {color: #FF0000;}

  </style>

  </head>

  <body>

  <?php

  // 定義變量并默認設置為空值

  $nameErr = $emailErr = $genderErr = $websiteErr = "";

  $name = $email = $gender = $comment = $website = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST")

  {

  if (empty($_POST["name"]))

  {

  $nameErr = "名字是必需的";

  }

  else

  {

  $name = test_input($_POST["name"]);

  // 檢測名字是否只包含字母跟空格

  if (!preg_match("/^[a-zA-Z ]*$/",$name))

  {

  $nameErr = "只允許字母和空格";

  }

  }

  if (empty($_POST["email"]))

  {

  $emailErr = "郵箱是必需的";

  }

  else

  {

  $email = test_input($_POST["email"]);

  // 檢測郵箱是否合法

  if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

  {

  $emailErr = "非法郵箱格式";

  }

  }

  if (empty($_POST["website"]))

  {

  $website = "";

  }

  else

  {

  $website = test_input($_POST["website"]);

  // 檢測 URL 地址是否合法

  if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))

  {

  $websiteErr = "非法的 URL 的地址";

  }

  }

  if (empty($_POST["comment"]))

  {

  $comment = "";

  }

  else

  {

  $comment = test_input($_POST["comment"]);

  }

  if (empty($_POST["gender"]))

  {

  $genderErr = "性別是必需的";

  }

  else

  {

  $gender = test_input($_POST["gender"]);

  }

  }

  function test_input($data)

  {

  $data = trim($data);

  $data = stripslashes($data);

  $data = htmlspecialchars($data);

  return $data;

  }

  ?>

  <h2>PHP 表單驗證實例</h2>

  <p><span class="error">* 必需字段。</span></p>

  <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

  名字: <input type="text" name="name" value="<?php echo $name;?>">

  <span class="error">* <?php echo $nameErr;?></span>

  <br><br>

  E-mail: <input type="text" name="email" value="<?php echo $email;?>">

  <span class="error">* <?php echo $emailErr;?></span>

  <br><br>

  網址: <input type="text" name="website" value="<?php echo $website;?>">

  <span class="error"><?php echo $websiteErr;?></span>

  <br><br>

  備注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>

  <br><br>

  性別:

  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">女

  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">男

  <span class="error">* <?php echo $genderErr;?></span>

  <br><br>

  <input type="submit" name="submit" value="Submit">

  </form>

  <?php

  echo "<h2>您輸入的內容是:</h2>";

  echo $name;

  echo "<br>";

  echo $email;

  echo "<br>";

  echo $website;

  echo "<br>";

  echo $comment;

  echo "<br>";

  echo $gender;

  ?>

  </body>

  </html>

上述表單驗證規則如下:

  字段驗證規則

  名字必須。 +只能包含字母和空格

  E-mail必須。 + 必須是一個有效的電子郵件地址(包含'@'和'.')

  網址必須。如果存在,它必須包含一個有效的URL

  備注必須。 多行輸入字段(文本域)

  性別必須。 必須選擇一個

  首先讓我們先看看純HTML的表單代碼:

  文本字段

  "名字", "E-mail", 及"網址"字段為文本輸入元素,"備注"字段是 textarea。HTML代碼如下所示:

  “名字”: <input type="text" name="name">

  E-mail: <input type="text" name="email">

  網址: <input type="text" name="website">

  備注: <textarea name="comment" rows="5" cols="40"></textarea>

  單選按鈕

  "性別"字段是單選按鈕,HTML代碼如下所示:

  性別:

  <input type="radio" name="gender" value="female">女

  <input type="radio" name="gender" value="male">男

  表單元素

  HTML 表單代碼如下所示:

  <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

  該表單使用 method="post" 方法來提交數據。

什么是 $_SERVER["PHP_SELF"] 變量?

  $_SERVER["PHP_SELF"]是超級全局變量,返回當前正在執行腳本的文件名,與 document root相關。

  所以, $_SERVER["PHP_SELF"] 會發送表單數據到當前頁面,而不是跳轉到不同的頁面。

什么是 htmlspecialchars()方法?

  htmlspecialchars() 函數把一些預定義的字符轉換為 HTML 實體。

  預定義的字符是:

  & (和號) 成為 &

  " (雙引號) 成為 "

  ' (單引號) 成為 '

  < (小于) 成為 <

  > (大于) 成為 >

  PHP表單中需引起注重的地方?

  $_SERVER["PHP_SELF"] 變量有可能會被黑客使用!

  當黑客使用跨網站腳本的HTTP鏈接來攻擊時,$_SERVER["PHP_SELF"]服務器變量也會被植入腳本。原因就是跨網站腳本是附在執行文件的路徑后面的,因此$_SERVER["PHP_SELF"]的字符串就會包含HTTP鏈接后面的JavaScript程序代碼。

XSS又叫 CSS (Cross-Site Script) ,跨站腳本攻擊。惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意用戶的特殊目的。

  指定以下表單文件名為 "test_form.php":

  <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

  現在,我們使用URL來指定提交地址 "test_form.php",以上代碼修改為如下所示:

  <form method="post" action="test_form.php">

  這樣做就很好了。

  但是,考慮到用戶會在瀏覽器地址欄中輸入以下地址:

  http://www.runoob.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

  以上的 URL 中,將被解析為如下代碼并執行:

  <form method="post" action="test_form.php/"><script>alert('hacked')</script>

  代碼中添加了 script 標簽,并添加了alert命令。 當頁面載入時會執行該Javascript代碼(用戶會看到彈出框)。 這僅僅只是一個簡單的實例來說明PHP_SELF變量會被黑客利用。

  請注意, 任何JavaScript代碼可以添加在<script>標簽中! 黑客可以利用這點重定向頁面到另外一臺服務器的頁面上,頁面 代碼文件中可以保護惡意代碼,代碼可以修改全局變量或者獲取用戶的表單數據。

  如何避免 $_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() 函數處理。

  當我們使用 htmlspecialchars() 函數時,在用戶嘗試提交以下文本域:

  <script>location.href('http://www.oalvodamoda.com')</script>

  該代碼將不會被執行,因為它會被保存為HTML轉義代碼,如下所示:

  <script>location.href('http://www.oalvodamoda.com')</script>

  以上代碼是安全的,可以正常在頁面顯示或者插入郵件中。

  當用戶提交表單時,我們將做以下兩件事情,:

  使用 PHP trim() 函數去除用戶輸入數據中不必要的字符 (如:空格,tab,換行)。

  使用PHP stripslashes()函數去除用戶輸入數據中的反斜杠 (\)

  接下來讓我們將這些過濾的函數寫在一個我們自己定義的函數中,這樣可以大大提高代碼的復用性。

  將函數命名為 test_input()。

  現在,我們可以通過test_input()函數來檢測 $_POST 中的所有變量, 腳本代碼如下所示:

  實例

  <?php

  // 定義變量并默認設置為空值

  $name = $email = $gender = $comment = $website = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST")

  {

  $name = test_input($_POST["name"]);

  $email = test_input($_POST["email"]);

  $website = test_input($_POST["website"]);

  $comment = test_input($_POST["comment"]);

  $gender = test_input($_POST["gender"]);

  }

  function test_input($data)

  {

  $data = trim($data);

  $data = stripslashes($data);

  $data = htmlspecialchars($data);

  return $data;

  }

  ?>

  運行實例 :

PHP 表單驗證實例

名字:  

E-mail:  

網址:  

備注:  

性別: 女 男 

您輸入的內容是:

  注意我們在執行以上腳本時,會通過$_SERVER["REQUEST_METHOD"]來檢測表單是否被提交 。如果 REQUEST_METHOD 是 POST, 表單將被提交 - 數據將被驗證。如果表單未提交將跳過驗證并顯示空白。

  在以上實例中使用輸入項都是可選的,即使用戶不輸入任何數據也可以正常顯示。

  在接下來的章節中我們將介紹如何對用戶輸入的數據進行驗證。

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
------分隔線----------------------------
PHP 教程
1、PHP 基礎
1.1 PHP 簡介
1.2 PHP 安裝
1.3 PHP 語法
1.4 PHP 變量
1.5 PHP echo/print
1.6 PHP 數據類型
1.7 PHP 常量
1.8 PHP 字符串
1.9 PHP 運算符
1.10 PHP If...Else
1.11 PHP Switch
1.12 PHP 數組
1.13 PHP 數組排序
1.14 PHP 超級全局變量
1.15 PHP While 循環
1.16 PHP For 循環
1.17 PHP 函數
1.18 PHP 魔術變量
1.19 PHP 命名空間
1.20 PHP 面向對象
2、PHP 表單
2.1 PHP 表單
2.2 PHP 表單驗證
2.3 PHP 表單 - 必需字段
2.4 PHP 表單 - 驗證郵件和URL
2.5 PHP 完整表單實例
2.6 PHP $_GET 變量
2.7 PHP $_POST 變量
3、PHP 高級教程
3.1 PHP 多維數組
3.2 PHP 日期
3.3 PHP 包含
3.4 PHP 文件
3.5 PHP 文件上傳
3.6 PHP Cookie
3.7 PHP Session
3.8 PHP E-mail
3.9 PHP 安全 E-mail
3.10 PHP Error
3.11 PHP 過濾器
3.12 PHP 高級過濾器
3.13 PHP JSON
4、PHP 7 新特性
4.1 PHP 7 新特性
5、PHP 數據庫
5.1 PHP MySQL 簡介
5.2 PHP MySQL 連接
5.3 PHP MySQL 創建數據庫
5.4 PHP MySQL 創建數據表
5.5 PHP MySQL 插入數據
5.6 PHP MySQL 插入多條數據
5.7 PHP MySQL 預處理語句
5.8 PHP MySQL 讀取數據
5.9 PHP MySQL Where
5.10 PHP MySQL Order By
5.11 PHP MySQL Update
5.12 PHP MySQL Delete
5.13 PHP ODBC
6、PHP XML
6.1 XML Expat Parser
6.2 XML DOM
6.3 XML SimpleXML
7、PHP 與 AJAX
7.1 AJAX 簡介
7.2 AJAX 與PHP
7.3 AJAX 數據庫
7.4 AJAX XML
7.5 AJAX 實時搜索
7.6 AJAX RSS Reader
7.7 AJAX 投票
五月情天