You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过self.location传递多变量?下拉框重载传参问题解决

问题分析与解决方案

你的核心问题出在JavaScript的URL参数拼接错误,还有PHP代码里的一处变量拼写失误,我来一步步帮你修复:

1. 修复JavaScript中的URL参数分隔符

在你的reload函数里,URL拼接用了&——这是HTML的转义字符,但在JavaScript字符串中,应该直接使用&作为参数分隔符。如果用&,会导致URL变成类似dd-mysqli.php?cat=1&subcat=2,PHP解析时会把第二个参数识别为amp;subcat,自然拿不到$_GET['subcat']的值。

修改后的reload函数:

function reload(form) {
    var val = form.cat.options[form.cat.options.selectedIndex].value;
    var val2 = form.subcat.options[form.subcat.options.selectedIndex].value;
    // 把 & 替换成 &
    self.location='dd-mysqli.php?cat=' + val + '&subcat=' + val2;
}

2. 修复PHP中的变量拼写错误

在渲染subcat下拉框的选中状态时,你写了@subcat,这里漏掉了$符号,应该是@$subcat,否则PHP会把它当作常量处理,导致无法正确匹配选中项。

修改这部分代码:

// 原代码
if($row1['id']==@subcat){
// 修改为
if($row1['id']==@$subcat){

3. 额外优化建议

  • 去掉@错误抑制符:@会掩盖错误,不利于调试,建议你在开发阶段替换成更安全的写法,比如:
// 替换原有的@$cat和@$subcat
$cat = isset($_GET['cat']) ? $_GET['cat'] : '';
$subcat = isset($_GET['subcat']) ? $_GET['subcat'] : '';
  • 新增subcat的合法性验证:和cat一样,对$subcat做数字校验,避免非法数据传入:
if(strlen($subcat) > 0 and !is_numeric($subcat)){
    echo "Data Error";
    exit;
}

测试验证

完成以上修改后,当你选择cat或者subcat时,URL会正确拼接成dd-mysqli.php?cat=xxx&subcat=yyy,PHP端就能通过$_GET['cat']$_GET['subcat']同时获取到两个参数的值了。

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

火山引擎 最新活动