将数据从多个字段获取到一个数组时出现问题


Trouble getting data from multiple fields into one array

我有一个看起来像这样的表单:

<form name="search" method="post" action="http://example.com/search3/">
Seach for: <input type="text" name="find[]" /> 
Search for stories by Type
<select name="find[]">
<option value="Fiction" selected>Fiction</option>
<option value="Non-Fiction">Non-Fiction</option>
<option value="Essay">Essay</option>
</select>
<input type="submit" name="search" value="Search" />
</form>

在php.search上,我通过以下方式获取数据:

$input = array(
"find" => $_POST['find'],
);

它几乎可以工作,只是它没有将结果放入find数组中。相反,数据将进入array2中的结果,可能是b/c i将每个字段命名为find[]。这是var_dump:

array(1) {
["find"]=>
array(2) {
[0]=>
string(5) “testing1”
[1]=>
string(7) “testing2”
}
}

我不知道为什么在这种情况下将find数组留空。

如果我更改形式,使数组的find[]名称变为just find,然后我将数据放入名为find的数组中,就像我想要的那样,但是,只有select表单数据会被捕获。查看var_dump以获取结果,以及如何只得到一个结果而不是两个结果:

array(1) {

["find"]=>
string(7) “testing2”

}

所以问题是。。。如何获取find数组中捕获的输入和选择数据?

使用方括号[]命名字段时,PHP会自动在$_POST(或$_GET)数组中创建嵌套数组。

在您的例子中,$input的值['find']是一个有两个数字键的数组。

echo $input['find'][0];
echo $input['find'][1];

您可以假设索引0包含在文本输入中输入的值,索引1包含在列表中选择的值。

如果跳过字段名称中的方括号,浏览器会将它们发送到服务器,如下所示:

find=value1&find=value2

PHP在解析数据时,首先将value1存储在关键字find下,但当出现另一个find关键字时,它只是用新的value2覆盖以前的值。

试试这个,这会对你有所帮助。

字段的名称不应相同。

<form name="search" method="post">
  Seach for: <input type="text" name="search" /> 
  Search for stories by Type
  <select name="find[]" multiple>
    <option value="Fiction" selected>Fiction</option>
    <option value="Non-Fiction">Non-Fiction</option>
    <option value="Essay">Essay</option>
  </select>
  <input type="submit" name="submit" value="Search" />
</form>
<?php 
if(isset($_POST['submit'])){
  $input=array("find"=>$_POST['search'],'search'=>$_POST['find']);
  print_r($input);
}
?>

<form name="search" method="post" action="">
Seach for: 
Search for stories by Type
<select name="find[]">
<option value="Fiction" selected>Fiction</option>
<option value="Non-Fiction">Non-Fiction</option>
<option value="Essay">Essay</option>
</select>
<input type="text" name="find[]" /> 
<input type="submit" name="search" value="Search" />
</form>
<?php if(isset($_POST)){
    $input = array();
    $var =array();
     foreach ($_POST['find'] as $key => $value) {
        if(!empty($value)) {
            array_push($var, $value);
        }
        else{
            continue;
        }
     }
     $input = array(
"find" => $var,
);
     print_r($input);
}