Skip to content

表单处理与用户输入

表单创建与提交: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:

使用 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:存储在客户端,适用于保存非敏感的状态信息(如用户偏好设置)。
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!