模式切换
表单处理与用户输入
表单创建与提交:POST 和 GET 方法
创建表单:
- 使用
GET
方法提交数据时,表单数据会附加在 URL 后面,不适合传输敏感数据。 - 使用
POST
方法提交数据时,数据在请求体中传输,更适合处理登录等敏感信息。
html
<!-- 使用 GET 方法 -->
<form action="process_get.php" method="get">
<input type="text" name="username" placeholder="Username">
<input type="submit" value="Submit">
</form>
<!-- 使用 POST 方法 -->
<form action="process_post.php" method="post">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="Login">
</form>
获取表单数据:
在 PHP 中使用 $_GET
或 $_POST
全局数组获取提交的数据。
php
// 使用 GET 方法
$username = $_GET['username'];
// 使用 POST 方法
$username = $_POST['username'];
$password = $_POST['password'];
表单验证:输入过滤和数据验证
输入过滤:
使用 filter_input()
过滤用户输入,确保数据类型的安全性。
php
// 过滤字符串输入
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
数据验证:
使用 filter_var()
验证数据的有效性。
php
// 验证电子邮件格式
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Valid email address.";
} else {
echo "Invalid email address.";
}
// 验证整数
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if ($age !== false) {
echo "Valid age.";
} else {
echo "Invalid age.";
}
表单校验(服务器端和客户端):
- 服务器端校验:在 PHP 中进行输入验证,确保安全性。
- 客户端校验:使用 HTML5 属性(如
required
)和 JavaScript 进行即时验证。
文件上传:处理上传的文件及安全检查
处理文件上传:
表单中需要添加 enctype="multipart/form-data"
属性。
html
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload">
<input type="submit" value="Upload">
</form>
上传文件的 PHP 处理(upload.php):
php
if (isset($_FILES['fileToUpload'])) {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = true;
// 检查文件类型
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($fileType, ['jpg', 'png', 'jpeg', 'gif'])) {
echo "Only image files are allowed.";
$uploadOk = false;
}
// 检查文件大小(最大 2MB)
if ($_FILES["fileToUpload"]["size"] > 2 * 1024 * 1024) {
echo "File is too large.";
$uploadOk = false;
}
// 检查是否存在错误
if ($uploadOk && move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "The file has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
安全检查:
- 检查文件的 MIME 类型,避免执行恶意脚本。
- 限制上传的文件大小和文件类型。
- 存储上传文件时,重命名文件以避免文件名冲突和路径泄露。
Session 与 Cookie:用户会话管理
Session:
使用 session_start()
启动会话,存储和访问用户的会话数据。
php
// 启动会话
session_start();
// 设置 Session 变量
$_SESSION['username'] = "JohnDoe";
// 访问 Session 变量
echo "Hello, " . $_SESSION['username'];
// 销毁会话
session_destroy();
Cookie:
使用 setcookie()
设置 Cookie,并通过 $_COOKIE
访问。
php
// 设置 Cookie,有效期为 1 天
setcookie("username", "JohnDoe", time() + 86400, "/");
// 检查 Cookie 是否存在
if (isset($_COOKIE['username'])) {
echo "Hello, " . $_COOKIE['username'];
} else {
echo "Welcome, guest!";
}
// 删除 Cookie
setcookie("username", "", time() - 3600, "/");
Session 与 Cookie 的对比:
- Session:存储在服务器端,更加安全;适合存储敏感数据。
- Cookie:存储在客户端,适用于保存非敏感的状态信息(如用户偏好设置)。