PHP - 表单处理
HTML 表单在 PHP Web 应用程序中扮演着重要角色。虽然纯 HTML 组成的网页是静态网页,但 HTML 表单组件是一个重要的特性,有助于带来交互性和渲染动态内容。PHP 的表单处理功能可以在处理之前验证从用户收集的数据。
什么是表单处理?
HTML 表单是一组各种表单控件(如文本字段、复选框、单选按钮等)的集合,用户可以通过这些控件进行交互,输入或选择某些数据,这些数据可以由 JavaScript(客户端处理)本地处理,或者发送到远程服务器由服务器端编程脚本(如 PHP)处理。
例如 - 假设用户输入姓名和电子邮件,点击提交,您可以使用 PHP 来处理这些数据。
HTML 表单结构
一个或多个表单控件元素被放置在 <form> 和 </form> 标签内。form 元素由不同的属性(如 name、action 和 method)来表征。
<form [attributes]> Form controls </form>
表单属性
在 HTML form 元素的众多属性中,以下属性经常需要并被定义 −
Action 属性
一个表示处理表单提交的 URL 的字符串。例如,http://example.com/test.php。要将表单数据提交到定义 HTML 表单的同一 PHP 脚本中,请使用 PHP_SELF 服务器变量 −
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Enctype 属性
指定在发送到服务器之前表单数据应如何编码的方法。可能的值有 −
application/x-www-form-urlencoded − 默认值。
multipart/form-data − 如果表单包含 type=file 的 <input> 元素,请使用此值。
text/plain − 用于调试目的。
Method 属性
一个表示提交表单时使用的 HTTP 方法的字符串。method 属性的可能值如下 −
post − POST 方法;表单数据作为请求体发送。
get (默认) − GET 方法;表单数据附加到 action URL,并以 "?" 分隔。当表单没有副作用时使用此方法。
dialog − 当表单位于 <dialog> 内时,关闭对话框并在提交时触发 submit 事件,而不提交数据或清除表单。
Name 属性
表单的名称。值不能为空字符串,并且如果同一 HTML 文档中有多个表单,则必须唯一。
Target 属性
一个指示提交表单后在哪里显示响应的字符串。应为以下之一 −
_self (默认) − 加载到与当前相同的浏览上下文。
_blank − 加载到一个新的未命名浏览上下文。
_parent − 加载到当前浏览上下文的父浏览上下文。
_top − 加载到顶级浏览上下文(当前浏览上下文的祖先且没有父级)。
因此,在 PHP Web 应用程序中使用的典型 HTML 表单如下所示 −
<form name="form1" action="<?php echo $_SERVER['PHP_SELF'];?>" action="POST"> Form controls </form>
表单元素
HTML 表单设计有不同类型的控件或元素。用户可以与这些控件交互来输入数据或从呈现的可用选项中选择。其中一些元素描述如下 −
Input 元素
input 元素表示一个数据字段,它允许用户输入和/或编辑数据。
INPUT 元素的 type 属性控制数据类型。INPUT 元素可以是以下类型 −
Text
用于输入单行文本的文本字段。
<input type="text" name="employee">
Password
单行文本字段,会掩码输入的字符。
<input type="password" name="pwd"><br>
Checkbox
一个矩形可勾选框,表示从预定义列表中选择零个或多个值。
<input type="checkbox" id="s1" name="sport1" value="Cricket"> <label for="s1">I like Cricket</label><br> <input type="checkbox" id="s2" name="sport2" value="Football"> <label for="s2">I like Football</label><br> <input type="checkbox" id="s3" name="sport3" value="Tennis"> <label for="s3">I like Tennis</label><br><br>
Radio
这种类型渲染一个圆形可点击按钮,具有两种状态(ON 或 OFF),通常是 radio group 中多个按钮的一部分。
<input type="radio" id="g1" name="gender" value="Male"> <label for="g1">Male</label><br> <input type="radio" id="g2" name="female" value="Female"> <label for="g2">Female</label><br>
File
input type 渲染一个标有 file 的按钮,允许用户从客户端文件系统中选择文件,通常用于上传到服务器。表单的 enctype 属性必须设置为 "multipart/form-data"。
<input type="file" name="file">
单行文本字段,专为接受符合有效 email ID 格式的字符串而定制。
URL
单行文本字段,专为接受符合有效 URL 格式的字符串而定制。
Submit
此 input 元素渲染一个按钮,点击时会启动表单数据向当前表单 action 属性中指定的 URL 的提交。
<input type="submit" name="Submit">
Select 元素
select 元素表示一个用于从一组选项中选择的控件。每个选项使用 Select 控件的 option 属性定义。例如 −
<select name="Subjects" id="subject"> <option value="Physics">Physics</option> <option value="Chemistry">Chemistry</option> <option value="Maths">Maths</option> <option value="English">English</option> </select>
表单示例
让我们使用这些表单元素来设计一个 HTML 表单,并将其发送到 PHP_SELF 脚本
当你填写表单并点击“Submit”按钮时,PHP 会介入获取你提供的信息。它使用名为 $_POST 的机制来获取诸如姓名、电子邮件、网站、评论和性别等字段的详细信息。为了保持安全,PHP 使用 htmlspecialchars() 函数来阻止任何潜在的有害代码。处理完所有信息后,PHP 会在网页上直接显示你输入的信息。
<html>
<body>
<form method = "post" action = "<?php
echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<table>
<tr>
<td>Name:</td>
<td><input type = "text" name = "name"></td>
</tr>
<tr>
<td>E-mail: </td>
<td><input type = "email" name = "email"></td>
</tr>
<tr>
<td>Website:</td>
<td><input type = "url" name = "website"></td>
</tr>
<tr>
<td>Classes:</td>
<td><textarea name = "comment" rows = "5" cols = "40"></textarea></td>
</tr>
<tr>
<td>Gender:</td>
<td>
<input type = "radio" name = "gender" value = "female">Female
<input type = "radio" name = "gender" value = "male">Male
</td>
</tr>
<td>
<input type = "submit" name = "submit" value = "Submit">
</td>
</table>
</form>
<?php
$name = $email = $gender = $comment = $site = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["name"];
$email = $_POST["email"];
$name = $_POST["name"];
$comment = $_POST["comment"];
$gender = $_POST["gender"];
$site = $_POST["website"];
}
echo "<h2>Your given values are as:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $site;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
输出
它将产生以下输出 −
