实例讲解PHP表单
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-14 11:52:38 浏览: 评论:0
这篇文章主要介绍了PHP表单相关知识,文中讲解非常细致,代码帮助大家更好的参考和学习,感兴趣的朋友可以了解下。
表单处理
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 字符会被替换为 < 和 > ,页面效果仍是< >。这样可防止攻击者通过在表单中注入 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 (emptyempty($_POST["name"])) {
- $nameErr = "姓名是必填的";
- } else {
- $name = test_input($_POST["name"]);
- // 检查姓名是否包含字母和空白字符
- if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
- $nameErr = "只允许字母和空格";
- }
- }
- if (emptyempty($_POST["email"])) {
- $emailErr = "电邮是必填的";
- } else {
- $email = test_input($_POST["email"]);
- // 检查电子邮件地址语法是否有效
- if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
- $emailErr = "无效的 email 格式";
- }
- }
- if (emptyempty($_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 (emptyempty($_POST["comment"])) {
- $comment = "";
- } else {
- $comment = test_input($_POST["comment"]);
- }
- if (emptyempty($_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">
Tags: PHP表单
- 上一篇:实例化php类时传参的方法分析
- 下一篇:最后一页
相关文章
- ·php中form表单同时使用POST和GET传递参数说明(2014-07-04)
- ·php 表单提交长文章数据丢失问题解决方法(2015-04-04)
- ·防止php表单提交刷新自动重复提交(2015-04-13)
- ·php 防止表单重复提交几种方法(2016-01-28)
- ·php编程每天必学之表单验证(2019-11-29)
- ·PHP判断表单复选框选中状态完整例子(2021-03-02)
- ·php基于表单密码验证与HTTP验证用法实例(2021-05-05)
- ·php表单提交与$_POST实例分析(2021-05-09)
- ·php提交表单发送邮件的方法(2021-05-17)
- ·解决php表单重复提交实现方法(2021-06-19)
- ·PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号(2021-06-19)
- ·表单提交错误后返回内容消失问题的解决方法(PHP网站)(2021-06-20)
- ·php实现表单多按钮提交action的处理方法(2021-06-21)
- ·php表单提交实例讲解(2021-06-26)
- ·PHP简单处理表单输入的特殊字符的方法(2021-07-08)
- ·php编程每天必学之表单验证(2021-07-12)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)