我有一个看起来像这样的表单:
<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);
}