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

如何在PHP中按类别筛选并打印itr表数据?

实现按类别筛选报表数据的方案

没问题,我来帮你搞定这个筛选功能!咱们可以通过表单提交+动态SQL查询的方式在同一个PHP文件里实现,步骤很清晰,我给你拆解一下:

1. 完善筛选表单的提交逻辑

首先得把你现有的下拉框放到一个<form>里,这样选中类别后才能把数据提交给PHP处理。咱们用POST方法提交到当前页面(不用跳转到其他文件):

<form method="POST" action="">
    <label for="category">Please select category:</label>
    <select style="width:22%;" class="form-control" name="category" id="category" required="required">
        <option value="">--Select category--</option>
        <option value="RESIDENT" <?php echo isset($_POST['category']) && $_POST['category'] == 'RESIDENT' ? 'selected' : ''; ?>>RESIDENT</option>
        <option value="4Ps" <?php echo isset($_POST['category']) && $_POST['category'] == '4Ps' ? 'selected' : ''; ?>>4Ps</option>
    </select>
    <br />
    <button type="submit" class="btn btn-primary">筛选</button>
</form>

这里加了几个实用细节:

  • 给<select>加了id和label对应,符合HTML规范
  • 添加了提交按钮,明确触发筛选操作
  • 用PHP判断当前提交的类别,让下拉框保持选中状态(用户体验更友好)

2. 修改PHP查询逻辑,动态过滤数据

接下来要修改你的PHP查询部分,根据表单提交的类别动态生成SQL语句。重点要注意SQL注入风险,所以咱们用预处理语句来处理,绝对不要直接把用户输入拼到SQL里:

<?php
// 假设你的数据库连接$conn已经在前面定义好了(比如mysqli_connect的代码)
$category = isset($_POST['category']) ? trim($_POST['category']) : '';

// 初始化查询和参数
$sql = "SELECT * FROM itr";
$params = [];
$types = '';

// 如果有选中的类别,添加WHERE条件
if (!empty($category)) {
    $sql .= " WHERE category = ?"; // 这里假设你的类别字段名叫`category`,如果不是要改成你实际的字段名!
    $params[] = $category;
    $types = 's'; // 标记参数为字符串类型
}

// 保留原来的LIMIT 30限制
$sql .= " LIMIT 30";

// 预处理语句防止SQL注入
$query = $conn->prepare($sql);
if (!empty($params)) {
    $query->bind_param($types, ...$params);
}
$query->execute();
$result = $query->get_result();
?>

⚠️ 重要提醒:这里我假设你的itr表中存储类别的字段名叫category,如果你的实际字段名不一样(比如type或者classification),一定要把WHERE category = ?里的category改成你真实的字段名!

3. 更新表格渲染代码

最后把原来的循环渲染部分改成用预处理后的结果集,同时优化循环逻辑(原来的for循环会在数据不足30条时输出空行,用while循环更合理):

<table>
    <tr>
        <th style="padding-right:80px;padding-left:150px;">
            <center>Name</center>
        </th>
        <th style="padding-right:10px;padding-left:15px;">
            <center>Age</center>
        </th>
        <th style="padding-right:10px;padding-left:20px;">
            <center>Gender</center>
        </th>
        <th style="padding-right:30px;padding-left:40px;">
            <center>Purok</center>
        </th>
    </tr>
    <?php
    $a = 1;
    while ($fetch = $result->fetch_array()) {
    ?>
        <tr>
            <!-- 这里你原来的代码重复输出了firstname,我改成了firstname+lastname,如果你实际字段名不同可以调整 -->
            <td><?php echo $a.". ".$fetch['firstname']." ".$fetch['lastname']?></td>
            <td><center><?php echo $fetch['age']?></center></td>
            <td><center><?php echo $fetch['gender']?></center></td>
            <td><center><?php echo $fetch['address']?></center></td>
        </tr>
    <?php
        $a++;
    }
    $query->close();
    $conn->close();
    ?>
</table>

完整整合后的代码

把上面的部分拼起来,完整的可运行代码大概是这样:

<?php
// 这里替换成你的数据库连接代码
$conn = mysqli_connect('localhost', '你的用户名', '你的密码', '你的数据库名') or die(mysqli_error());
?>

<!DOCTYPE html>
<html>
<head>
    <title>ITR报表</title>
</head>
<body>
    <!-- 筛选表单 -->
    <form method="POST" action="">
        <label for="category">Please select category:</label>
        <select style="width:22%;" class="form-control" name="category" id="category" required="required">
            <option value="">--Select category--</option>
            <option value="RESIDENT" <?php echo isset($_POST['category']) && $_POST['category'] == 'RESIDENT' ? 'selected' : ''; ?>>RESIDENT</option>
            <option value="4Ps" <?php echo isset($_POST['category']) && $_POST['category'] == '4Ps' ? 'selected' : ''; ?>>4Ps</option>
        </select>
        <br />
        <button type="submit" class="btn btn-primary">筛选</button>
    </form>
    <br />

    <!-- 报表表格 -->
    <table>
        <tr>
            <th style="padding-right:80px;padding-left:150px;">
                <center>Name</center>
            </th>
            <th style="padding-right:10px;padding-left:15px;">
                <center>Age</center>
            </th>
            <th style="padding-right:10px;padding-left:20px;">
                <center>Gender</center>
            </th>
            <th style="padding-right:30px;padding-left:40px;">
                <center>Purok</center>
            </th>
        </tr>
        <?php
        $category = isset($_POST['category']) ? trim($_POST['category']) : '';

        $sql = "SELECT * FROM itr";
        $params = [];
        $types = '';

        if (!empty($category)) {
            $sql .= " WHERE category = ?"; // 务必修改成你实际的类别字段名!
            $params[] = $category;
            $types = 's';
        }
        $sql .= " LIMIT 30";

        $query = $conn->prepare($sql);
        if (!empty($params)) {
            $query->bind_param($types, ...$params);
        }
        $query->execute();
        $result = $query->get_result();

        $a = 1;
        while ($fetch = $result->fetch_array()) {
        ?>
            <tr>
                <td><?php echo $a.". ".$fetch['firstname']." ".$fetch['lastname']; ?></td>
                <td><center><?php echo $fetch['age']?></center></td>
                <td><center><?php echo $fetch['gender']?></center></td>
                <td><center><?php echo $fetch['address']?></center></td>
            </tr>
        <?php
            $a++;
        }
        $query->close();
        $conn->close();
        ?>
    </table>
</body>
</html>

关键注意事项

  1. 字段名匹配:一定要确认你的itr表中存储类别的字段名,把代码里的category改成实际的字段名(比如classification、type等)。
  2. SQL注入防护:用预处理语句绑定参数是核心,绝对不要直接把用户输入拼到SQL里,这能有效避免安全漏洞。
  3. 用户体验优化:保留下拉框的选中状态,让用户清晰知道当前筛选的是哪个类别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:53