POST复选框表格通过PHP

时间:2011-09-07 20:24:36

标签: php forms

我的表单包含文本区域和复选框。当我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 个答案:

答案 0 :(得分: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脚本中,提交的'filter'var将被视为数组。

有关详细信息,请查看此处:http://us2.php.net/manual/en/faq.html.php#faq.html.arrays

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

答案 1 :(得分:1)

麻烦的是你为每个复选框分配的名称,当前正在发生的事情是PHP正在读取第一个复选框及其赋值给变量的值,正在读取下一个过滤器复选框,但随后覆盖当前分配的值变量,然后再次使用第3个复选框。所以你总是只得到最后一个勾选的复选框作为$ 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,但它只是一个抬头:)

答案 2 :(得分:1)

我认为你有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

然后在你的php中你会得到过滤器作为一个数组。

答案 3 :(得分:0)

可能是因为你没有关闭你的输入标签,而是将它们全部视为一个?

答案 4 :(得分:0)

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