0

我在使用复选框进行搜索时遇到了一些问题。基本上,我有一些有注册日期的数据,我需要按月搜索并根据选定的月份或月份检索数据。

我正在使用 php 和 mysql。

这里我有一个简单的html:


<ul>
<li><input type="checkbox" name="month_in" value="1" />January</li>
<li><input type="checkbox" name="month_in" value="2" />February</li>
<li><input type="checkbox" name="month_in" value="3" />March</li>
<li><input type="checkbox" name="month_in" value="4" />April</li>
<li><input type="checkbox" name="month_in" value="5" />May</li>
<li><input type="checkbox" name="month_in" value="6" />June</li>
<li><input type="checkbox" name="month_in" value="7" />July</li>
<li><input type="checkbox" name="month_in" value="8" />August</li>
<li><input type="checkbox" name="month_in" value="9" />September</li>
<li><input type="checkbox" name="month_in" value="10" />October</li>
<li><input type="checkbox" name="month_in" value="11" />November</li>
<li><input type="checkbox" name="month_in" value="12" />December</li>
<li><input type="submit" value="Search"></li>
</ul>

和部分 php+mysql 代码:

$search=$_POST["month_in"];

$qry=mysql_query("select * from table where MONTH(dor) like '%{$search}%'");

问题是上面的代码只有在用户只检查一个月的情况下才有效,但如果用户检查了 2 个月或更长时间,它只检索最高月份的信息(我的意思是,如果用户检查了 1 月、3 月、4 月和 8 月,它会给出结果仅八月)。

4

2 回答 2

1

使用数组name作为复选框的属性

<ul>
    <li><input type="checkbox" name="month_in[]" value="1" />January</li>
    <li><input type="checkbox" name="month_in[]" value="2" />February</li>
    <li><input type="checkbox" name="month_in[]" value="3" />March</li>
    <li><input type="checkbox" name="month_in[]" value="4" />April</li>
    <li><input type="checkbox" name="month_in[]" value="5" />May</li>
    <li><input type="checkbox" name="month_in[]" value="6" />June</li>
    <li><input type="checkbox" name="month_in[]" value="7" />July</li>
    <li><input type="checkbox" name="month_in[]" value="8" />August</li>
    <li><input type="checkbox" name="month_in[]" value="9" />September</li>
    <li><input type="checkbox" name="month_in[]" value="10" />October</li>
    <li><input type="checkbox" name="month_in[]" value="11" />November</li>
    <li><input type="checkbox" name="month_in[]" value="12" />December</li>
    <li><input type="submit" value="Search"></li>
    </ul>

使用IN关键字检索结果

$search=$_POST["month_in"];
$search_string = implode(', ', $search);
$qry=mysql_query("select * from table where MONTH(dor) IN ($search_string)");
于 2012-08-16T06:25:27.647 回答
1

问题是即使用户选择了多个复选框,最后一个选中的复选框的值也会被发送回您的 php 脚本。如果您想以数组格式发布多个值,请将复选框的 name 属性从 更改name="month_in"name="month_in[]"。因此,您将收到一个包含月份的数字数组。

 array(10, 12);

 //fetch and make it a comma separated string using implode() php string function
 $csvSearch = implode(',', $_POST["month_in"]);
 $qry=mysql_query("SELECT * FROM table WHERE FIND_IN_SET(dor, '$csvSearch')");
于 2012-08-16T06:29:48.627 回答