PHP学习笔记表单教程
PHP-一个简单的HMTL表单
下面的例子显示了一个简单的html表单,它包含两个输入字段和一个提交按钮:
<html>
<body>
<form action="welcome.php" method="post">
Name:<input type="text" name="name"><br>
E-mail:<input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
当用户填写表单并提交的按钮后,表单数据会发送到名为“welcome.php”的PHP文件供处理。表单数据通过html方法发送的。
如需显示出被提交的数据,您可以简单地输出(echo)所有变量文件是这样的:
<html>
<body>
welcome <?php echo $_POST["name"];<br>?>
Your email address id :<?php echo $_POST["email"]?>
</body>
</html>
使用http get方法也能得到相同的结果:
实例:
<html>
<body>
<form action="weclome_get.php" mthod="get">
Name:<input type="text" name="name"><br>
E-mail:<input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
注意:在处理PHP表单时请关注安全!
本业未包含任何任何表单验证系统,他值向我们展示如何发送并接受表单。
不过稍后的章节会向您展示如何提高PHP表单的安全性!对表单进行适当的安全验证对于地域黑客攻击和垃圾邮件攻击非常重要。
GET和POST
GET和POST都创建数组(例如:array(key=>value,key=>value,key3=value3,....))。此数组包含键/值对,其中键是表单控件的名称,而值是来自用户的输入数据
GET和POST被视作为$_GET何$_POST。他们是超全局变量,这意味他们的访问无需考虑作用域-无需任何特殊代码能够从任何函数、类或文件访问他们
$_GET是通过URL参数传递到当前脚本的变量数组
$_POST是通过HTTP POST传递到脚本的变量数组
何时使用GET?
通过GET方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在URL中)。GET对所发送的数量也有限的,限制在大约2000个字符。不过,由于变量显示在URL中,把页面添加到书签中也更为方便。
GET可用于发送非敏感的数据。
注释:绝不能用GET来发送密码或其他敏感信息!
如何使用POST?
通过POST方法从表单发送的信息对其他人是不可见的(所有名称/值都会嵌入HTTP请求主体中),并且对所发送的信息也无限制。
此外POST支持高阶功能,比如在服务器上传文件multi-part二进制输入。
提示:开发者偏爱POST来发送表单数据。
文本字段:
name、email和website属于文本元素,comment字段是文本框。hmtl代码是这样的:
Name:<input type="text" name="name">
E-mail: <input type="text" name="name">
website: <input type="text" name="website">
comment:<textarea name="comment" rows="5" cols="50"></textarea>
单选按钮
gendeer字段是单选按钮,HTML代码是这样的:
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
表单元素:
表单的HTML代码是这样的:
<form method="post" action="<?php echo htmlspecialchars$(_SERVER["PHP_SELF"])?>">
当提交此表单时,通过method=“post”发送表单。
什么是$_SERVER["PHP_SELE"]变量?
$_SERVER["PHP_SELF"]是一种超全局变量,他返回执行脚本的文件名。
因此,这个函数可以将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户能够在表单页面获得错误信息。
什么是HTMLspecialchars()函数?
htmlspecialchar()函数能把特殊字符转换为HTML实体。这以为这样<和>之类的HTML字符会被替换<;和$gt;这样可以防止攻击者通过表单注入HTML或JavaScript代码(XSS)对代码进行利用。
关于PHP表单安全性的重要提示:
$_SERVER["PHP"]变量能够被黑客利用!
如果您的页面使用了PHP_SELE,用户能够输入下划线然后执行跨站点脚本(xss)
提示:跨站点脚本(Cross-site scripting,xss)是哟中计算机安全漏洞类型,常见于web应用程,xss能够是攻击者想其他用户网页种输入客户端脚本。
假设我们的一张名为"test_form.php"的页面有如下表单:
<form metho="post" action="<?php echo $_SERVER['PHP_SELE'] ?>">
现在,如果用户进入的地址中正常的是地址栏中的正常URL:"http://www.example/test_form.php",上面的代码会转化为:
<form method="post" action="test_form.php">
到目前一切正常。
不过,如果用户在地址中键入了一下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>
这段代码加入一段脚本提示,并且当此页面被加载后,就会执行JavaScript代码(用户会看到一个提示框)。这仅仅是一个关于PHP_SELE变量如何被利用的简单无害案例。
您应该意识到<scipt>标签内能够添加任何JavaScript代码!黑客能够吧用户重定向到另一台服务器的某个文件,该文件的恶意代码能够更改全局变量或表单提交到其他地址以保护用户数据,等等。
如何避免$_SERVER["PHP_SELE"]被利用?
通过使用HTMLspecialchars()函数能够避免$_SERVER["PHP_SELE"]被利用呢
通过使用HTMLspecialchars()函数能够避免$_SERVER["PHP_SELE"]被利用,
表单代码是这样的:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELE"]);?>">
htmlspecialchars()函数把特殊字符转换为HTML实体。现在如果用户视图利用PHP_SELE变量,会导致如下输出:
<form method="post" action="test_form.php/><script>alert('hacked')</script>
;">
无法利用,没有危害!
通过PHP验证表单数据
在我们要做的第一件事情是通过PHP的htmlspecialchars()函数传递所有变量。
在我们使用HTMLspecial()函数后,如果用户视图在文本字段中提交一下内容:
<script>location.href('http://www.hacked.com')</script>
代码不会执行,因为会被保存为转义代码,就像这样:
$lt;script>location.href('http://www.hacked.com')</script$gt;
现在这条代码显示在页面或e-mail中安全的。
在用户提交表单时,我们还要做两件事情:
1、通过PHP trim()函数 去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
2、通过PHP stripslashes()函数删除用户输入数据中的反斜杠(\)