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

