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

如何用PHP/JS校验数组不含重复数字和0后再执行MySQL插入

实现方案

建议同时实现后端PHP校验和前端JS校验:后端校验是必须的,可防止前端校验被绕过;前端校验用于优化用户体验,无需等待后端返回即可提示错误。

PHP后端校验(必选)

在原有循环插入逻辑之前加入校验代码即可,实现非常简单:

<?php
// 先获取提交的number数组,过滤空值与非数字值
$numberArr = array_filter($_POST['number'] ?? [], function($val) {
    return is_numeric($val) && trim($val) !== '';
});

// 校验规则1:不能包含0
if (in_array(0, $numberArr)) {
    die("Number字段需唯一");
}

// 校验规则2:不能有重复值:去重后数组长度与原长度对比即可
if (count(array_unique($numberArr)) !== count($numberArr)) {
    die("Number字段需唯一");
}

// 校验通过后再执行原有插入逻辑
foreach ($_POST['number'] as $key => $val) 
{
    $number                 = $_POST['number'][$key];
    $name                   = $_POST['name'][$key];
    $description            = $_POST['description'][$key];
    
    if (!empty($number)) 
    {
        // 注:原有拼接SQL的写法存在SQL注入风险,建议改用预处理语句,示例如下
        // $stmt = $connect->prepare("INSERT INTO TEST SET date=NOW(), id=?, name=?, description=?");
        // $stmt->bind_param("iss", $number, $name, $description);
        // $stmt->execute();
        $query = "INSERT INTO TEST SET date=NOW(), id='$number', name='$name', description='$description'";
        $insert = $connect->query($query) or die($connect->error . __LINE__);
    }

}
?>

JavaScript前端校验(体验优化)

监听表单提交事件,提交前先校验字段:

// 替换为你实际的表单选择器
document.querySelector('form').addEventListener('submit', function(e) {
    // 收集所有number字段的输入值,转为整数
    const numberList = Array.from(document.querySelectorAll('input[name="number[]"]'))
        .map(input => parseInt(input.value.trim(), 10))
        .filter(val => !isNaN(val)); // 过滤非数字输入

    // 校验是否包含0
    if (numberList.includes(0)) {
        alert('Number字段需唯一');
        e.preventDefault(); // 阻止表单提交
        return false;
    }

    // 校验是否有重复值:用Set去重后对比长度
    if (new Set(numberList).size !== numberList.length) {
        alert('Number字段需唯一');
        e.preventDefault();
        return false;
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:01