我刚刚意识到一个问题——我不知道如何将一个空数组从HTML表单提交到PHP。我可以提交大小为1或更大的数组,但是否有办法提交一个空数组呢?我的意思是,你可以有:
<form>
<input type='hidden' name='items[0]' value='Value Item 1' />
<input type='hidden' name='items[1]' value='Value Item 2' />
</form>
它返回大小为2的数组:
$_POST['items'] === ["Value Item 1", "Value Item 2"]
,但是否有办法将空数组作为$_POST键的值传递?也就是说,我知道可以使$POST['items'] === ''
,但是一个空数组([]
)呢?具体用例是:我有一个一对多的表单,比如购物车中的商品。表单由数据库中现有的“商品”填充,但可以添加或删除商品,这些商品在商品数组中。商品数组是有索引的 - 如果添加了新的商品,则将其保存到数据库;如果删除商品,则从数组中删除并从数据库中删除。
所有这些都很好地工作 - 除非从表单中删除了所有商品,在这种情况下不会传递任何“商品”键。
我找到了完美的解决方法,即在表单顶部放置一个隐藏输入“items”= null,因此即使没有商品,也会传递该键,然后在PHP中,如果“items”键是'',则将其转换为空数组 - 所有工作正常。我只是好奇理论上是否可以POST一个空数组。不知道为什么这被认为是不恰当的 - 希望解释有所帮助。
至于为什么要检查键的存在性 - 我使用相同的通用代码来处理来自不同表单的输入 - 因此,如果用户在购物车上更改地址而没有指定商品,则不应仅因为没有“商品”键而删除商品。
进一步澄清,我实际上并没有构建一个“购物车” - 我正在构建一个抽象框架,支持将一对多POST映射到Eloquent一对多关系。 POST中的任何空值字段都将从对象中删除 - 但是,在POST中不存在的任何字段/键都不会从基础数据库中删除或修改。
重点是,我正在构建一个通用工具集 - 不仅仅是试图使一个函数处理一个表单。