HTML表单与PHP机制

时间:2013-10-03 15:22:34

标签: php html

我试图了解HTML表单发送到PHP脚本时发生的事情背后的机制,最重要的是$ _GET和$ _POST内部的实际情况。我会尽力解释我不理解的事情。

到目前为止我对它的理解: 提交HTML表单时,会向服务器发出HTTP请求,并且HTML表单中的name =“value”对的 Value部分将被插入到超级全局PHP数组中$ _GET或$ _POST取决于用于发送数据的方法。正确?

我的问题:

  1. 如果我们给出一个输入元素:name =“test []”并使用post方法发送它,那么根据上面的信息,STRING“test []”被发送到$ _POST。那么$ _POST包含一个值为“test []”的字符串,还是包含名为test的数组?我们将数组放在数组中吗?
  2. 如果输入名称=“name”,如果只将字符串“name”发送到服务器,它如何选择用户键入该字段的值。

2 个答案:

答案 0 :(得分:1)

name[]这样的名称会扩展为数组,但可能不像您期望的那样。如果你有:

<input type="checkbox" name="foo[]" value="bar" />
<input type="checkbox" name="foo[]" value="ipsum" />

如果您选中两个复选框。你会得到:

array(
    "foo" => array("bar", "ipsum")
)

如果您只检查第二个,您将获得:

array(
    "foo" => array("ipsum")
)

如果你没有检查,你会得到:

array()

(所以即使密钥foo也不存在)。

对于文本输入,它只会发送一个空值,如:

array(
    "foo" => ""
)

但是对于复选框,它是不同的。

答案 1 :(得分:0)

浏览器会从表单中发送所有值,它看起来像name1=val1&name2=val2(由&分隔的名称和值对。)

然后它会解析它(你可以使用parse_str()进行测试)并放在$_POST$_GET数组中(取决于表单方法)。在此步骤中,所有[]次出现都将扩展为数组。

是的,您可以将数组放入数组中。你也可以把下一个数组放到那个数组中:)它叫做multidimensional array