2010-07-30 342 views
0

我有一个表格,并输出到POST这样的:

<?php print file_get_contents('php://input'); ?> 

%2Ffaults%2Ffault%5B1%5D%2F%40signal = gnc.gnc_in.ttag_sec & %2Ffaults%2Ffault%5B1%5D =增量&%2Ffaults%2Ffault%5B1%5D%2Fboolean%2F%40value = false &%2Ffaults%2Ffault%5B1%5D%2Fincrement%2F%40value = 6677 &%2Ffaults%2Ffault% 5B1%5D%2Fthreshold%2F%40condition = &%2Ffaults%2Ffault%5B1%5D%2Fthreshold%2F%40value = &%2Ffaults%2Ffault%5B1%5D%2Ftimestamp%2F%40value =

一旦urldecoded:

/faults/fault[1]/@signal=gnc.gnc_in.ttag_sec 
/faults/fault[1]=increment 
/faults/fault[1]/boolean/@value=false 
/faults/fault[1]/increment/@value=6677 
/faults/fault[1]/threshold/@condition= 
/faults/fault[1]/threshold/@value= 
/faults/fault[1]/timestamp/@value= 

然而,当我看到在$ _ POST,我得到的是:

<?php print_r($_POST); ?> 
Array ([/faults/fault] => Array ([1] =>)) 

正如你所看到的,一个公平位是从阵列丢失。任何想法为什么?

谢谢。

+1

这是因为这不是表单数据被张贴。 – Fosco 2010-07-30 19:43:49

+1

它是表单数据。我将它输入表单并点击提交。为什么它不是表格数据? – Peter 2010-07-30 20:01:04

回答

0

PHP在变量名称[1]上窒息,它似乎被解释为一个数组元素。

我不认为这些在HTML中是有效的字段名吗?

根据你想要做什么,我会摆脱[1]或把它放到每个变量名的末尾,这应该导致一些数组的第一个元素包含所需的值。

像这样的事情

faults/fault[1]/@signal=gnc.gnc_in.ttag_sec<br> 
/faults/fault[1]=increment&/faults/fault[1]/boolean/@value=false<br> 
/faults/fault/increment/@value[1]=6677<br> 
/faults/fault/threshold/@condition[1]=<br> 
/faults/fault/threshold/@value[1]=<br> 
/faults/fault/timestamp/@value[1]/=<br> 
+2

它们是有效的字段名称(不是ids,但名称很好),并且在名称中使用'[foo]'处理表单控件是正常的PHP表单解析行为。 – Quentin 2010-07-30 19:47:44

+1

不仅正常,而且对于例如'