溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP表單輸入與驗(yàn)證的方法是什么

發(fā)布時(shí)間:2021-10-29 11:06:59 來源:億速云 閱讀:131 作者:iii 欄目:編程語言

這篇文章主要介紹“PHP表單輸入與驗(yàn)證的方法是什么”,在日常操作中,相信很多人在PHP表單輸入與驗(yàn)證的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP表單輸入與驗(yàn)證的方法是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

PHP表單輸入與驗(yàn)證的方法是什么

在之前的文章中我們已經(jīng)了解了PHP的基礎(chǔ),其中就有$_GET $_POST 變量,它們用來檢索表單中的信息,其中需要我們注意的知識(shí)點(diǎn)就是PHP表單用戶輸入和表單驗(yàn)證。那接下來我們就來看一下PHP中表單輸入與表單驗(yàn)證的相關(guān)知識(shí)吧。

PHP表單和用戶輸入

想要去了解PHP表單和用戶輸入,首先我們要明白什么是表單。Web表單準(zhǔn)確來說算是一個(gè)互動(dòng)平臺(tái),主要的功能就是讓瀏覽者和網(wǎng)站有一個(gè)互動(dòng)的平臺(tái)。表單主要就是在網(wǎng)頁中用來發(fā)送數(shù)據(jù)到服務(wù)器。

例如,注冊(cè)信息時(shí)使用到的表單,當(dāng)你填寫完信息時(shí)需要提交,這時(shí)候提交就是將你注冊(cè)時(shí)表單上的內(nèi)容從客戶端瀏覽器傳送到服務(wù)器端,再經(jīng)過PHP程序進(jìn)行處理后,再將用戶所需要的信息傳遞回到客戶端瀏覽器上,通過獲取用戶的信息,使得PHP與Web表單實(shí)現(xiàn)交互。就是提供了這么一個(gè)互動(dòng)的平臺(tái)。

接下來我們通過示例來看一下表單,示例如下:

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>億速云</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的知識(shí),更多的相關(guān)知識(shí),大家可以點(diǎn)擊《HTML教程》進(jìn)行學(xué)習(xí),上述示例的運(yùn)行結(jié)果:

PHP表單輸入與驗(yàn)證的方法是什么

這便是我們所說的表單,那么我們?cè)谄渲刑顚懙男畔⒁簿褪潜韱涡畔?huì)發(fā)送到哪里呢?當(dāng)我們點(diǎn)擊提交的時(shí)候,表單中的數(shù)據(jù)就會(huì)以POST的形式,發(fā)送到form.php這個(gè)頁面。

<?php
 header("Content-type:text/html;charset=utf-8");    //設(shè)置編碼
 echo "歡迎你:".$_POST["fname"] ."<br/>";
 echo "你的年齡是:".$_POST['age'];
 ?>

我們發(fā)送到from.php的運(yùn)行結(jié)果如下:

PHP表單輸入與驗(yàn)證的方法是什么

當(dāng)用戶輸入完成后,這時(shí)候就需要對(duì)表單進(jìn)行驗(yàn)證了,應(yīng)該在任何可能的時(shí)候通過客戶端腳本對(duì)用戶輸入進(jìn)行驗(yàn)證。瀏覽器驗(yàn)證速度更快,并且可以減輕服務(wù)器的負(fù)載。

如果用戶輸入需要插入數(shù)據(jù)庫,您應(yīng)該考慮使用服務(wù)器驗(yàn)證。在服務(wù)器驗(yàn)證表單的一種好的方式是,把表單傳給它自己,而不是跳轉(zhuǎn)到不同的頁面。這樣用戶就可以在同一張表單頁面得到錯(cuò)誤信息。用戶也就更容易發(fā)現(xiàn)錯(cuò)誤了。那么接下來我們一起來看一下表單驗(yàn)證的相關(guān)知識(shí)吧。

PHP表單驗(yàn)證

在處理PHP表單時(shí)我們需要考慮安全性。我們將展示PHP表單數(shù)據(jù)安全處理,為了防止黑客及垃圾信息我們需要對(duì)表單進(jìn)行數(shù)據(jù)安全驗(yàn)證。接下來我們通過實(shí)例來看一下表單中的必須與可選文本字段,單選按鈕,及提交按鈕。

示例如下:

<!DOCTYPE HTML>
 <html>
 <head>
     <meta charset="utf-8">
     <title>PHP.cn</title>
 </head>
 <body>
 <h3>PHP 表單驗(yàn)證實(shí)例</h3>
 <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>
     網(wǎng)址: <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>

輸出結(jié)果:

PHP表單輸入與驗(yàn)證的方法是什么

其中我們需要注意的是不同的字段有不同的驗(yàn)證規(guī)則,上述示例中不同字段的驗(yàn)證規(guī)則如下:

