如何将空数组从HTML表单发布提交到PHP

时间:2015-10-02 18:00:31

标签: php html arrays post

我刚刚意识到 - 我不知道如何将空数组从HTML表单发布到PHP。我可以POST大小为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'] === '',但是一个空数组([])?

具体用例是:我有一对多的表格,比如带有商品的购物车。表单由数据库中的现有“项目”填充,但可以添加或删除项目数组中的项目。项目数组已编制索引 - 如果添加了新项目,它们将保存到数据库中;如果项目被删除,它们将从数组中删除并从数据库中删除。

所有这些都运行正常 - 除非从表单中删除所有项目,在这种情况下不会传递“item”键。

我找到了非常好的解决方法,即在表单的顶部放置一个隐藏的输入“items”= null,所以即使没有项目也会传递密钥,然后在PHP中如果“项目” “关键是''我将它转换为空数组 - 所以一切正常。如果有可能POST一个空数组我理论上只是好奇。不知道为什么这被认为是不合适的 - 希望解释有所帮助。

至于为什么我要检查密钥的存在 - 我使用相同的通用代码处理来自不同表单的输入 - 因此,如果用户更改购物车上的地址而未指定项目,则项目应该不能因为没有“项目”键而被删除。

为了进一步澄清,我实际上并没有构建“购物车” - 我正在构建一个抽象框架,支持将一对多POST映射到Eloquent One-To-Many关系。 POST中具有空值的任何字段都将从Object中删除 - 但POST中的任何字段/键不会在基础DB中删除或修改。

重点是,我正在构建一个通用工具集 - 而不仅仅是尝试使用一个函数来处理一个表单。

1 个答案:

答案 0 :(得分:3)

不,你不能(虽然知道它似乎毫无意义)。

设置数组类型表单字段后,它会产生与此值相同的索引。在这种情况下,它是一个空字符串,意味着它的值是什么(''),只是因为它存在。 对于PHP,没有显式值意味着为空或空,这将被视为有效值。 Nothing 意味着没有被声明或定义,这不是空数组或空数组的数组。

<form method="POST" id="test" action="test.php">
	<input type='hidden' name='items[]' />
</form>
<input type="submit" value="Send" form="test">

print_r($_POST)的输出

Array
(
    [items] => Array
        (
            [0] => 
        )

)

如果您希望$_POST为空数组,请不要通过POST方法发送任何内容。超全局在运行时设置为空数组。玩得开心。 :)