【实战】PHP表单
在前面的章节中,我们已经基本入门 PHP 这门脚本语言,讲解中也仅仅用了控制台来运行 PHP 实例,这并不符合 PHP Web 编程的初衷,故此本章节将做一个简单的 PHP Web 实战:图书馆读者身份注册。
我们默认您已经掌握 HTML 基础知识,如果没有,可以关注我们的
HTML教程
公众号或转到[HTML5 教程]()同步学习!
为了更好地实现前后端分离,接下来的示例代码中,HTML 文件不会包含 PHP 代码。
为了尽快开始,我们建议使用
wamp
集成环境软件进行项目开发。
1. 创建一个读者注册表单
我们建立一个 HTML 表单,其中包含了读者的昵称、密码、确认密码、年级等四项信息,示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>读者注册</title>
</head>
<body>
<h1>注册</h1>
<form method="POST" action="./signup.php">
<label for="name">
昵称:
<input type="text" name="name" id="name">
</label>
<label for="pwd">
密码:
<input type="password" name="pwd" id="pwd">
</label>
<label for="confirm">
确认密码:
<input type="password" name="confirm" id="confirm">
</label>
<label for="grade">
年级:
<select name="grade" id="grade">
<option value="1">大一</option>
<option value="2">大二</option>
<option value="3">大三</option>
<option value="4">大四</option>
</select>
</label>
<button type="submit" id="submit">确认注册</button>
</form>
</body>
</html>
将该文件命名为register.html
,复制该文件至你的服务器根目录,在浏览器中输入:localhost/register.html
,你将看到下面这个界面:
其中表单标签<form>
中的method
属性表示该表单以什么方式发送数据至服务器处理脚本,action
属性则表示请求页面的地址。
发送方式有两种:GET
和POST
。GET
在语义上表示获取内容,发送的参数直接显示在URL上,而且由于URL有长度限制,适合发送较短的数据;而POST
在语义上表示上传内容,发送的参数被构建在请求的消息体中,较之GET
隐私性更强。
我们这里采用POST
方式发送用户注册信息至signup.php
脚本处理。
2. 获取数据:$_GET
与 $_POST
form
表单在点击提交按钮后,会将数据发送至signup.php
,那么 PHP 脚本是如何获取这个数据的呢?
答案是$_POST
数组变量。
如果该表单的发送方式为GET
,则在PHP中使用$_GET
数组变量进行接收。
现在在你的服务器根目录新建一个名为signup.php
的文件,内容如下:
<?php
// 处理用户注册
$name = $_POST['name'] ?? NULL;
$pwd = $_POST['pwd'] ?? NULL;
$confirm = $_POST['confirm'] ?? NULL;
$grade = $_POST['grade'] ?? 0;
if($name && $pwd && $confirm && $grade){
echo '用户名:',$name,'<br>密码:',$pwd,'<br>确认密码:',$confirm,'<br>年级:',$grade;
} else {
$tip = '提交的表单不完整';
echo json_encode($tip, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
上述代码接收了 HTML 文件上传的数据,其中$_POST
数组的索引为HTML表单元素的name
属性值。
在浏览器中访问register.html
,并填充各个输入框,点击确认注册按钮,将跳转至localhost/signup.php
页面,并输出类似下面的结果:
如果将表单中的发送方式改为GET
,并将处理脚本signup.php
的$_POST
全部改为$_GET
,你将在地址栏看到类似这样的信息:http://localhost/signup.php?name=极速教程&pwd=jisu&confirm=jiaocheng&grade=1
,你在表单提交的数据都直接显示在 URL 了。
2.1 另一种获取数据方式:$_REQUEST
有时候我们可能不确定网页是通过什么方式传输数据的,那么可以使用$_REQUEST
数组变量。它支持POST
与GET
方式传送的数据,尝试将signup.php
文件的内容改为下面代码:
<?php
// 处理用户注册
// 遍历 $_REQUEST 变量
foreach ($_REQUEST as $key => $value) {
echo $key,': ',$value,'<br>';
}
刷新浏览器,查看结果。
2.2 PHP代码说明
前面的示例代码给我们展示了 PHP 是如何在后台获取数据的,现在我们详细分析代码:
<?php
// 处理用户注册
$name = $_POST['name'] ?? NULL;
$pwd = $_POST['pwd'] ?? NULL;
$confirm = $_POST['confirm'] ?? NULL;
$grade = $_POST['grade'] ?? 0;
if($name && $pwd && $confirm && $grade){
echo '用户名:',$name,'<br>密码:',$pwd,'<br>确认密码:',$confirm,'<br>年级:',$grade;
} else {
$tip = '提交的表单不完整';
echo json_encode($tip, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
第 5~8 行是通过$_POST
数组接收前台给我们传输的数据,还记得NULL
合并操作符??
吗?在运算符一章中我们讲过它表示返回从左往右第一个不是NULL
的值,如果都为NULL
则返回NULL
,这里我们用来判断数据提交是否完整。
而第 14 行的json_encode()
函数表示将一个数组或者对象转化为JSON
字符串形式,以便前台可以处理它。
2.3 一些特殊的表单值获取
除了常见的文本输入框、密码输入框,我们可能还会接触到像上例中的下拉菜单<select>
标签,或者是单选标签<input type="radio" name="single_choose" value="PHP教程">
、多选标签<input type="checkbox" name="multi_choose[]" value="极速教程">
,获取某一个标签的值时只需定义该标签的name
值,形如name='single'
,而获取一个标签中的多个值时,需要定义该标签的name
值为数组形式,形如name='multi[]'
。
例如下面的代码(文件test.html
):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<form action="./test.php" method="post">
<!-- select标签:单选 -->
<h2>年级</h2>
<select name="grade" id="grade">
<option value="1">大一</option>
<option value="2">大二</option>
<option value="3">大三</option>
<option value="4">大四</option>
</select>
<!-- redio标签:单选 -->
<h2>性别</h2>
<label for="">
<input type="radio" name="gender" value="男" id="gender">
男
</label>
<label for="">
<input type="radio" name="gender" value="女" id="gender">
女
</label>
<!-- select标签:多选 -->
<h2>爱好</h2>
<select name="hobby[]" id="hobby">
<option value="游泳">游泳</option>
<option value="唱歌">唱歌</option>
<option value="编程">编程</option>
</select>
<!-- checkbox标签:多选 -->
<h2>社交方式</h2>
<label for=""><input type="checkbox" name="social[]" value="QQ" id="">QQ</label>
<label for=""><input type="checkbox" name="social[]" value="微信" id="">微信</label>
<label for=""><input type="checkbox" name="social[]" value="微博" id="">微博</label>
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
因为要输出数组信息,我们新建一个 PHP 文件test.php
,代码如下:
<?php
foreach ($_REQUEST as $key => $value) {
if (is_array($value)) {
echo $key,': ',json_encode($value, JSON_UNESCAPED_UNICODE),'<br>';
} else {
echo $key,': ',$value,'<br>';
}
}
其中json_encode()
函数用来处理数组为JSON字符串。
在浏览器地址栏输入localhost\test.html
,并填充表单,点击提交按钮,查看输出结果:
可以看到数组数据被正确输出。
经过十章的概念学习以及一些简短的示例,我们已经完全掌握了 PHP 的基础,并且通过 PHP 表单的实战,我们也学会了如何将数据发送到 PHP 后台处理,通过 JavaScript 可以将 PHP 处理过的数据反馈到 HTML 页面,如果你对 JavaScript 比较熟悉,还可以使用异步处理来减少用户等待时间。
在后续的教程里,我们也将讲解PHP与Ajax是如何相互配合的,接下来我们通过一个一个的小案例来进入我们的中级教程。