【发布时间】:2014-08-22 14:59:55
【问题描述】:
在将带有复选框的大型表单有效地更新到数据库时遇到问题。
仅作说明:
<form action="save.php" method="post">
<?php
for {$i=0;$i<1000;$i++) {
echo '<input type="checkbox" name="product-' . $i . '">';
}
<input type="submit">
</form>
<?php
$posted_values = $_POST;
foreach($posted_values as $key=>$p) {
$chkbox = $posted_values[$p];
$update = 0;
if ($chkbox == 'on') {
$update = 1;
}
//Do some "expensive" checking for each posted value
$save_dbarray[$key] = $update;
}
//Do the actual updating to databased based on array `save_dbarray`
有什么方法可以将 changed 复选框添加到 save_dbarray 中? (只有选中的框会发布到 $_POST,但如果它们已更改,我希望未选中的值也成为更新的一部分)我必须对每个发布的值进行一些昂贵的检查,因此
更新
我不想遍历所有 1000 个复选框。我只想遍历更改的(从选中到未选中或从未选中到选中)复选框,但在上述情况下 $posted_values 只会返回具有选中值的复选框(从未选中到选中)
<?php
//I DONT want to have to do like this:
for {$i=0;$i<1000;$i++) {
$prodnr = 'product-' . $i;
$chkbox = $_POST[$prodnr];
$update = 0;
if ($chkbox == 'on') {
$update = 1;
}
//Do some "expensive" checking for every value
$save_dbarray[$key] = $update;
}
//Do the actual updating to databased based on array `save_dbarray`
【问题讨论】:
-
你能更清楚地解释你想要的结果吗?
-
你可以试试javascript/jquery,比如
document.getElementById('product').checked。也将您的复选框名称作为数组 (name='product[]') 可能更容易 -
@arunrc - javascript/jquery 与我的问题无关。是的,当然我可以使用像 product[] 这样的数组,但我的问题只是为了说明我遇到的问题
-
只是一个想法。将当前检查的详细信息保存在一个数组中。然后在更新后与数组进行比较以获取更新的复选框。但问题是您想遍历所有复选框以查找更新。