PHP 学习笔记二表单表单处理表单验证表单实例分析.docx
- 文档编号:16447545
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:13
- 大小:85.09KB
PHP 学习笔记二表单表单处理表单验证表单实例分析.docx
《PHP 学习笔记二表单表单处理表单验证表单实例分析.docx》由会员分享,可在线阅读,更多相关《PHP 学习笔记二表单表单处理表单验证表单实例分析.docx(13页珍藏版)》请在冰点文库上搜索。
PHP学习笔记二表单表单处理表单验证表单实例分析
PHP学习笔记
(二):
表单:
表单处理,表单验证,表单实例
PHP表单
PHP超全局变量$_GET和$_POST用于收集表单数据(form-data)。
1
GETvs.POST
GET和POST都创建数组(例如,array(key=>value,key2=>value2,key3=>value3,…))。
此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。
GET和POST被视作GET和_POST。
它们是超全局变量,这意味着对它们的访问无需考虑作用域-无需任何特殊代码,您能够从任何函数、类或文件访问它们。
$_GET是通过URL参数传递到当前脚本的变量数组。
$_POST是通过HTTPPOST传递到当前脚本的变量数组。
何时使用GET?
通过GET方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在URL中)。
GET对所发送信息的数量也有限制。
限制在大于2000个字符。
不过,由于变量显示在URL中,把页面添加到书签中也更为方便。
GET可用于发送非敏感的数据。
何时使用POST?
通过POST方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入HTTP请求的主体中),并且对所发送信息的数量也无限制。
此外POST支持高阶功能,比如在向服务器上传文件时进行multi-part二进制输入。
不过,由于变量未显示在URL中,也就无法将页面添加到书签。
PHP表单验证
PHP表单验证实例
文本字段
ame、email和website属于文本输入元素,comment字段是文本框。
HTML代码是这样的:
Name:
E-mail:
Website:
Comment:
单选按钮
gender字段是单选按钮,HTML代码是这样的:
Gender:
表单元素
表单的HTML代码是这样的:
phpechohtmlspecialchars($_SERVER["PHP_SELF"]);? >"> 当提交此表单时,通过method=”post”发送表单数据。 什么是$_SERVER[“PHP_SELF”]变量? $_SERVER["PHP_SELF"]是一种超全局变量,它返回当前执行脚本的文件名。 因此,$_SERVER["PHP_SELF"]将表单数据发送到页面本身,而不是跳转到另一张页面。 这样,用户就能够在表单页面获得错误提示信息。 什么是htmlspecialchars()函数? htmlspecialchars()函数把特殊字符转换为HTML实体。 这意味着<和>之类的HTML字符会被替换为<和>。 这样可防止攻击者通过在表单中注入HTML或JavaScript代码(跨站点脚本攻击)对代码进行利用。 关于PHP表单安全性的重要提示 $_SERVER[“PHP_SELF”]变量能够被黑客利用! 如果您的页面使用了PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。 提示: 跨站点脚本(Cross-sitescripting,XSS)是一种计算机安全漏洞类型,常见于Web应用程序。 XSS能够使攻击者向其他用户浏览的网页中输入客户端脚本。 假设我们的一张名为“test_form.php”的页面中有如下表单: phpecho$_SERVER["PHP_SELF"];? >"> 1 现在,如果用户进入的是地址栏中正常的URL: “ 1 到目前,一切正常。 不过,如果用户在地址栏中键入了如下URL: 1 在这种情况下,上面的代码会转换为: 1 这段代码加入了一段脚本和一个提示命令。 并且当此页面加载后,就会执行JavaScript代码(用户会看到一个提示框)。 这仅仅是一个关于PHP_SELF变量如何被利用的简单无害案例。 您应该意识到"> 1 无法利用,没有危害! 通过PHP验证表单数据 我们要做的第一件事是通过PHP的htmlspecialchars()函数传递所有变量。 在我们使用htmlspecialchars()函数后,如果用户试图在文本字段中提交以下内容: 1 代码不会执行,因为会被保存为转义代码,就像这样: <script>location.href('')</script> 1 现在这条代码显示在页面上或e-mail中是安全的。 在用户提交该表单时,我们还要做两件事: (通过PHPtrim()函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行) (通过PHPstripslashes()函数)删除用户输入数据中的反斜杠(\) 接下来我们创建一个检查函数(相比一遍遍地写代码,这样效率更好)。 我们把函数命名为test_input()。 现在,我们能够通过test_input()函数检查每个$_POST变量,脚本是这样的: 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"]); } functiontest_input($data){ $data=trim($data); $data=stripslashes($data); $data=htmlspecialchars($data); return$data; } ? > 请注意在脚本开头,我们检查表单是否使用$_SERVER[“REQUEST_METHOD”]进行提交。 如果REQUEST_METHOD是POST,那么表单已被提交-并且应该对其进行验证。 如果未提交,则跳过验证并显示一个空白表单。 PHP表单验证-必填字段 本节展示如何制作必填输入字段,并创建需要时所用的错误消息。 PHP-输入字段 从上一节中的验证规则中,我们看到“Name”,“E-mail”以及“Gender”字段是必需的。 这些字段不能为空且必须在HTML表单中填写。 在上一节中,所有输入字段都是可选的。 在下面的代码中我们增加了一些新变量: $nameErr、$emailErr、$genderErr以及$websiteErr。 这些错误变量会保存被请求字段的错误消息。 我们还为每个$_POST变量添加了一个ifelse语句。 这条语句检查$_POST变量是否为空(通过PHPempty()函数)。 如果为空,则错误消息会存储于不同的错误变量中。 如果不为空,则通过test_input()函数发送用户输入数据: php //定义变量并设置为空值 $nameErr=$emailErr=$genderErr=$websiteErr=""; $name=$email=$gender=$comment=$website=""; if($_SERVER["REQUEST_METHOD"]=="POST"){ if(empty($_POST["name"])){ $nameErr="Nameisuired"; }else{ $name=test_input($_POST["name"]); } if(empty($_POST["email"])){ $emailErr="Emailisrequired"; }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="Genderisrequired"; }else{ $gender=test_input($_POST["gender"]); } } ? > PHP-显示错误消息 在HTML表单中,我们在每个被请求字段后面增加了一点脚本。 如果需要,会生成恰当的错误消息(如果用户未填写必填字段就试图提交表单): phpechohtmlspecialchars($_SERVER["PHP_SELF"]);? >"> Name: phpecho$nameErr;? > E-mail: phpecho$emailErr;? > Website: phpecho$websiteErr;? > Gender: phpecho$genderErr;? > 接下来是验证输入数据,即“Name字段是否只包含字母和空格? ”,以及“E-mail字段是否包含有效的电子邮件地址语法? ”,并且如果填写了Website字段,“这个字段是否包含了有效的URL? ”。 PHP表单验证-验证E-mail和URL 本节展示如何验证名字、电邮和URL。 PHP-验证名字 以下代码展示的简单方法检查name字段是否包含字母和空格。 如果name字段无效,则存储一条错误消息: $name=test_input($_POST["name"]); if(! preg_match("/^[a-zA-Z]*$/",$name)){ $nameErr="只允许字母和空格! "; } 注释: preg_match()函数检索字符串的模式,如果模式存在则返回true,否则返回false。 (正则表达式) PHP-验证E-mail 以下代码展示的简单方法检查e-mail地址语法是否有效。 如果无效则存储一条错误消息: $email=test_input($_POST["email"]); if(! preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){ $emailErr="无效的email格式! "; } PHP-验证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"; } PHP-验证Name、E-mail、以及URL 现在,脚本是这样的: php //定义变量并设置为空值 $nameErr=$emailErr=$genderErr=$websiteErr=""; $name=$email=$gender=$comment=$website=""; if($_SERVER["REQUEST_METHOD"]=="POST"){ if(empty($_POST["name"])){ $nameErr="Nameisrequired"; }else{ $name=test_input($_POST["name"]); //检查名字是否包含字母和空格 if(! preg_match("/^[a-zA-Z]*$/",$name)){ $nameErr="Onlylettersandwhitespaceallowed"; } } if(empty($_POST["email"])){ $emailErr="Emailisrequired"; }else{ $email=test_input($_POST["email"]); //检查电邮地址语法是否有效 if(! preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){ $emailErr="Invalidemailformat"; } } 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="InvalidURL"; } } if(empty($_POST["comment"])){ $comment=""; }else{ $comment=test_input($_POST["comment"]); } if(empty($_POST["gender"])){ $genderErr="Genderisrequired"; }else{ $gender=test_input($_POST["gender"]); } } ? > 接下来向您讲解如何防止表单在用户提交表单后保留输入字段中的值。 PHP-保留表单中的值 如需在用户点击提交按钮后在输入字段中显示值,我们在以下输入字段的value属性中增加了一小段PHP脚本: name、email以及website。 在comment文本框字段中,我们把脚本放到了之间。 这些脚本输出$name、$email、$website和$comment变量的值。 然后,我们还需要显示选中了哪个单选按钮。 对此,我们必须操作checked属性(而非单选按钮的value属性): Name: phpecho$name;? >"> E-mail: phpecho$email;? >"> Website: phpecho$website;? >"> Comment: phpecho$comment;? > Gender: phpif(isset($gender)&&$gender=="female")echo"checked";? > value="female">Female phpif(isset($gender)&&$gender=="male")echo"checked";? > value="male">Male
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 学习笔记二表单表单处理表单验证表单实例分析 学习 笔记 表单 处理 验证 实例 分析