HTML复选框元素只有在选中后才会提交?

Car*_*ers 5 html php checkbox

我试图在现有网站上工作,我发现一个错误,但我不知道为什么它是一个bug或如何解决它.

该网站基本上列出了一些城市租赁的商业物业.有一个类从数据库中抓取列表并从每个列表中创建一个对象.在每个对象中是与该属性相关联的图像阵列.

当用户编辑列表,他们得到它具有图像列表编辑页面,而"删除"复选框旁边.该复选框都具有相同的名字,这样当他们提交回服务器,应用程序获取图像的阵列被删除.

应该发生的是,应用程序具有此开/关值数组(其中on = delete),并且数组中每个值的索引对应于列表对象中的图像的索引 - 当其中一个如果值为"on",则从文件系统中删除与该"on"值对应的images阵列中的文件名,并从数据库中删除该图像.

但是,当提交表单时,应用程序将获得仅包含已选中复选框的0索引数组.因此,如果我设置三个任意图像进行删除,应用程序将获得

Array {
   [0] => "on",
   [1] => "on",
   [2] => "on"
}

这显然不起作用,无论设置哪个复选框,列表中的前3个图像都将被删除.

我怎样才能解决这个问题?我想避免命名每个复选框(delete_1,delete_2,delete_3等)作为系统已经建有具有相同名称的所有复选框工作.有没有办法可以强制所有复选框都以"开"或"关"提交?

zer*_*kms 6

没有办法强迫,但你可以在复选框之前添加一个隐藏的右边同名和所需的值:

<input type="hidden" name="delete[42]" value="off" />
<input type="checkbox" name="delete[42]" value="on" />
Run Code Online (Sandbox Code Playgroud)

  • 对不起,我试图避免每个复选框都有不同的名称.目前它们都被命名为`delete`,应用程序将它们作为数组接收.我认为这种技术并不适用于所有具有相同名称的技术 (2认同)

Fre*_*urk 5

不,您不能强制提交未选中的复选框,但您可以为它们提供唯一值(而不是所有的"on")以确定在不更改名称的情况下检查哪些复选框.

  • @Steve我想避免以不同的方式命名它们,因为这将不得不改变后端的行为.我没有意识到你可以提交除"开"或"关"以外的值 - 这需要很少的改变 (2认同)
  • @zerkms你能澄清为什么这是一个可怕的答案吗?如果有的话,我想知道垮台 (2认同)
  • @fred @zerk我确实要求强制他们"开启"或"关闭"而且zerkms确实回答了这个问题,所以我对他进行了投票.事实上,这可以更好地解决我的问题,而且似乎是更好的方法. (2认同)