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

PHP switch/条件判断总执行最后分支,选中对应选项不生效如何解决

问题原因

你的条件判断逻辑被写在了遍历套餐选项的foreach循环内部,每次循环生成一个option的同时,都会执行一次POST提交校验。循环执行到最后一个套餐时,变量$package_id已经被覆盖为最后一个套餐的ID,此时触发的判断逻辑自然只会匹配最后一个套餐的分支,和你实际提交的选中值完全无关。

另外还有一个隐性问题:wp_redirect执行后没有加exit终止代码执行,即使跳转逻辑触发,后续代码依然会继续运行,可能导致跳转失效。

修复方案

将提交校验逻辑从foreach循环中移出,单独放到页面逻辑的最顶部,直接读取用户提交的auto-listings-package参数作为判断依据,不要使用循环中的$package_id变量。

修改后的代码示例
<?php
// 提交校验逻辑放页面最顶部,不要放在option渲染的循环里
if(isset($_POST['auto-listings-purchase'])) {
    // 直接读取用户提交的选中套餐ID
    $selected_package_id = $_POST['auto-listings-package'];
    if($selected_package_id == '2823') {
        wp_redirect('https://www.google.com');
        exit; // 跳转后必须终止执行
    } elseif ($selected_package_id == '2633') {
        wp_redirect('https://www.helemaaldebom.nl');
        exit;
    } else {
        echo 'Something went wrong. Please contact our staff.';
        exit;
    }
}
?>

<!-- 下拉框渲染逻辑,只做视图渲染,不处理提交判断 -->
<select name='auto-listings-package' id='auto-listings-package' class='auto-listings-package'>
    <?php foreach ( $packages as $package_id => $package ) : ?>
        <option value="<?php echo esc_attr( $package_id ); ?>" data-price="<?php echo esc_attr( auto_listings_raw_price( $package['price'] ) ); ?>"><?php echo wp_kses_post( $package['label'] ) ?></option>
    <?php endforeach; ?>
</select>
注意事项
  • 请确认你的下拉框外层包裹了form标签,且提交按钮name属性为auto-listings-purchase,否则POST参数不会正常提交。
  • 如果有安全校验需求,建议对提交的$selected_package_id做合法性校验,避免传入恶意参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:03