这些知识是HTML的范畴,这里只简单的提一下,如果需要详细了解,请自行翻阅HTML文档。
让用户输入数据并对用户输入进行处理是最常见的交互类型,我们使用input
标签来表示文本域,HTML5中提供了很多不同的输入类型,输入类型使用type
属性定义。
text
text类型是文本域最常见的类型。格式如下:
text文本框:<input type='text' name='test'>
网页效果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9pAlGaN-1584154420241)(D:\mkdownpad2\php7.3.8官方手册笔记\表单.assets\image-20200308194435468.png)]
color
color类型的表单将会调出拾色器用于选取颜色:
color:<input type='color' name='test'>
网页效果:
date
date类型允许从一个日期选择器选择一个日期:
生日:<input type='date' nam='bday'>
email
email类型用于应该包含email地址的输入域,不规范的输入会提示错误:
Email:<input type='email' name='useremail'>
number
number类型用于应该包含数值的输入域,并且还能够设定对所接收数字的限定,也可设置步进长度。
数量(1~10,步进为3):<input type="number" name="quantity" min="1" max="10" step="3">
range
range类型用于应该包含一定范围内数字值的输入域,显示为滑动条:
<input type="range" name="points" min="1" max="10">
url
url类型用于应该包含URL地址的输入域。在提交表单时,会自动验证url的值:
请输入一个网址:<input type="url" name="url">
以上是常见的input表单类型,input的type参数能接受的类型如下表:
值 | 描述 |
---|---|
button | 定义可点击的按钮(通常与 JavaScript 一起使用来启动脚本)。 |
checkbox | 定义复选框。 |
color | 定义拾色器。**注意:**Internet Explorer 和 Safari 不支持 元素。 |
date | 定义date控件(包括年、月、日,不包括时间)。**注意:**Internet Explorer 或 Firefox 不支持 元素。 |
datetime | 定义date和time控件(包括年、月、日、时、分、秒、几分之一秒,基于 UTC 时区)。注意:Internet Explorer、Firefox 或者 Chrome 不支持 元素,Safari 中部分支持。Opera 12 以及更早的版本中完全支持。 |
datetime-local | 定义 date 和 time 控件(包括年、月、日、时、分、秒、几分之一秒,不带时区)。**注意:**Internet Explorer 或 Firefox 不支持 元素。 |
定义用于 e-mail 地址的字段。**注意:**Internet Explorer 9(以及更早的版本)或 Safari 不支持 元素。 | |
file | 定义文件选择字段和 “浏览…” 按钮,供文件上传。 |
hidden | 定义隐藏输入字段。 |
image | 定义图像作为提交按钮。 |
month | 定义month和year控件(不带时区)。**注意:**Internet Explorer 或 Firefox 不支持 元素。 |
number | 定义用于输入数字的字段。**注意:**Internet Explorer 9 以及更早的版本不支持 元素。 |
password | 定义密码字段(字段中的字符会被遮蔽)。 |
radio | 定义单元按钮。 |
range | 定义用于精确值不重要的输入数字的控件。 |
reset | 定义重置按钮(重置素有的表单值为默认值)。 |
search | 定义用于输入搜索字符串的文本字段。**注意:**Internet Explorer 9(以及更早的版本)或 Safari 不支持 元素。 |
submit | 定义提交按钮。 |
tel | 定义用于输入电话号码的字段。 |
text | 默认。定义一个单行的文本字段(默认宽度为20个字符)。 |
time | 定义用于输入时间的控件(不带时区)。注意: Internet Explorer 或 Firefox浏览器不支持使用type=“time” 属性的 HTML 元素。 |
url | 定义用于输入URL的字段。**注意:**Internet Explorer 9 (及更早IE版本), 或 Safari 浏览器不支持使用 type=“url” 属性的 HTML 元素。 |
week | 定义week和year控件(不带时区)。**注意:**Internet Explorer 或 Firefox 浏览器不支持使用 type=“week” 属性的 HTML 元素。 |
下拉框
下拉框使用select标签定义。
【示例】
<select name="car">
<option value="volo">Volooption>
<option value="saab">Saaboption>
<option value="mercedes">Mercedesoption>
<option value="audi">Audioption>
select>
网页效果:
文本域
Textarea 对象代表 HTML 表单中的一个文本域 (text-area)。
【示例】
<textarea name='textarea'>textarea>
网页效果:
Form对象代表一个HTML表单,表单通常用于收集用户数据,包含了 input 元素如:文本字段,复选框,单选框,提交按钮等。表单对象包含如下属性:
属性 | 描述 |
---|---|
acceptCharset | 服务器可接受的字符集。 |
action | 设置或返回表单的action属性。定义了当表单被提交时数据被送往何处。 |
enctype | 设置或返回表单用来编码内容的 MIME 类型。如果表单没有 enctype 属性,那么当提交文本时的默认值是 “application/x-www-form-urlencoded”。当 input type 是 “file” 时,值是 “multipart/form-data”。 |
id | 设置或返回表单的id。 |
length | 返回表单中的元素数目。 |
method | 设置或返回将数据发送到服务器的HTTP 方法。如:get、post等。 |
name | 设置或返回表单的名称。 |
target | 设置或返回表单提交结果的Frame 或 Window 名。值包含_blank|_parent|_self|_top 中的一个。 |
处理表单数据的基本过程是:数据从web表单(form)发送到PHP代码,经过处理再生成HTML输出。它的处理原理是:当PHP处理一个页面的时候会检查URL、表单数据、上传文件、可用cookie、Web服务器和环境变量,如果有可用信息,就可以通过PHP访问自动全局变量数组$_GET
、$_POST
、$_FILES
、$_COOKIE
、$_SERVER
和$_ENV
得到。
表单的基本结构是由
标识包裹的区域:
<html>
<head>
<title>Exampletitle>
head>
<body>
<form action="#" method="POST" enctype="multipart/form-data">
.....
form>
body>
html>
在PHP中使用get和post接收来自HTML表单的值,在form表单中定义PHP的接收方式和接收地址。
get和post的区别
在form表单中,action属性定义提交表单的地址,method属性定义提交的方法。
【示例】
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Exampletitle>
head>
<body>
<form action="user.php" method="post">
用户名:<input type="text" name="user">
<br />
密码:<input type="password" name="pwd">
<br />
生日:<input type="date" name="bday">
<br />
<input type="radio" name="sex" value="male">女性
<input type="radio" name="sex" value="famale">男性
<br />
<input type="checkbox" name="vehicle[]" value="Bike">自行车
<input type="checkbox" name="vehicle[]" value="Car">汽车
<br />
<select name="car">
<option value="volo">Volvooption>
<option value="saab">Saaboption>
<option value="mercedes">Mercedesoption>
<option value="audi">Audioption>
select>
<br />
<input type="submit" value="提交">
form>
body>
html>
网页效果:
代码中定义接收表单值的地址是user.php,接收方式是post,当用户点击提交按钮后,会将数据发送到user.php中,下面我们创建user.php来接收数据。
// user.php
echo ""
;
var_dump($_POST);
echo "
";
?>
程序输出结果:
如果form中选择使用get方式上传数据,那么将user.php中的$_POST
改为$_GET
即可。使用get方式点击提交按钮后,浏览器URL变成了如下形式:
user.php?user=admin&pwd=admin&bday=2020-03-08&sex=famale&vehicle[]=Bike&car=mercedes
可以看到我们所有的数据都是明文传送的。得到的数据结果是一样的。
HTML中使用type="file"类型的表单可向服务器上传文件,服务端使用PHP接收文件数据和接收普通表单元素数据的处理方法不同,必须在form表单中定义enctype="multipart/form-data"
。
【示例】
<html lang="en">
<head>
<meta charset="utf-8" />
<title>fileuploadtitle>
head>
<body>
<form action="file.php" enctype="multipart/form-data" method="post" name="upfile">
上传文件:<input type="file" name="filename" />
<input type="submit" value="上传" />
form>
body>
html>
网页效果:
file.php文件代码如下:
echo ""
;
var_dump($_POST);
var_dump($_FILES);
echo "
";
if ($_FILES["filename"]["error"] > 0) {
echo "错误:".$_FILES["filename"]["error"] . "程序输出结果:
从输出结果可以看到var_dump($_POST);
的内容为空,表明在使用file类型表单提交数据时并不使用$_POST
接收数据,而是使用$_FILES
来接收。
PHP中使用move_uploaded_file
函数将上传的文件移动到指定位置。
另外,在PHP配置文件php.ini中默认上传文件的大小只有2MB,在上传大文件时需要对配置文件进行修改。php.ini中有关上传文件的设置如下:
$_POST
和$_FILES
将会为空。要上传大文件,必须设定该选项值大于upload_max_filesize选项的值,如:设置了upload_max_filesize=50M,这里就可以设置post_max_size=100M。另外,如果启用了内存限制,那么该值应当小于memory_limit选项的值。PHP对URL中传递的参数进行编码,即可以实现对所传递数据的加密,又可以对无法通过浏览器传递的字符进行传递。要实现次操作一般使用urlencode()
和rawurlencode()
函数。而对此过程的反向操作就是使用urldecode()
和rawruldecode()
函数。
urlencode()
urlencode(string $str):string
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
该函数返回字符串,此字符串中除了-_.
之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与WWW表单POST数据的编码方式是一样的,同时与application/x-www-form-urlencoded
的媒体类型编码方式一样。
urldecode()
urldecode(string $str):string
该函数解码给出的已编码字符串中的任何%##
。 加号(’+’)被解码成一个空格字符。
rawurlencode()
rawurlencode(string $str):string
该函数根据 » RFC 3986 编码指定的字符。
在PHP5.3.0之前,rawurlencode » RFC 1738 来编码波浪线。
rawurldecode()
rawurldecode(string $str):string
返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。
【示例】
$user = '张三 李四'; // 定义变量
// 对字符串进行编码
$link1 = "index.php?userid=" . urlencode($user) . "
";
$link2 = "index.php?userid=" . rawurlencode($user) . "
";
echo $link1 . $link2;
// 对字符串进行解码
echo urldecode($link1) . "
";
echo urldecode($link2) . "
";
echo rawurldecode($link2);
?>
程序输出结果:
从输出结果可以看出urlencode()
和rawurlencode()
的区别在于对空格的编码上,前者使用“+”编码空格,后者使用“%20”编码空格。
如果配合JS处理页面信息,要注意urlencode()
函数使用“+”代表空格会与JS代码冲突。因此在与JS交互时,应使用’rawurlencode()
'来编码。