You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP表单按追踪号查询用户却返回全量数据库数据问题求助

问题分析与修复方案

你的问题很清晰:当前PHP代码完全没处理表单提交的搜索参数,也没给SQL查询加过滤条件,所以直接返回了数据库里的所有用户数据。下面我一步步帮你修复,同时还会补上SQL注入防护(这是必须重视的安全细节)。

1. 修改PHP处理代码(making.php)

核心改动点:

  • 接收表单提交的追踪号参数
  • 给SQL添加WHERE ctracking = ?的过滤条件
  • 使用预处理语句执行查询(彻底规避SQL注入风险)

修改后的代码:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "class";

// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 仅在表单提交时执行查询逻辑
if (isset($_POST['csearch'])) {
    // 获取用户输入的追踪号,先做首尾空格清理
    $trackingNumber = trim($_POST['search']);
    
    if (!empty($trackingNumber)) {
        // 用预处理语句构建查询,?是参数占位符
        $sql = "SELECT ctracking, cname, cemail, crport, cdport, clocation, cdestination 
                FROM demo 
                WHERE ctracking = ?";
        
        // 初始化预处理语句
        $stmt = $conn->prepare($sql);
        // 绑定参数(s表示参数为字符串类型)
        $stmt->bind_param("s", $trackingNumber);
        // 执行查询
        $stmt->execute();
        // 获取查询结果集
        $result = $stmt->get_result();
        
        if ($result->num_rows > 0) {
            // 输出匹配到的用户详情
            while($row = $result->fetch_assoc()) {
                echo "ctracking: " . $row["ctracking"]. 
                     " - Name: " . $row["cname"]. 
                     " - Email: " . $row["cemail"]. 
                     " - Port: " . $row["crport"]. 
                     " - Dport: " . $row["cdport"] . 
                     " - Location: " . $row["clocation"] . 
                     " - Destination: " . $row["cdestination"] . "<br>";
            }
        } else {
            echo "No results found for tracking number: " . htmlspecialchars($trackingNumber);
        }
        
        // 关闭预处理语句
        $stmt->close();
    } else {
        echo "Please enter a valid tracking number.";
    }
}

$conn->close();
?>

2. 调整HTML表单(优化用户体验)

你的表单输入框提示是用户名,但实际要搜索的是追踪号,建议修改提示文字,让用户明确知道该输入什么:

<html>
<head>
    <title>Britchi Tracking</title>
</head>
<body>
    <form action="making.php" method="post">
        <h1>Britchi Tracking</h1>
        <p>
            Tracking Number (required) <br/>
            <input type="text" name="search" placeholder="Enter your tracking number" size="70"/>
        </p>
        <p><input type="submit" name="csearch" value="Search"></p>
    </form>
    <form action="http://localhost/wordpress">
        <input type="submit" value="Go to Home Page">
    </form>
</body>
</html>

关键细节说明

  • 预处理语句:直接把用户输入拼进SQL会引发SQL注入攻击,用prepare()+bind_param()是PHP操作数据库的安全最佳实践。
  • 空值检查:添加!empty($trackingNumber)判断,避免用户提交空内容时执行无效查询。
  • HTML转义:输出用户输入的追踪号时用htmlspecialchars(),防止XSS攻击。

内容的提问来源于stack exchange,提问作者Britchi2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:15:33