2012-07-12 34 views
5

不久前,我问了一个关于在页面中多次使用相同的输入名称/隐藏名称的问题,并得到了一个答案因为它建议我不得不使用在括号后面加上括号,如partno[]有没有办法在PHP中捕获所有使用POST方法传递的信息

我不能在我的表单中使用它,因为它正在发送的购物车只识别某些字段名称,如:partno,item,price,qty等(我不能使用partno[], item[]等)所以我真的需要能够多次使用每个相同字段名称的所有值。当我使用方法GET时,它将显示地址栏中使用的每个字段名称的所有值。您可以尝试this并提交表单。看看地址栏中的网址。

我的新问题是:有没有在PHP中捕获所有使用POST方法传递的信息的方法? (就像上面例子中的地址栏中显示的内容,但是使用POST而不是GET)。如果我能找出一种方法来捕捉它,我可以解析它。

感谢, 凯利

+0

只需在表单中使用'method =“post”'? – cweinberger 2012-07-12 20:32:20

+0

@harakiri op使用相同的参数多次,5x PartNo等,你可以在他的示例url中看到。这不适用于获取或发布。您仍然需要每个输入的唯一名称。 – 32bitfloat 2012-07-12 20:37:55

+1

这个限制和'name =“括号[]”'语法完全是一个PHP事物,具有多个具有相同名称的输入是完全合法的。 – 2012-07-12 20:52:18

回答

2

你只需要使用$_POST,而不是$_GET

所以,如果你是通过以下方式使用get:

?something=somevalue 

而且随着$_GET['something']被捕获它,你会现在使用$_POST['something']

+0

我相信OP的问题的重点在于访问具有相同名称的字段的值,而不会使用'name ='items []“'括号表示法,从post/get切换不会有所作为。 OP已经在问怎么用'POST'来做到这一点,所以我看不到这个答案是什么。我知道倾向于回答问题标题,而不是阅读整个问题。 – 2012-07-12 20:44:26

+0

我的回答没有使用'names =“items []”'格式。你显然不完全理解他所尝试的原始方法,因为它与我提供的答案完全不同。我很肯定他是我第一次投票赞成我的回答,所以是的。 – Valjas 2012-07-13 04:05:35

+0

仔细重读这个问题(同样,新用户无法登录,直到他们达到15位代表,并从配置文件中看到0票)。 – 2012-07-13 10:30:56

1

由于POST中的PHP只不过是一个数组,所以只需对其进行迭代即可。

foreach($_POST as $k => $v) { 
    echo($k . ': '. $v . '<br>'); 
} 
+0

这样做的问题是,在创建'$ _POST'时,具有相同名称的多个输入将覆盖前一个输入,除非您使用'OP'表示他们不能执行的'bracketed []'名称。 – 2012-07-12 20:45:44

-1

无法POST 2与字符串名称相同的输入。您应该修改购物车以将数组修改为字符串。

如果您使用GET,您可以检出parse_url()函数。

+0

它很可能多次使用参数名称,只有php解析请求的方式不允许您使用'$ _POST'访问多个这样的参数,因此您必须自己解析请求 – mata 2012-07-12 20:48:40

2

您可以直接从输入流得到玷污数据:

file_get_contents('php://input'); 

所以,如果你有这样的事情:

<input name="type" value="val1"> 
<input name="type" value="val2"> 
<input name="type" value="val3"> 

你会得到一个字符串是这样的:

type=val1&type=val2&type=val3 

然后,您可以将此字符串解析为数组并创建您自己的“原始数据”。

http://php.net/manual/en/wrappers.php.php

PHP://输入是读取专用流,允许你读取原始数据 从请求体。在POST请求的情况下,最好是 使用php://输入而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令,因此它不是 。而且,对于默认情况下未填充 $ HTTP_RAW_POST_DATA的情况,这是潜在的 较少的内存密集型替代方式,以激活 always_populate_raw_post_data。php://输入不适用于 enctype =“multipart/form-data”。

+0

我看着php://但我不确定如何实现它。用你提供的,我能解决我的问题......非常感谢。 Kelly – user1519293 2012-07-13 01:06:49

+0

就像这样:'$ my_data = file_get_contents('php:// input');',然后解析'$ my_data'来获得你的变量(你表示你可以处理那个部分,如果没有的话可以随意问)。 – 2012-07-13 01:08:18

0

如果您想查看所有$ _POST发送的是var_dump($ _ POST)还是echo print_r($ _ POST)。这将显示所有字段名称和数据,即使字段名称包含数组,如您的partno []。

相关问题