表单基础知识
表单是用户与网站互动的重要手段。HTML 中的表单由 <form> 标签包裹,用于收集用户输入的信息。表单可以包含多种类型的输入元素,如文本框、密码框、复选框、单选按钮、下拉菜单等。
表单的基本结构
一个基本的表单结构如下:
// www.javascriptcn.com code example
<form action="submit.php" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="提交">
</form>在这个例子中:
action属性指定了表单数据提交到哪个页面进行处理。method属性指定了提交表单的方式,可以是get或者post。
输入元素类型
文本输入
文本输入是最常见的输入方式,通常用于输入姓名、地址等信息。
<input type="text" name="username" id="username">
密码输入
密码输入用于输入敏感信息,如密码。输入的内容会被隐藏显示。
<input type="password" name="password" id="password">
单选按钮
单选按钮允许用户从一组选项中选择一个。
<label><input type="radio" name="gender" value="male"> 男</label> <label><input type="radio" name="gender" value="female"> 女</label>
复选框
复选框允许用户从一组选项中选择多个。
<label><input type="checkbox" name="interests[]" value="sports"> 运动</label> <label><input type="checkbox" name="interests[]" value="music"> 音乐</label>
下拉菜单
下拉菜单允许用户从一组选项中选择一个。
<select name="country">
<option value="china">中国</option>
<option value="usa">美国</option>
<option value="japan">日本</option>
</select>PHP 表单处理
在 PHP 中,可以通过 $_POST 或者 $_GET 超全局变量来获取表单提交的数据。
使用 POST 方法
当使用 POST 方法提交表单时,数据被包含在请求体中,不会显示在 URL 中。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
echo "用户名:$username<br>";
echo "密码:$password";
}使用 GET 方法
当使用 GET 方法提交表单时,数据会附加在 URL 的查询字符串中。
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$username = $_GET['username'];
$password = $_GET['password'];
echo "用户名:$username<br>";
echo "密码:$password";
}数据验证与过滤
用户输入的数据可能包含恶意内容或不符合预期格式的数据,因此需要进行验证和过滤。
验证数据
检查是否为空
if (empty($_POST['username'])) {
echo "用户名不能为空!";
} else {
$username = $_POST['username'];
}检查长度
$username = $_POST['username'];
if (strlen($username) < 3 || strlen($username) > 20) {
echo "用户名长度应在3到20个字符之间!";
} else {
// 处理合法的用户名
}检查格式
$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "无效的电子邮件地址!";
} else {
// 处理合法的电子邮件地址
}过滤数据
转义特殊字符
使用 htmlspecialchars() 函数将特殊字符转换为 HTML 实体,防止 XSS 攻击。
$username = htmlspecialchars($_POST['username']); echo "用户名:$username";
过滤非法字符
使用 filter_var() 函数过滤非法字符。
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); echo "密码:$password";
文件上传
文件上传功能允许用户向服务器上传文件,如图片、文档等。
HTML 表单设置
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上传文件" name="submit">
</form>注意,enctype="multipart/form-data" 是必需的,否则文件将无法上传。
PHP 文件处理
// www.javascriptcn.com code example
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_FILES["fileToUpload"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "文件已经存在。";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "文件太大。";
$uploadOk = 0;
}
// 允许某些文件格式
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif") {
echo "只允许 JPG、JPEG、PNG & GIF 格式的文件。";
$uploadOk = 0;
}
// 检查 $uploadOk 是否已被设置为 0 由一个错误
if ($uploadOk == 0) {
echo "文件未上传。";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 " . basename($_FILES["fileToUpload"]["name"]) . " 已上传。";
} else {
echo "对不起,上传过程中出现错误。";
}
}
}
}以上代码演示了如何处理文件上传,包括检查文件是否存在、大小限制、文件类型等,并将文件移动到指定目录。
总结
通过本章的学习,你应该已经掌握了基本的表单设计方法,以及如何在 PHP 中处理表单数据。同时,了解了如何对用户输入的数据进行验证和过滤,确保应用程序的安全性和稳定性。在实际项目中,表单处理是不可或缺的一部分,希望你能灵活运用所学知识。