首页后端开发PHPPHP表单处理、验证怎么实现,方法是什么

PHP表单处理、验证怎么实现,方法是什么

时间2024-03-22 19:14:03发布访客分类PHP浏览670
导读:相信很多人对“PHP表单处理、验证怎么实现,方法是什么”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 目录 表单处理 表单验证 必填字段 验证 E-mail 和 URL 完成表单实例...
相信很多人对“PHP表单处理、验证怎么实现,方法是什么”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助



目录
  • 表单处理
  • 表单验证
  • 必填字段 验证 E-mail 和 URL
  • 完成表单实例

表单处理

GET vs. POST

1 GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

2 GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。

3 传递方式

$_GET 是通过 URL 参数传递到当前脚本的变量数组。
$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

(1)何时使用 GET?

通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。

GET 可用于发送非敏感的数据。

注释:绝不能使用 GET 来发送密码或其他敏感信息!

(2)何时使用 POST?

通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量无限制。

此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

提示:开发者偏爱 POST 来发送表单数据。

表单验证

htmlspecialchars() 函数

如果要将表单提交给页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

表单的 HTML 代码是这样的:

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

(1)什么是 $_SERVER["PHP_SELF"] 变量?

$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。
因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

(2)什么是 htmlspecialchars() 函数?

htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 和 > 之类的 HTML 字符会被替换为 & lt; 和 & gt; ,页面效果仍是 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
如果没有 htmlspecialchars() 函数

hacker输入url:

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

表单处则会转换为:

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

典型反射xss

表单检查函数:

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

}
    
?>
    

必填字段 验证 E-mail 和 URL

1.验证名字

以下代码展示的简单方法检查 name 字段是否包含字母和空格。如果 name 字段无效,则存储一条错误消息:

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

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

2.验证 E-mail

以下代码展示的简单方法检查 e-mail 地址语法是否有效。如果无效则存储一条错误消息:

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

if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
    
 $emailErr = "无效的 email 格式!";
 
}
    

3.验证 URL

以下代码展示的方法检查 URL 地址语法是否有效(这条正则表达式同时允许 URL 中的斜杠)。如果 URL 地址语法无效,则存储一条错误消息:

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

完成表单实例

!DOCTYPE HTML>
     
html>
    
head>
    
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 = "无效的 email 格式";
 
 }

 }

 
 if (empty($_POST["website"])) {
    
 $website = "";

 }
 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";
 
 }

 }


 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">
    
 span class="error">
    * ?php echo $nameErr;
    ?>
    /span>
    
 br>
    br>
    
 电邮: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">
    

关于“PHP表单处理、验证怎么实现,方法是什么”的内容就介绍到这,感谢各位的阅读,相信大家对PHP表单处理、验证怎么实现,方法是什么已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP表单处理、验证怎么实现,方法是什么
本文地址: https://pptw.com/jishu/650822.html
Python列表功能有哪些,Python代码是什么 laravel中怎么实现及使用分类树

游客 回复需填写必要信息