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

如何将HTML输入框值存储到PHP变量 用于对比MySQL数据展示指定内容

问题根本原因

PHP是服务端运行的语言,在页面发送到用户浏览器之前就已经执行完毕;JavaScript是客户端运行的语言,在用户浏览器加载完页面后才执行。二者运行时机完全隔离,无法直接用JavaScript给PHP变量赋值,这是之前尝试失败的核心原因。

方案1:普通表单提交实现(页面刷新)

步骤1:PHP接收参数并做安全处理

在页面最顶部添加PHP代码接收表单提交的参数,同时使用PDO预处理避免SQL注入:

<?php
// 接收GET提交的搜索值,过滤前后空格,默认值为空
$search_transaction = isset($_GET['transaction_name']) ? trim($_GET['transaction_name']) : '';
include "pdo_connection2.php";

// 构造基础SQL语句
$sql = "SELECT * FROM tbl_transaction WHERE 1=1";
$params = [];

// 存在搜索值时追加查询条件,可根据实际需求修改匹配的字段
if (!empty($search_transaction)) {
    // 示例:同时匹配交易编号和药品编码,模糊搜索加%,精确搜索去掉%即可
    $sql .= " AND (transaction_id = ? OR transaction_medicinecode LIKE ?)";
    $params[] = $search_transaction;
    $params[] = "%{$search_transaction}%";
}

// 预处理执行SQL,避免注入风险
$stm3 = $conn->prepare($sql);
$stm3->execute($params);
$rows = $stm3->fetchAll(PDO::FETCH_ASSOC);
?>

步骤2:修改表单内容

给输入框加值回填,新增提交按钮(也可以绑定搜索图标触发提交):

<input type="text" id="transaction_id_input" name="transaction_name" value="<?php echo htmlspecialchars($search_transaction); ?>">
<button type="submit">搜索</button>

原来的表格渲染逻辑不需要修改,直接沿用即可。

方案2:AJAX无刷新实现(体验更好)

如果不需要页面刷新,可以用AJAX异步请求数据渲染:

前端JS代码

// 绑定搜索图标点击事件,也可以绑定输入框回车事件
document.querySelector('.fa-search').addEventListener('click', function() {
    const searchVal = document.getElementById('transaction_id_input').value.trim();
    const xhr = new XMLHttpRequest();
    // 请求地址填当前PHP文件地址即可
    xhr.open('GET', `current_page.php?transaction_name=${encodeURIComponent(searchVal)}&ajax=1`, true);
    xhr.onload = function() {
        if (this.status === 200) {
            document.getElementById('myModalTable').innerHTML = this.responseText;
        }
    };
    xhr.send();
});

PHP逻辑调整

在PHP代码最开始加判断,AJAX请求只返回tbody内容即可:

<?php
$search_transaction = isset($_GET['transaction_name']) ? trim($_GET['transaction_name']) : '';
$is_ajax = isset($_GET['ajax']) ? $_GET['ajax'] : 0;

include "pdo_connection2.php";
// SQL查询逻辑和方案1完全一致
// ...省略SQL执行代码...

// AJAX请求直接返回tbody内容,结束运行
if ($is_ajax) {
    if (count($rows) > 0) {
        foreach ($rows as $row) {
            // 输出表格行的HTML代码,和原来的渲染逻辑一致
            echo "<tr>
                    <td data-label='交易ID'>{$row['transaction_id']}</td>
                    // 其他字段按原有格式输出
                  </tr>";
        }
    } else {
        echo '<tr><td><h4 id="h4nodatafound">------ 未查询到数据 ------</h4></td></tr>';
    }
    exit;
}
?>

注意事项

  • 所有用户提交的参数必须做过滤,SQL查询必须用PDO预处理,禁止直接拼接用户输入的内容到SQL语句中,避免SQL注入风险
  • 如果搜索参数涉及敏感内容,建议把表单的method属性从GET改为POST,对应PHP接收参数改用$_POST即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:07