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

PHP如何对比$_POST数组中同序号后缀的配对新旧手机号字段值

方案1:修改表单命名规则(推荐)

直接把手机号相关输入框的name改成数组格式,不用手动拼接数字后缀,后续处理逻辑会简洁很多,天然适配任意数量的手机号字段:
原表单输出代码修改为:

echo '<td><input type="text" name="telefoonnummer[' . $num . ']" value="' . htmlspecialchars($subrow[$db_column]) . '" required></td>';
echo '<input type="hidden" name="oud_telnr[' . $num . ']" value="' . htmlspecialchars($subrow[$db_column]) . '">'; 

表单提交后,$_POST['telefoonnummer']和$_POST['oud_telnr']本身就是序号对应的键值对数组,直接遍历即可:

// 遍历所有配对的手机号
foreach ($_POST['telefoonnummer'] as $num => $new_tel) {
    $old_tel = $_POST['oud_telnr'][$num] ?? '';
    // 仅新旧号码不一致时执行操作
    if ($new_tel !== $old_tel) {
        // 此处写入你的删旧插新逻辑,注意使用预处理语句防SQL注入
        // 示例伪代码:
        // $del_stmt = $pdo->prepare("DELETE FROM 手机号表 WHERE telefoonnummer = ? AND lidnummer = ?");
        // $del_stmt->execute([$old_tel, $_POST['lidnummer']]);
        // $insert_stmt = $pdo->prepare("INSERT INTO 手机号表 (lidnummer, telefoonnummer) VALUES (?, ?)");
        // $insert_stmt->execute([$_POST['lidnummer'], $new_tel]);
    }
}

该方案维护成本最低,也不会出现序号匹配错误的问题。


方案2:不修改现有表单,直接解析$_POST键名

如果不方便调整现有表单结构,可以通过正则匹配提取所有手机号配对的序号,再做对比:

$tel_pairs = [];
// 遍历所有POST参数,提取手机号配对关系
foreach ($_POST as $key => $value) {
    if (preg_match('/^telefoonnummer(\d+)$/', $key, $matches)) {
        $num = $matches[1];
        $tel_pairs[$num]['new'] = $value;
        $tel_pairs[$num]['old'] = $_POST["oud-telnr{$num}"] ?? '';
    }
}

// 遍历配对做校验
foreach ($tel_pairs as $pair) {
    if ($pair['new'] !== $pair['old']) {
        // 执行删旧插新逻辑,逻辑同方案1
    }
}

额外注意事项

  • 所有数据库操作必须使用预处理语句做参数绑定,避免SQL注入风险
  • 建议增加新手机号重复校验逻辑,由于你的手机号是主键,插入重复值会触发数据库报错
  • 如果后续要支持用户删除手机号,可以补充逻辑:如果新手机号字段为空,仅执行删除旧号码的操作即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:54:08