名字的驗(yàn)證規(guī)則是必須的,并且只能包含字母和空格。E-mail的驗(yàn)證規(guī)則是必須的,其中必須是一個(gè)有效的電子郵件地址(包含'@'和'.')。網(wǎng)址的驗(yàn)證規(guī)則的是可選的,并且如果存在,它必須包含一個(gè)有效的URL。備注的驗(yàn)證規(guī)則是可選的,多行輸入字段。性別的驗(yàn)證規(guī)則是必須的,必須選擇一個(gè)。

通過上述示例我們?cè)賮砜匆幌缕渲杏玫降闹R(shí):

$_SERVER["PHP_SELF"] 變量

$_SERVER["PHP_SELF"]是一種超全局變量,它返回當(dāng)前執(zhí)行腳本的文件名。因此,$_SERVER["PHP_SELF"] 將表單數(shù)據(jù)發(fā)送到頁面本身,而不是跳轉(zhuǎn)到另一張頁面。這樣,用戶就能夠在表單頁面獲得錯(cuò)誤提示信息。

htmlspecialchars() 函數(shù)

htmlspecialchars() 函數(shù)把特殊字符轉(zhuǎn)換為 HTML 實(shí)體。這意味著 < 和 > 之類的 HTML 字符會(huì)被替換為 &lt; 和 &gt; 。這樣可防止攻擊者通過在表單中注入 HTML 或 JavaScript 代碼(跨站點(diǎn)腳本攻擊)對(duì)代碼進(jìn)行利用。

其中我們需要注意的是:

$_SERVER["PHP_SELF"] 變量能夠被黑客利用,如何避免 $_SERVER["PHP_SELF"] 被利用?

$_SERVER["PHP_SELF"] 可以通過 htmlspecialchars() 函數(shù)來避免被利用。

form 代碼如下所示:

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

htmlspecialchars() 把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體。現(xiàn)在如果用戶想利用 PHP_SELF 變量, 結(jié)果將輸出如下所示:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

嘗試該漏洞失?。?/p>

通過PHP驗(yàn)證表單數(shù)據(jù)

我們要做的第一件事是通過 PHP 的 htmlspecialchars() 函數(shù)傳遞所有變量。在用戶提交該表單時(shí),我們還要做兩件事:

首先通過 PHP trim() 函數(shù)去除用戶輸入數(shù)據(jù)中不必要的字符,比如多余的空格、制表符、換行等,然后通過 PHP stripslashes() 函數(shù)刪除用戶輸入數(shù)據(jù)中的反斜杠(\)。接下來我們創(chuàng)建一個(gè)檢查函數(shù),我們把函數(shù)命名為 test_input()。最后我們能夠通過 test_input() 函數(shù)檢查每個(gè) $_POST 變量。

我們將驗(yàn)證程序可以放到上述示例中去,示例如下:

<!DOCTYPE HTML>
 <html>
 <head>
     <meta charset="utf-8">
     <title>億速云(php.cn)</title>
 </head>
 <body>
 
 <?php
 // 定義變量并默認(rèn)設(shè)置為空值
 $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;
 }
 ?>
 
 <h3>PHP 表單驗(yàn)證實(shí)例</h3>
 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
     名字: <input type="text" name="name">
     <br><br>
     E-mail: <input type="text" name="email">
     <br><br>
     網(wǎng)址: <input type="text" name="website">
     <br><br>
     備注: <textarea name="comment" rows="5" cols="40"></textarea>
     <br><br>
     性別:
     <input type="radio" name="gender" value="female">女
     <input type="radio" name="gender" value="male">男
     <br><br>
     <input type="submit" name="submit" value="提交">
 </form>
 
 <?php
 echo "<h3>您輸入的內(nèi)容是:</h3>";
 echo $name;
 echo "<br>";
 echo $email;
 echo "<br>";
 echo $website;
 echo "<br>";
 echo $comment;
 echo "<br>";
 echo $gender;
 ?>
 
 </body>

輸出結(jié)果:

PHP表單輸入與驗(yàn)證的方法是什么

其中我們需要注意的是:

我們?cè)趫?zhí)行以上腳本時(shí),會(huì)通過$_SERVER["REQUEST_METHOD"]來檢測(cè)表單是否被提交 。如果 REQUEST_METHOD 是 POST, 表單將被提交 - 數(shù)據(jù)將被驗(yàn)證。如果表單未提交將跳過驗(yàn)證并顯示空白。在以上實(shí)例中使用輸入項(xiàng)都是可選的,即使用戶不輸入任何數(shù)據(jù)也可以正常顯示。

到此,關(guān)于“PHP表單輸入與驗(yàn)證的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI