读取两个具有相同名称的表单元素

时间:2011-04-13 03:11:57

标签: php

<form action="test.php" method="post">
Name: <input type="text" name="fname" />
<input type="hidden" name="fname"  value="test" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

如何读取名为fname的两个字段的值?

$_POST下的我的操作文件(test.php)中,我只获取隐藏的字段值。

是否有任何PHP设置可以读取这两个值?

4 个答案:

答案 0 :(得分:10)

我相信你想把字段命名为:

Name: <input type="text" name="fname[]" />
<input type="hidden" name="fname[]" value="test" />

让PHP将它们理解为数组。

答案 1 :(得分:4)

如果有人想要这样做并且不想更改表单元素的名称,或者不能更改表单元素的名称,仍然有一种方法可以完成 - 你可以解析$ _SERVER ['QUERY_STRING']或http_get_request_body()值直接。

这就像是

$vals=explode('&',http_get_request_body());
$mypost=Array();
foreach ($vals as $val) {
  list($key,$v)=explode('=',$val,2);
  $v=urldecode($v); 
  $key=urldecode($key);
  if ($mypost[$key]) $mypost[$key][]=$v;
  else $mypost[$key]=Array($v);
}

这种方式$mypost最终包含作为具有该名称的事物数组发布的所有内容(如果只有一个具有给定名称的内容,则它将是仅包含一个元素的数组,使用{{ 1}})。

要对查询字符串执行相同操作,请将$mypost['element_name'][0]替换为http_get_request_body()

答案 2 :(得分:2)

如果要传递两个具有相同名称的表单输入,则需要将它们设为数组。例如:

<input type="text" name="fname[]" />
<input type="hidden" name="fname[]" value="test" />

然后,您可以使用以下方式访问它:

$_POST['fname'][0]
$_POST['fname'][1]

您可能想重新考虑一下确实是否需要使用相同的名称。

答案 3 :(得分:0)

解决方案

1)尝试对文本框和隐藏值使用不同的名称 2)使用上面提到的数组作为字段名称 3)如果名称相同,则不可能覆盖值

相关问题