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

如何在PHP+AJAX实时搜索中传递静态与keyup触发的双输入参数?

解决AJAX实时搜索同时传递静态school参数的问题

问题根源

你当前的问题出在两个核心点:

  • AJAX请求未正确传递school参数,或是传递后PHP仍从$_GET['sch']取值——但AJAX是POST请求,ajax.php里的$_GET['sch']是空的(因为AJAX请求的URL未携带该参数)。
  • 你之前尝试data: {search: name, school: school}失败,大概率是没正确获取school变量的值。

修复步骤

1. 修正AJAX代码,正确传递school参数

在JS代码里先获取页面上school输入框的值,再加入AJAX的请求参数中:

function fill(Value) {
   $('#search').val(Value);
   $('#display').hide();
}
$(document).ready(function() {
   $("#search").keyup(function() {
       var name = $('#search').val();
       // 获取页面上school输入框的值
       var school = $('#school').val();
       if (name == "") {
           $("#display").html("");
       }
       else {
           $.ajax({
               type: "POST",
               url: "ajax.php",
               data: {
                   search: name,
                   school: school // 新增传递school参数
               },
               success: function(html) {
                   $("#display").html(html).show();
               }
           });
       }
   });
});

如果不想让school输入框显示,可将其改为隐藏输入框:

<input type="hidden" id="school" value="<?php echo $_GET['sch']; ?>" />

2. 修正PHP代码,从POST获取school参数

原PHP代码依赖$_GET['sch'],但AJAX是POST请求,需改为从$_POST['school']取值,同时必须修复SQL注入风险(直接拼接变量到SQL语句中存在严重安全隐患):

<?php
if (isset($_POST['search']) && isset($_POST['school'])) {
    // 从POST请求中获取参数
    $school = $_POST['school'];
    $Name = $_POST['search'];
    
    // 使用预处理语句防止SQL注入
    $Query = "SELECT * FROM teachers WHERE fullName LIKE ? AND school_id=?";
    $stmt = $conn->prepare($Query);
    // 拼接LIKE查询的通配符
    $searchTerm = "%".$Name."%";
    // 绑定参数,"ss"表示两个参数均为字符串类型
    $stmt->bind_param("ss", $searchTerm, $school);
    $stmt->execute();
    $ExecQuery = $stmt->get_result();
    
    echo '<div class="list-group" style="text-align:left;">';
    while($Result = $ExecQuery->fetch_assoc()) {
?>
<a href="?id=<?php echo $Result['teacher_id']; ?>&sch=<?php echo $Result['school_id']; ?>" type="button" width="100%" onclick='fill("<?php echo $Result['fullName']; ?>")' class="list-group-item list-group-item-action">
<?php echo $Result['fullName']; ?>
</a>

<?php
    }
    $stmt->close();
}
$conn->close();
?>
</div>

3. 额外优化建议

  • 给school参数添加合法性验证,比如判断是否为数字或符合预期格式,过滤恶意参数。
  • 可直接将school值通过PHP输出到JS变量中,省去输入框的步骤:
var school = "<?php echo $_GET['sch']; ?>";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:55:28