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

PHP Ajax下拉框联动报错:Undefined array key及无法填充问题求助

下拉框联动问题排查与解决

遇到的两个问题

  • 触发警告:Warning: Undefined array key "officeId" in C:\xampp\htdocs\scheduler\classes\Setting.php
  • assemblyid下拉框无法被填充,虽然浏览器网络面板显示数据已经加载完成

相关代码

index页面代码

<select class="custom-select" name="o_id" id="officeid" >
    <option value="0"></option>
    <?php  
    $hall_qry = $conn->query("SELECT * FROM `office_hall` WHERE o_id !=0  order by `office_name` asc");
            while($row = $hall_qry->fetch_assoc()): ?>
            <option value="<?php echo $row['o_id'] ?>"><?php echo $row['office_name'] ?></option> 
            <?php
            endwhile; 
            ?>
</select>
<br><br>
<select class="custom-select" name="assemblyid" id="assemblyid"> 
   <option value = ""></option>             
</select>

<script>
$(document).ready(function(){
    $('#officeid').change(function(){
        var officeid = $(this).val();
            $.ajax({
            url:_base_url_+"classes/Setting.php",
            method:"POST",
            data:{officeId:officeid},
            dataType:"text",
            success:function(data)
                {
                $('assemblyid').html(data);
                }
            });
    });
});
</script>

Setting.php代码

<?php
require_once('../config.php');

$hall_qry = $conn->query("SELECT * FROM assembly_hall WHERE o_id = '".$_POST['officeId']."'");
while($row = $hall_qry->fetch_assoc()): ?>
    
        <option value="<?php echo $row['id'] ?>"><?php echo $row['room_name'] ?></option>
        
        <?php
 endwhile; 
        ?>

问题解决方法

1. 消除Undefined array key警告

直接访问$_POST['officeId']会在参数未传入时触发警告,同时原代码存在SQL注入风险,修复后的Setting.php如下:

<?php
require_once('../config.php');

// 先判断参数是否存在,不存在则设为0
$officeId = isset($_POST['officeId']) ? $_POST['officeId'] : 0;
// 使用预处理语句防止SQL注入,更安全
$stmt = $conn->prepare("SELECT * FROM assembly_hall WHERE o_id = ?");
$stmt->bind_param("i", $officeId);
$stmt->execute();
$result = $stmt->get_result();

while($row = $result->fetch_assoc()): ?>
    <option value="<?php echo $row['id'] ?>"><?php echo $row['room_name'] ?></option>
<?php endwhile; 
// 关闭语句释放资源
$stmt->close();
?>

2. 修复下拉框无法填充问题

原JS代码中选择器错误,$('assemblyid')没有指定ID选择器前缀#,导致无法定位到目标下拉框,修复后的JS代码:

$(document).ready(function(){
    $('#officeid').change(function(){
        var officeid = $(this).val();
        // 当选择值为0时,清空下拉框避免旧数据残留
        if(officeid == 0){
            $('#assemblyid').html('<option value=""></option>');
            return;
        }
        $.ajax({
            url:_base_url_+"classes/Setting.php",
            method:"POST",
            data:{officeId:officeid},
            dataType:"text",
            success:function(data)
            {
                // 修正为ID选择器
                $('#assemblyid').html(data);
            }
        });
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:39:52