Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 读取具有相同名称的两个表单元素_Php - Fatal编程技术网

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

Php 读取具有相同名称的两个表单元素,php,Php,如何读取名为fname的两个字段的值 在我的$u POST下的action filetest.php上,我只得到了隐藏字段的值 是否有任何PHP设置可以读取这两个值?如果要传递两个具有相同名称的表单输入,需要将它们设置为数组。例如: <form action="test.php" method="post"> Name: <input type="text" name="fname" /> <input type="hidden" name="fname" val

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

在我的$u POST下的action filetest.php上,我只得到了隐藏字段的值


是否有任何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>

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

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

$_POST['fname'][0]
$_POST['fname'][1]
使PHP将它们理解为一个数组。

解决方案是

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

如果有人想这样做,并且不想更改表单元素的名称,或者不能,那么仍然有一种方法可以做到——您可以直接解析$\u服务器['QUERY\u STRING']或http\u get\u request\u正文值

大概是

Name: <input type="text" name="fname[]" />
<input type="hidden" name="fname[]" value="test" />
这样,$mypost就包含了作为一个具有该名称的事物数组发布的所有内容。如果只有一个具有给定名称的事物,那么它将是一个只有一个元素的数组,使用$mypost['element_name'][0]访问


要对查询字符串执行相同的操作,请将http_get_request_body替换为$_SERVER['query_STRING']

与@scunliffe的响应相同?我实际上先发布了它,然后对其进行了编辑,这样它看起来就像我在发布之后发布的一样。此外,他没有提到如何在PHP中实际访问值:实际上,我发帖的目的是想知道我们在PHP.ini中是否有一些设置可以帮助我实现我想要的。。。。我读到他们在PHP.ini中的一些设置。。。但我不清楚。。。任何帮助都将不胜感激。。。感谢您最初的帮助…实际上我发帖的目的是想知道我们是否在PHP.ini中有一些设置可以帮助我实现我想要的。。。。我读到他们在PHP.ini中的一些设置。。。但我不清楚。。。任何帮助都将不胜感激。。。谢谢你最初的帮助…我来不了。。它是动态生成的。。。可以同时获取值或文本字段值。。。这可以通过PHP.ini中的变量顺序或其他类似设置来实现吗。。。。提前谢谢我想这取决于你的需要。如果有时有1个字段,有时有n个字段具有相同的名称,您仍然可以将其设置为数组。不要忘记数组的长度可以是1-为迟来的回复道歉。。。毫无疑问,通过阵列是可以实现的。。。但是PHP.ini设置在这方面没有帮助吗?可能有一个PHP-ini设置,但我不知道。更重要的是,我不确定你希望实现什么?每个参数将具有0,1或更多值。如果您知道一个字段可以有多个实例,请相应地命名该字段,并在提交页面时循环使用这些值。为了将其与更普通的接口联系起来,您可以通过在上面的代码之后执行任何操作,将其设为多个输入命名为[]。。。foreach$mypost as$a=>$b{如果count$b>1$\u POST[$a]=$b;}-通过这种方式,您将有$\u POST以正常方式对单个元素进行操作,但在存在多个元素时作为数组。但是,如果您希望有多个元素,但计数恰好为1,那么这将导致代码混乱,需要将其视为特例。
Name: <input type="text" name="fname[]" />
<input type="hidden" name="fname[]" value="test" />
$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);
}