我们有一个编辑表单:我们使用可变数量的复选框填充它(这完全取决于我们在即将编辑的文章中有多少张图片)。
所有复选框均默认为“已选中”,如果没有任何关联,则相关数据(本例中为我们的图片)保持不变。
如果我们取消选中一个,我们实际上不想将图片保留在我们编辑的帖子中并将其从我们的数据库中删除。
我知道未经检查的复选框不会发布,而且我有一个解决方法:
在复选框之前放置一个具有相同名称的隐藏字段。这样,未选中复选框仍然可以发布隐藏的输入。
但我有这种情况:
/*i'm querying the database to load all the article's data and I check if */
/* there's any picture so I build, with a while loop, an associated checkbox*/
<input type="checkbox" name="picture[]" value="$row['pic_id]"/>$row['pic_name']
当我提交编辑表单时,我会检查数组图片中是否有任何数据,如果是肯定的,我想从数据库中删除它。
现在,如果我只是在每个复选框的顶部添加一个隐藏字段(所以同名和相同的值...因为它是我需要在下一个查询中使用的值)我陷入了问题:
如何区分发布的数据是来自实际的复选框(如果最终检查)还是来自隐藏的输入?
答案 0 :(得分:3)
为什么不在服务器端检查它?
你知道原始列表是什么,你有新的列表。那些不在新列表中,但在原始列表中的那些应该被删除。
所以你不需要添加任何javascript黑客或隐藏的输入。
答案 1 :(得分:1)
在服务器端,您可以使用以下方法:
$array_of_ids_to_delete=array_diff($array_with_all_ids, $posted_ids);
$array_with_all_ids
必须已经可用,因为我猜您用它来输出所有复选框。 $posted_ids
表示您的图片[]数组。
之后,您只需在foreach
上运行$array_of_ids_to_delete
并删除这些图片。