如何構建PHP表單頁面及驗證相關原理(PHP基礎)

文章目錄

  • PHP表單 - 必需字段
    • PHP - 必需字段
    • PHP - 顯示錯誤信息
    • 總結
    • PHP表單 - 驗證郵件和URL
      • PHP - 驗證名稱
      • PHP - 驗證郵件
      • 驗證URL
    • PHP 完整表單實例

PHP表單 - 必需字段

該章內容將介紹如何設置表單必需字段及錯誤信息

PHP - 必需字段

我們首先給出一個表的驗證規則,比如有一個信息錄入頁面,要求填入個人的信息及要求如下表所示:

字段驗證規則
名字必需。 +只能包含字母和空格
E-mail必需。 + 必需包含一個有效的電子郵件地址(包含”@“和”.“)
網址可選。 如果存在,它必需包含一個有效的URL
備注可選。 多行字段(文本域)。
性別必需。 必需選擇一個

在以下代碼中我們加入了一些新的變量: $nameErr, $emailErr, $genderErr, 和 websiteErr.。這些錯誤變量將顯示在必需字段上。我們還為每個websiteErr.。這些錯誤變量將顯示在必需字段上。 我們還為每個websiteErr._POST變量增加了一個if else語句。 這些語句將檢查 $_POST 變量是 否為空(使用php的 empty() 函數)。如果為空,將設置對應的錯誤信息并且在頁面進行顯示對應的錯誤信息。 如果不為空,數據將傳遞給test_input() 函數:

<?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 (empty($_POST["email"])) {$emailErr = "郵箱是必需的。";} else {$email = test_input($_POST["email"]);}if (empty($_POST["website"])) {$website = "";} else {$website = test_input($_POST["website"]);}if (empty($_POST["comment"])) {$comment = "";} else {$comment = test_input($_POST["comment"]);}if (empty($_POST["gender"])) {$genderErr = "性別是必需的。";} else {$gender = test_input($_POST["gender"]);}
}
?>

PHP - 顯示錯誤信息

在以下的HTML實例表單中,為每個字段中添加了一些腳本,每個腳本匯總信息輸入錯誤時顯示錯誤信息。(如果用戶未填寫信息就提交表單則會輸出錯誤信息);

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 名字: <input type="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>網址: <input type="text" name="website"><span class="error"><?php echo $websiteErr;?></span><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"><span class="error">* <?php echo $genderErr;?></span><br><br><input type="submit" name="submit" value="Submit"> 
</form>

重點在于

<?php echo $nameErr; ?>

總結

思路為 通過if – else + empty()函數 語句實現是否為空的驗證以及錯誤信息的設置,最終在HTML頁面對錯誤信息進行輸出

PHP表單 - 驗證郵件和URL

本節內容我們介紹如何驗證names(名稱)
e-mails(郵件),和URLS

PHP - 驗證名稱

以下代碼將通過簡單的方式來檢測name字段是否包含字母和空格,如果name字段值不合法,將輸出錯誤信息

$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",name)) {$nameErr = "只允許字母和空格";
}

語法解釋
preg_match —— 進行正則表達式匹配
語法:
preg( $ pattern,$ str,$ matches )
第一個參數 :用于寫正則規則(可以在網上搜)用 ”/“ 包起來
第二個參數:要去檢查的字符串
第三個參數:用來接收找到的結果的數字變量
返回值:1為匹配成功 , 0為沒找到,false為出錯比如規則寫錯

PHP - 驗證郵件

$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {$emailErr = "非法郵箱格式"; 
}

驗證URL

$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {$websiteErr = "非法的 URL 的地址"; 
}

PHP 完整表單實例

本節將介紹如何讓用戶在點擊”提交“按鈕提交數據前保證所有字段正確輸入


<?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;
?>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

API如何集成Web搜索功能:原理、實踐與最佳選型

