加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

实例讲授PHP表单

发布时间:2020-06-16 21:13:26 所属栏目:编程 来源:站长网
导读:1 GET 和 POST 都建设数组(譬喻,array( key = value, key2 = value2, key3 = value3, ...))。此数组包括键/值对,个中的键是表单控件的名称,而值是来自用户的输入数据。 2 GET 和 POST 被视作 $_GET 和 $_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:

%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>* 必须的字段</span></p> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 姓名:<input type="text"> <span>* <?php echo $nameErr;?></span> <br><br> 电邮:<input type="text"> <span>* <?php echo $emailErr;?></span> <br><br> 网址:<input type="text"> <span><?php echo $websiteErr;?></span> <br><br> 评述:<textarea rows="5" cols="40">

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读