如何将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
相关产品推荐
相关产品推荐

