我试图在现有网站上工作,我发现一个错误,但我不知道为什么它是一个bug或如何解决它.
该网站基本上列出了一些城市租赁的商业物业.有一个类从数据库中抓取列表并从每个列表中创建一个对象.在每个对象中是与该属性相关联的图像阵列.
当用户编辑列表,他们得到它具有图像列表编辑页面,而"删除"复选框旁边.该复选框都具有相同的名字,这样当他们提交回服务器,应用程序获取图像的阵列被删除.
应该发生的是,应用程序具有此开/关值数组(其中on = delete),并且数组中每个值的索引对应于列表对象中的图像的索引 - 当其中一个如果值为"on",则从文件系统中删除与该"on"值对应的images阵列中的文件名,并从数据库中删除该图像.
但是,当提交表单时,应用程序将获得仅包含已选中复选框的0索引数组.因此,如果我设置三个任意图像进行删除,应用程序将获得
Array {
[0] => "on",
[1] => "on",
[2] => "on"
}
这显然不起作用,无论设置哪个复选框,列表中的前3个图像都将被删除.
我怎样才能解决这个问题?我想避免命名每个复选框(delete_1,delete_2,delete_3等)作为系统已经建有具有相同名称的所有复选框工作.有没有办法可以强制所有复选框都以"开"或"关"提交?
没有办法强迫,但你可以在复选框之前添加一个隐藏的右边同名和所需的值:
<input type="hidden" name="delete[42]" value="off" />
<input type="checkbox" name="delete[42]" value="on" />
Run Code Online (Sandbox Code Playgroud)
不,您不能强制提交未选中的复选框,但您可以为它们提供唯一值(而不是所有的"on")以确定在不更改名称的情况下检查哪些复选框.