今天碰到个小问题,有如下表单:
<form method="post" id="form" name="form" action="">
<input type="text" id="a1" name="a[]" value="a1" /> <input type="checkbox" id="c1" name="c[]" value="c1" />
<input type="text" id="a2" name="a[]" value="a2" /> <input type="checkbox" id="c2" name="c[]" value="c2" />
<input type="text" id="a3" name="a[]" value="a3" /> <input type="checkbox" id="c3" name="c[]" value="c3" />
<input type="text" id="a4" name="a[]" value="a4" /> <input type="checkbox" id="c4" name="c[]" value="c4" />
<input type="text" id="a5" name="a[]" value="a5" /> <input type="checkbox" id="c5" name="c[]" value="c5" />
<input type="text" id="a6" name="a[]" value="a6" /> <input type="checkbox" id="c6" name="c[]" value="c6" />
<input type="submit" id="submit" name="submit" value="提交" />
</form>
提交并插入数据库,数据表中有字段a和c,a和c值要求一一对应,我们用PHP在接收数据,并插入数据库:
$a = $_POST['a'];
$c = $_POST['c'];
for ($i = 0;$i < count($a) ;$i++) {
$a_i = $a[$i];
$c_i = $c[$i];
$conn->query("INSERT INTO table1(a,c) VALUES('$a_i','$c_i')");
}
运行上述代码,发现a和c的值未一一对应,如果checkbox未选中,它的值是不会通过post提交的,会缺失,也就造成了无法一一对应,那要怎么办呢?在checkbox控件前面多加一个隐藏域
<input type="text" id="a1" name="a[]" value="a1" /> <input type="hidden" id="h1" name="h[]" value="" /><input type="checkbox" id="c1" name="c[]" value="c1" />
<input type="text" id="a2" name="a[]" value="a2" /> <input type="hidden" id="h2" name="h[]" value="" /><input type="checkbox" id="c2" name="c[]" value="c2" />
.
.
.
然后对checkbox控件绑定一个click事件(我这里用的是jquery3.3),如下:
$(document).on('click', 'input[name="c[]"]', function () {
var _this = $(this);
if (_this.prop('checked')) {
_this.prev().val(_this.val());
}
else {
_this.prev().val('');
}
//console.log(_this.prev().val())
});
然后PHP后台接收:
$a = $_POST['a'];
$h = $_POST['h'];
for ($i = 0;$i < count($a) ;$i++) {
$a_i = $a[$i];
$c_i = $h[$i];
$conn->query("INSERT INTO table1(a,c) VALUES('$a_i','$c_i')");
}