使用Ajax在PHP中传递两个参数调用函数获取学生姓名失败的问题求助
使用Ajax在PHP中传递两个参数调用函数获取学生姓名失败的问题求助
看起来你遇到的核心问题是没有在调用getStuName1函数时传递两个必要的参数,另外还有几处小细节可能导致功能异常,我帮你梳理并修正一下:
1. 函数调用时未传递两个参数
你的两个<select>标签的onChange事件里,都只传递了当前控件的value,但函数需要yr和classname两个参数。你需要在触发事件时,同时获取另一个select的值并传递进去:
修改后的年份选择框:
<select style="font-size: 18px;" name="yr" onChange="getStuName1(this.value, document.getElementById('class-list').value);"> <option value="2021-2022">2021-2022</option> <option value="2022-2023">2022-2023</option> <option value="2023-2024">2023-2024</option> <option value="2024-2025">2024-2025</option> <option value="2025-2026">2025-2026</option> <option value="2026-2027">2026-2027</option> </select>
修改后的班级选择框:
<select style="font-size: 18px;" name="classname" id="class-list" class="demoInputBox" onChange="getStuName1(document.querySelector('select[name=yr]').value, this.value);"> <option value="" selected>please select</option> <?php $sql="SELECT classname FROM class"; $class_result = mysqli_query($db_link,$sql); while($rs = mysqli_fetch_array($class_result, MYSQLI_ASSOC)) { ?> <option value="<?php echo $rs["classname"]; ?>"><?php echo $rs["classname"]; ?></option> <?php } ?> </select>
2. Ajax回调外访问data变量的错误
你在$.ajax外面写了alert(data);,但data是success回调函数的局部变量,在外部无法访问,这会导致控制台报错。如果需要查看返回的数据,应该把alert放到success回调里面:
<script language="javascript"> function getStuName1(val, val1) { // 同时判断两个参数都不为空,避免无效请求 if(val!='' && val1!=''){ $.ajax({ type: "POST", url: "get_stuname1.php", data:'yr='+val+'&classname='+val1, success: function(data){ $("#stu-list1").html(data); alert(data); // 移到回调内部才能正确访问data } }); }else{ // 这里注意原代码操作的是stuname,但目标容器是stu-list1,统一调整为目标容器 $("#stu-list1").html('<option value="">Please select</option>'); } } //end function </script>
3. PHP代码的SQL注入风险(重要)
你的PHP代码直接把$_POST参数拼接到SQL里,存在严重的SQL注入风险,建议改用预处理语句执行查询,同时对输出内容做转义避免XSS攻击:
<?php require_once("connMysql.php"); // 使用预处理语句防止SQL注入 $stmt = $db_link->prepare("SELECT * FROM stu_hist WHERE enabled='1' AND sch_yr = ? AND classname = ? ORDER BY classno"); $stmt->bind_param("ss", $_POST['yr'], $_POST['classname']); $stmt->execute(); $stu_result = $stmt->get_result(); while($rs = mysqli_fetch_array($stu_result, MYSQLI_ASSOC)) { ?> <option value="<?php echo htmlspecialchars($rs["stu_name"]); ?>"> <?php echo htmlspecialchars($rs["stu_name"]); ?></option> <?php } $stmt->close(); ?>
按照上面的修改,你应该就能正常传递两个参数并获取到学生姓名列表了。
备注:内容来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