API如何集成Web搜索功能&#xff1a;原理、實踐與最佳選型 在現代智能應用開發中&#xff0c;模型生成結果往往需要融合最新的互聯網信息。通過集成Web搜索工具&#xff0c;模型可以在生成響應前主動檢索網絡&#xff0c;獲取實時數據。這一能力極大提升了智能系統的準確性和時…

Spring Boot項目中調用第三方接口

目錄 步驟1: 添加依賴 步驟2: 配置HTTP客戶端 配置RestTemplate 配置WebClient 步驟3: 在Service層調用接口 使用RestTemplate示例 使用WebClient示例 步驟4: 在Controller層調用Service 注意事項 總結 Spring Boot項目中調用第三方接口 在Spring Boot項目中調用第三…

關系型數據庫:原理、演進與生態全景——從理論基石到云原生的深度巡禮

目錄 一、引言&#xff1a;當“表”成為世界的通用語言 二、理論基石&#xff1a;關系模型與 ACID 三、引擎架構&#xff1a;一條 SQL 的奇幻漂流 四、存儲機制&#xff1a;頁、緩沖池與 WAL 五、并發控制&#xff1a;鎖、MVCC 與隔離級別 六、SQL&#xff1a;聲明式語言…

【軟考架構】計算機網絡中的IP地址表示和子網劃分

在計算機網絡中&#xff0c;IP地址用于唯一標識網絡中的設備。IP地址的表示方式有兩種&#xff1a;IPv4和IPv6。IPv4是當前使用最廣泛的地址格式&#xff0c;而IPv6是為了解決IPv4地址耗盡問題而設計的。 1. IPv4地址 IPv4地址是一個32位的數字&#xff0c;通常用四個十進制數表…

【后端】Spring @Resource和@Autowired的用法和區別

以下是關于 Resource 和 Autowired 兩個依賴注入注解的詳細對比說明&#xff0c;重點關注它們的區別和使用場景&#xff1a;&#x1f4cc; 核心區別總結特性Autowired (Spring)Resource (JSR-250 標準)來源Spring 框架原生注解Java 標準 (javax.annotation)默認注入方式按類型 …

php+apache+nginx 更換域名

phpapachenginx 更換域名? 第 1 步&#xff1a;確認到底是誰在監聽 80/443? 第 2 步&#xff1a;按監聽者修改配置&#x1f539; 場景 A&#xff1a;Apache 直接監聽 80/443&#x1f539; 場景 B&#xff1a;Nginx 監聽 80/443&#xff0c;反向代理到 Apache? 第 3 步&#…

AI 視頻衛士:AI 無人機巡檢,適配多元河道場景的治理利器

河道治理&#xff0c;場景各異&#xff0c;難題不同。城市內河的生活垃圾、景區河道的景觀破壞、工業園區河道的工業廢料&#xff0c;每一種場景都對巡檢工作有著獨特的要求。AI 視頻衛士&#xff0c;憑借強大的 AI 技術&#xff0c;針對不同河道應用場景&#xff0c;打造專屬巡…

累加和校驗原理與FPGA實現

累加和校驗原理與FPGA實現寫在前面一、基礎原理二、舉個例子2.1 進位累加2.2 回卷累加三、FPGA實現3.1 發送端&#xff08;產生校驗和&#xff09;3.2 接收端&#xff08;累加和校驗&#xff09;3.3 仿真結果寫在后面寫在前面 在上文《奇偶校驗原理與FPGA實現》中&#xff0c;講…

深入解析Go設計模式:命令模式實戰

什么是命令模式? 命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝為獨立對象,從而允許客戶端通過不同的請求對象進行參數化配置。該模式支持請求的排隊執行、操作記錄以及撤銷等功能。 命令模式UML類圖如下所示: 命令模式包含五個核心角色,具體說明如下: …

Pytest項目_day11(fixture、conftest)

