本任务主要内容在Task05中已经学习过,此处进一步加深并拓展。
1、关于表单中的action属性
在PHP中,表单的action属性若忽略,默认是本网页。
<form method="post">
与
个人认为,前一种方法比后一种方法要好。
2、关于XSS攻击(跨站脚本攻击)
XSS攻击多出现在评论或留言中,通过在文本中插入特意设计的javascript脚本,窃取登录用户的隐私信息,或进行恶意网址转向。
因此,用户的留言,必须要去掉html标记或脚本标记,使得这些脚本无法由浏览器执行。
PHP中通过以下方法来避免脚本攻击,虽只是初级的,但够用了。
(1)html标记转义,使用htmlspecialchars函数或htmlentities函数
(2)去除反斜杠(),反斜杠()在javascript中用于字符转义。
(3)必要时,压缩文本首尾空格。trim
3、关于Bootstrap H5表单
注意,这些表单控件必须要设置name属性,才能由$_POST变量来获取,获取的是这些控件的value属性的值
多个CheckBox控件时,name属性要用数组标记,如name= "liking[]"。单个ChceckBox控件时则非必须。PHP中通过$_POST["liking"]获得一个由各value值组成的数组。
4、关于正则表达式
Java中,我们介绍过正则表达式,在Task14中,我们也将重新回顾一下正则表达式,学习PHP中的正则表达式函数。对于正则表达式中常用语法要掌握。
思考:如何确定用户由字母组成,至少8位字符? [a-zA-Z0-9]{8,}
对于邮件认证,可以使用正则表达式(好处是具体要求可自已定义),也可以使用PHP的邮件过滤器函数(以RFC 822为标准):
思考:这个函数可以使用哪些过滤器?(查阅PHP.NET)
5、关于表单数据跨网页处理
客户端发起一个http请求,服务端返回数据,则该次http请求结束。无法对客户端的多次http请求进行跟踪,http的无状态性(Stateless)是指服务端无法对同一客户端的多次http请求进行跟踪。
GET表单通过URL中的查询字符串传输数据,POST表单通过http请求数据包的header部分进行传输。但都只能通过action的网页传输一次。
像本任务中的用户注册的例子,register.php网页获取POST表单数据,验证其合法性后,需要再传给另外一个网页进行处理(如负责将数据写入数据库)则很难处理。
本任务中提供2种思路:
一是构造隐藏表单,通过javascript自行提交给另一网页处理。不多见。
二是存储在Session中,常见。存储在Session中的数据,本网站的所有网页均可读写。关于Session与Cookie的具体应用,Task13中会详细介绍。
6、关于实验7
实验7实际上就是让你照着任务10中的例子,在自己的计算机上实践一遍。再进一步,这个表单由哪些要填报的数据项进行组成,你可自己独立去设计一个不同的。
比如:你也来设计一个用于每日疫情信息填报的表单?