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


reading two form elements with same name

<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的字段的值?

在我的动作文件(test.php)在$_POST下,我只得到隐藏字段值。

是否有任何PHP设置,通过它我可以读取两个值?

我相信您希望将字段命名为:

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

如果有人想这样做,不想改变表单元素的名称,或者不能,仍然有一种方法可以做到-您可以直接解析$_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最终包含作为具有该名称的事物的数组发布的所有内容(如果只有一个具有给定名称的事物,它将是一个只有一个元素的数组,使用$mypost['element_name'][0]访问)。

对于查询字符串执行相同操作,将http_get_request_body()替换为$_SERVER['QUERY_STRING']

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

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

您可以使用以下命令访问它:

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

您可能需要重新考虑是否真的需要使用相同的名称

解决方案

1)尝试使用不同的名称为文本框和隐藏值2)使用如上所述的数组作为字段名3)这是不可能的,因为如果名称相同,值将被覆盖