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

PHP数组实现黑名单优化:修复checkout.php的两个校验问题

结账页面黑名单组合拦截优化方案

需求说明

在checkout.php中实现黑名单拦截逻辑,要求仅当用户提交的姓名和地址同时命中预设的黑名单组合时,才禁止结账,而非单独命中任一条件就拦截。

原代码存在的问题

  1. 姓名校验使用stripos做包含匹配,导致类似输入"Raju"时,因包含黑名单中的"raj"被误拦截,需要改为精确大小写匹配
  2. 当前逻辑为姓名或地址单独命中就触发拦截,不符合「姓名+地址组合匹配才拦截」的需求,且报错分字段提示,需改为统一错误提示

优化后的代码

// 定义黑名单组合:仅当姓名和地址同时匹配其中一组时,才拦截
$blacklist_combinations = [
    ['name' => 'raj', 'address' => '1, Vee Street'],
    ['name' => 'ken', 'address' => '2,BB Street'],
    ['name' => 'ber', 'address' => 'street2'],
    // 可继续添加更多需要拦截的姓名+地址组合
];

$is_blacklisted = false;
$user_name = $post['firstname'];
$user_address = $post['address'];

// 遍历黑名单组合,检查是否匹配
foreach ($blacklist_combinations as $combination) {
    // 精确大小写匹配姓名和地址
    if ($user_name === $combination['name'] && $user_address === $combination['address']) {
        $is_blacklisted = true;
        break; // 匹配到后直接跳出循环,无需继续检查
    }
}

// 如果命中黑名单组合,抛出统一错误
if ($is_blacklisted) {
    $error[$type . '_checkout'] = "Oops! Something went wrong. Contact the administrator";
}

优化说明

  • 组合式黑名单:将黑名单改为姓名+地址的组合数组,从根源上确保只有二者同时匹配才触发拦截,避免单独字段重复导致的误拦截
  • 精确匹配:使用严格相等运算符===做精确大小写匹配,彻底解决包含匹配带来的误拦截问题
  • 统一错误提示:仅在组合命中时抛出一个统一的错误提示,不再分字段报错,符合需求逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:33:10