Fixture fixture是一種類似于setup、teardown&#xff0c;用于測試前后進行預備、清理工作的代碼處理機制 相比于setup、teardown來說&#xff0c;fixture命名更靈活&#xff0c;局限性更少使用conftest.py配置里面可以實現數據共享&#xff0c;不需要import就能自動找到一些配…

DAY 43 復習日

作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 劃分數據集 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader impo…

Flink運行時的實現細節

一、Flink集群中各角色運行架構先說Flink集群中的角色吧&#xff0c;有三個分別是客戶端(Client)、JobManager、TaskManager。客戶端負責接收作業任務并進行解析&#xff0c;將解析后的二進制數據發送給JobManager&#xff1b;JobManager是作業調度中心&#xff0c;負責對所有作…

思科、華為、華三如何切換三層端口?

三層交換機融合了二層交換技術與三層轉發技術&#xff0c;具備強大的網絡功能。主流廠商&#xff08;思科、H3C、華為&#xff09;的三層交換機均支持二層端口與三層端口的相互切換&#xff0c;但具體命令存在差異。本文將詳細介紹三大廠商設備的端口切換方法及相關知識。一、各…

springboot的基礎要點

Spring Boot 的核心設計理念是 ??"約定優于配置"??&#xff08;Convention Over Configuration&#xff09;&#xff0c;旨在簡化 Spring 應用的初始搭建和開發過程。以下是需要掌握的核心基礎要點&#xff1a;?一、核心機制??自動配置 (Auto-Configuration)?…

lesson36:MySQL從入門到精通:全面掌握數據庫操作與核心原理

目錄 一、引言&#xff1a;為什么選擇MySQL&#xff1f; 二、MySQL安裝與登錄配置 2.1 環境準備 2.2 登錄指令詳解 三、數據庫核心操作 3.1 數據庫生命周期管理 3.2 數據庫存儲引擎選擇 四、數據表設計與操作 4.1 表結構創建&#xff08;含數據類型詳解&#xff09; …

Spring源碼解析 - SpringApplication run流程-prepareContext源碼分析

prepareContext源碼分析 private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context,ConfigurableEnvironment environment, SpringApplicationRunListeners listeners,ApplicationArguments applicationArguments, Bann…

HIS系統:醫院信息化建設的核心,采用Angular+Java技術棧,集成MySQL、Redis等技術,實現醫院全業務流程管理。

HIS系統在醫院信息化建設中扮演著核心的角色。它是一個綜合性的信息系統&#xff0c;旨在管理和運營醫院的各種業務&#xff0c;包括門診、住院、財務、物資、科研等。技術細節&#xff1a;前端&#xff1a;AngularNginx后臺&#xff1a;JavaSpring&#xff0c;SpringBoot&…

深度學習-卷積神經網絡-LeNet

卷積神經網絡是一種專門用于處理具有網格結構數據&#xff08;如圖像、音頻等&#xff09;的深度學習模型。它通過卷積層自動提取數據中的特征&#xff0c;利用局部連接和參數共享的特性減少了模型的參數數量&#xff0c;降低了過擬合的風險&#xff0c;同時能夠有效地捕捉數據…

【Java項目與數據庫、Maven的關系詳解】

Java項目與數據庫、Maven的關系詳解 一、Java項目是否都需要連接本地數據庫&#xff1f; 不一定&#xff0c;這取決于項目類型和需求&#xff1a; 1. 需要數據庫的項目類型項目類型數據庫作用典型場景Web應用存儲用戶數據/業務數據電商系統、CMS服務端程序持久化數據金融交易系…

兩個Maven工程,使用idea開發,工程A中依賴了工程B,改了工程B,工程A如何獲取最新代碼

兩個Maven工程&#xff0c;使用idea開發&#xff0c;工程A中依賴了工程B&#xff0c;改了工程B&#xff0c;工程A如何獲取最新代碼 如果工程B的版本是快照&#xff0c;那么如下。 步驟一 工程B 執行 clean package install deploy 步驟二 工程A 刷新Maven