PHP获取表单数据
表单简述:
一、表单的工作过程:
- 表单首先必须展示给用户,用户输入信息后提交表单。
- 每个表单都会指定一个网页,用户提交表单后,这个网页会被加载并负责处理表单信息。
通常处理表单和创建表单是由同一个文件来完成的。
PHP代码通过简单的检查用户请求中是否包含表单信息来决定是生成表单还是处理数据。
二、表单的基础组件:
- 提交类型,使用关键字
method
定义。 - 一个或多个输入元素,使用
input
标记定义。 - 提交的目的地址,使用关键字
action
定义。
三、简单的表单示例:
源代码:
<html>
<head>
<title>Building a Form</title>
</head>
<body>
<form action="<?php echo(htmlentities($_SERVER['PHP_SELF'])); ?>" method="GET">
<label>
Search:<input type="text" name="search">
</label>
<input type="submit" value="Go!">
</form>
</body>
</html>
运行截图:
关注一下图中的地址栏
- 像这样的表单文件,我们一般都是存放在web服务器上,一个可以东web方式访问的路径中,例如文档的根目录下。
- 严格来说,表单是完全使用HTML定义的,但是我们中间插入了一些PHP代码,引用了环境变量数组
$_SERVER
的PHP_SELF
元素,它提供了一种引用当前PHP文件的文件名的快捷方式。 - 可以理解为我们指定用同一个文件来处理提交后的表单数据。
$_SERVER['PHP_SELF']
:相对于网站根目录的路径及 PHP 程序名称。 我们可以很方便的获取到当前页面的地址。但是由于直接使用
$_SERVER['PHP_SELF']
会有很大的安全隐患,例如可以在URL后面加上攻击代码(具体的大家可以去了解一下),所以我们在前面加上了htmlentities()
。从而让 URL地址 中可能的恶意代码转换为用于显示的 html 代码而无法执行。
我们使用的表单的提交方式method
是GET
,当然也有POST
的提交方式,但是使用GET
方式,用户输入的信息都会显示在URL
地址中,所以用户可以将他们的查询加入书签,而不需要在这个页面上重新输入数据。(后面我会在运行的截图中显示URL地址情况)
获取表单数据
我们简单地做一个 ——在表单提交后显示查询的字符串。
- 我们想做到这一点,首先就得拿到表单域中通过
GET
方式提交的值。 - 格式:
$_GET[field]
(请注意,表单域的名称会自动成为$_GET
数组中的键。) - 与之类似,
$_POST[field]
用来访问通过POST
提交的值。
我们接着上面的那个表单例子来写,我们指定了文本输入框的名字name="search"
,所以使用$_GET["search"]
。
修改后的代码,处理表单的输入(表单名称:accessForm1.php):
<body>
<!-- 访问文本框中用户输入的数据 -->
<?php
//htmlentities: HTML实体
$search = htmlentities($_GET['search']);
$self = htmlentities($_SERVER['PHP_SELF']);
if($search == ''){
echo('
<form action="'.$self.'" method="GET">
<label>
Search:<input type="text" name="search">
</label>
<input type="submit" value="Go!">
</form>');
}
else{
echo "The search string is: <strong>$search</strong>";
}
?>
</body>
我们在输入框中输入:我是获取的数据
此时再看地址栏,表单名成为了键,搜索的值也跑到了地址栏中,所以GET
方式不适合传输私密数据。
我们在提交表单后,if语句判断时,判断到我们的$search变量被赋值了,所以就没有输出HTML表单,而是输出了查询的字符串。
在更早的PHP版本中(4.2.0之前),配置项
rgister_globals
被广泛使用,有兴趣的可以去了解一下。