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

日期区间搜索功能实现求助:PHP代码调试

我帮你梳理下代码里的问题,一步步给你修正:

代码里的核心问题

  • 表单提交判断失效:后端用isset($_POST['search'])判断表单是否提交,但你的前端表单里根本没有name="search"的字段,提交按钮也没设置对应的name,导致搜索逻辑永远不会触发。
  • SQL查询硬编码错误:SQL语句里写的BETWEEN 'start' AND 'end'是固定字符串,不是从表单获取的日期变量,数据库会把它们当成字面量,肯定查不到匹配数据,还存在SQL注入风险。
  • 冗余变量处理:你定义的$search变量完全没用,而且因为$_POST['search']不存在,还可能引发警告。
  • 表格结构不规范:循环里只输出<td>标签,没包裹在<tr>里,最终渲染的表格会结构混乱。

修正后的完整代码

前端表单

<form action="searchreceipt.php" method="post">
    <input name="start" type="date" size="30" required />
    <input name="end" type="date" size="30" required />
    <input type="submit" name="submit_search" value="Search"/>
</form>

后端PHP代码

<?php
$output = '';
// 改为判断日期参数是否提交,确保表单已提交
if(isset($_POST['start']) && isset($_POST['end'])) {
    // 获取前端传入的日期(HTML date控件默认输出YYYY-MM-DD,匹配MySQL DATE类型)
    $start_date = $_POST['start'];
    $end_date = $_POST['end'];

    // 替换为你的真实数据库连接参数
    $mysqli = new mysqli('你的数据库主机', '数据库用户名', '数据库密码', '数据库名');
    // 检查连接是否成功
    if ($mysqli->connect_error) {
        die("数据库连接失败: " . $mysqli->connect_error);
    }

    // 使用预处理语句避免SQL注入,这是处理用户输入的最佳实践
    $query = $mysqli->prepare("SELECT * FROM submission WHERE date BETWEEN ? AND ?");
    $query->bind_param("ss", $start_date, $end_date);
    $query->execute();
    $result = $query->get_result();

    // 输出表格,确保每行数据用<tr>包裹
    echo "<table border='1' style='width:50%'>";
    // 处理空结果的情况,提升用户体验
    if($result->num_rows === 0) {
        echo "<tr><td>没有找到匹配的记录</td></tr>";
    } else {
        while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $officer_id = $row['officer_id'];
            $sbranch_no = $row['sbranch_no'];
            $carno = $row['carno'];
            $cost = $row['cost'];
            $area = $row['area'];
            $receipt = $row['receipt'];
            
            echo "<tr>";
            echo "<td>";
            echo "<b>Receipt ID: <a href='transactiondetail.php?receipt=$receipt'>$receipt</b></a>";
            echo "<br><br>";
            echo "Used By: $officer_id";
            echo "<br><br>";
            echo "Officer Branch No: $sbranch_no";
            echo "<br><br>";
            echo "Cost: $cost";
            echo "<br><br>";
            echo "Area travelled: $area";
            echo "<br><br>";
            echo "</td>";
            echo "</tr>";
        }
    }
    echo "</table>";

    // 关闭数据库连接和语句
    $query->close();
    $mysqli->close();
}
?>

额外注意事项

  1. 一定要把代码里的数据库连接参数替换成你自己的真实信息;
  2. 如果你的数据库日期字段不是DATE类型,可能需要调整日期格式的转换逻辑;
  3. 预处理语句已经帮你避免了SQL注入风险,不要直接把用户输入拼进SQL里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:17