表单的主要功能:就是在网页上用于输入信息的区域,收集用户输入的信息,并将其提交给后端的服务器进行处理,实现用户与服务器的交互。
例如:购物结算、信息搜索等都是通过表单实现的。
一个完整的表单是由表单域和表单控件组成的。其中,表单域由form标记定义,用于实现用户信息的收集和传递。
<form action="form.php" method="post" enctype="multipart/form-data">
<!-- 各种表单控件 -->
<!-- _POST _GET -->
</form>
是HTML的注释标记,用于解释和说明。
属性名称 | 说明 |
---|---|
action | 指定接收并处理表单数据的服务器程序的URL地址 |
method | 设置表单数据的提交方式,常用的有GET和POST方式,默认值为GET |
enctype | 规定发送到服务器之前应该如何对表单数据进行编码 |
action属性
的值可以是绝对路径、相对路径,若省略该属性则表示提交给当前文件进行处理。
GET方式传递的表单在URL地址栏中可见
。相比GET方式,POST方式提交的数据是不可见的,在交互时相对安全。因此,通常情况下使用POST方式提交表单数据。
enctype属性
的默认值为application/x-www-form-urlencoded,表示在发送表单数据前编码所有字符。除此之外还可以设置为multipart/form-data表示不进行字符编码,尤其是含有文件上传的表单必须使用该值;设置为text/plain表示将空格转换为“+”加号,但不对特殊字符编码。
当PHP收到来自浏览器提交的数据后,会自动保存到超全局变量中。
常见的超全局数组变量有$_POST、$_GET
等
通过POST方式提交的数据会保存到 $_POST 中
通过GET方式提交的数据会保存到 $_GET 中
例子:一次完整的表单数据交互
form表单页面,设置form表单提交方式为 post,action设置要提交到的页面地址:
<html>
<head>
<meta charset="utf-8">
<title>php-studytitle>
head>
<body>
<form action="welcome_post.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
form>
body>
html>
post提交接收页面 welcome_post.php:
<?php
header("Content-type:text/html;charset=utf-8");
?>
欢迎<?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?>岁。
<html>
<head>
<meta charset="utf-8">
<title>php-studytitle>
head>
<body>
<form action="welcome_post_array.php" method="post">
<input type="checkbox" name="hobby[]" value="swimming"> 游泳
<input type="checkbox" name="hobby[]" value="reading"> 读书
<input type="checkbox" name="hobby[]" value="running"> 跑步
<input type="checkbox" name="hobby1[]" value="basketball"> 打篮球
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
<textarea name="tr">textarea>
form>
body>
html>
$POST
中的hobby元素是一个索引数组,数组中的元素是用户所选复选框对应的value属性值。 当用户未选中任何复选框时,$POST数组中将不存在hobby元素。
//welcome_post_array.php
<?php
header("Content-type:text/html;charset=utf-8");
?>
欢迎<?php echo $_POST["fname"];?>!<br>
你的年龄是 <?php echo $_POST["age"];?>岁。
你的爱好是: <?php print_r($_POST["hobby"],false);?>
你的textarea是: <?php echo nl2br($_POST["tr"]);?>
1、post请求更安全;post请求不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存。
2、post请求发送的数据更大,get请求有url长度限制。
3、post请求能发送更多的数据类型,get请求只能发送ASCII字符。
4、传参方式不同。
5、get产生一个TCP数据包;post产生两个。