如何用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
相关产品推荐
相关产品推荐

