2011-09-07 90 views
0

我的表单同时具有文本区域和复选框。当我输入POST结果时,即使选中了多个复选框值,也只会发布其中一个复选框值。通过PHP POST POST复选框表单

这是我的形式:

<form action="search.php"> 
<input type="text" name="term"> 

<input type="checkbox" name="filter" value="subject"> Subject 
<input type="checkbox" name="filter" value="course"> Course 
<input type="checkbox" name="filter" value="professor"> Professor 

<input type="submit" name="submit" value="Go" /> 

而且这是我echo形式(search.php):

<?php 
$term = $_GET['term']; 
$filter = $_GET['filter']; 
echo "$term $filter"; 
?> 
+5

尝试使用过滤器[] – realshadow

+0

为什么不回答您的建议@realshadow? –

回答

1

麻烦的是你已经分配的每个复选框的名字,什么是目前发生的事情是第一个复选框被PHP及其赋值给变量的值读取时,下一个过滤器复选框正在被读取,但随后覆盖变量的当前赋值,然后再次使用第三个复选框。所以你永远只会把最后一个打勾的复选框作为你的$ filter变量的值。

你需要单独分配每个复选框有不同的名称,例如:

<form action="search.php"> 
<input type="text" name="term" /> 

<input type="checkbox" name="filter1" value="subject" /> Subject 
<input type="checkbox" name="filter2" value="course" /> Course 
<input type="checkbox" name="filter3" value="professor" /> Professor 

<input type="submit" name="submit" value="Go" /> 

那么PHP:

<?php 
$term = $_GET['term']; 
$filter1 = $_GET['filter1']; 
$filter2 = $_GET['filter2']; 
$filter3 = $_GET['filter3']; 
echo "$term $filter1 $filter2 $filter3"; 
?> 

你也有你的最后一个复选框的值相同,第二个让我如果这实际上是错误的,你可以明显地改变它。

另外要注意的,也可能是使用POST方法而不是GET,因为它是更安全的一个好主意,但是,您可能有理由对使用GET,但它只是一个抬起头来:)

0

难道是因为你不关闭输入标签,它的治疗他们都是一体吗?

+0

不,这不是问题。复选框全部命名相同。作为realshadow指出它应该是过滤器[] –

+0

当然,完全忽略了那一点! – dougajmcdonald

3

试试这个:

<input type="checkbox" name="filter[]" value="subject" /> Subject 
<input type="checkbox" name="filter[]" value="course" /> Course 
<input type="checkbox" name="filter[]" value="course" /> Professor 

在你的search.php脚本提交的“过滤器”变种将被视为一个数组。

欲了解更多信息,看看这里:http://us2.php.net/manual/en/faq.html.php#faq.html.arrays

另一个类似的问题,我认为是:HTML input arrays

0

您也可以为每个复选框使用不同的名称,例如filter_1,filter_2等。

1

我认为您有3个输入框命名为相同的“过滤器”,哪一个是PHP预期会得到的?

单选按钮,我们使用的滤镜阵列[]所以如果你真的想复选框,你真的希望他们所有的同名然后尝试

<input type="checkbox" name="filter[]" value="subject"/> Subject 
<input type="checkbox" name="filter[]" value="course"/> Course 
<input type="checkbox" name="filter[]" value="course"/> Professor 

,然后在你的PHP你会得到过滤为数组。