通过PHP发布复选框表单

通过PHP发布复选框表单,php,forms,Php,Forms,我的表单有文本区域和复选框。当IPOST结果时,即使选择了多个复选框值,也只会过帐其中一个复选框值 这是我的表格: <form action="search.php"> <input type="text" name="term"> <input type="checkbox" name="filter" value="subject"> Subject <input type="checkbox" name="filter" value="cours

我的表单有文本区域和复选框。当I
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" />

可能是因为您没有关闭输入标记,而它将它们视为一个整体吗?

可能是因为您没有关闭输入标记,而它将它们视为一个整体吗?

请尝试以下方法:

<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”变量将被视为一个数组

有关更多信息,请查看此处:

另一个类似的问题,我想是:

试试这个:

<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”变量将被视为一个数组

有关更多信息,请查看此处:


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

问题是您分配给每个复选框的名称,当前发生的情况是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,但这只是一个提示:)

问题是您为每个复选框指定了名称,当前发生的情况是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,但这只是一个提示:)

您也可以为每个复选框使用不同的名称,例如filter\u 1、filter\u 2等。

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

我想你有3个输入框,命名为相同的“filter”,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中,您将获得作为数组的过滤器

我认为您有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中,您将获得作为数组的过滤器

不,这不是问题所在。所有复选框的名称都相同。正如realshadow指出的,应该是filter[]不,这不是问题所在。所有复选框的名称都相同。正如realshadow指出的,应该是filter[]为什么不使用您的建议@realshadow回答?为什么不使用您的建议@realshadow回答?