使用ajax和复选框动态搜索数据库记录

时间:2014-09-30 00:47:03

标签: php mysql ajax checkbox

我有一个事件数据库,我希望用户能够通过复选框的分组实时过滤事件 - 状态,月份等。我在同一组中给出了相同名称的复选框:{ {1}}表示所有状态复选框,name="state"表示所有月份复选框等。

我有一个函数会在点击页面上的任何复选框时触发,并尝试三种方法输出所选值:

方法1

name="month"

在页面上进行选择时,示例console.log类似于

var state = $('input[name="state"]:checked').map(function() {
        return "'"+$(this).val()+"'";
    }).get().join(",");
var month = $('input[name="month"]:checked').map(function() {
        return "'"+$(this).val()+"'";
    }).get().join(",")

方法2

'Alaska','Arkansas','California' 'January','February','March'

在页面上进行选择时,示例console.log类似于

var formData = $('#form').serialize();

方法3

state=Alaska&state=Arkansas&state=California&month=January&month=February&month=March

在页面上进行选择时,示例console.log类似于

var jsonData = JSON.stringify(formData);

我已经尝试了ajax的"state=Alaska&state=Arkansas&state=California&month=January&month=February&month=March" GET类型。我认为POST是我所追求的;这允许我将JSON.stringify发送到我的个人PHP变量,运行POST来解码字符串,当我$data = json_decode(stripslashes($_POST['data']));回到我的HTML页面时,我得到一个动态的复选框值列表,因为我检查/取消选中它们:

echo "$data";

我需要帮助找到如何获取所选复选框的值并查询我的数据库以返回与当前选中的复选框匹配的任何记录。我试过了

state=Alaska&state=Arkansas&state=California&month=January&month=February&month=March

$sql="SELECT * FROM events WHERE state = '".$state."' OR month = '".$month."'";

$sql="SELECT * FROM events WHERE month REGEXP 'January|February|March|...'"

我觉得这只是我缺乏php-fu而且你们都可以通过一个我无法忽视的简单解决方案来启发我。我也有可能以错误的方式接近这一点。我想知道如何以最好的方式做到这一点。我的PHP知识显然缺乏,所以请用小词。

- 编辑1 -
复选框遵循以下模式:

$sql="SELECT * FROM events WHERE (state = 'Alabama' OR state = 'Alaska' OR...) OR (month = 'January' OR month = 'February' OR...)";

- 编辑2 -
我尝试过以下PHP并没有得到任何结果; echo甚至没有推出选定的值。

<li class="filter-item">
 <label class="checkbox" for="January">
  <input type="checkbox" class="month" id="January" value="January" name="month"> January
 </label>
</li>
<li class="filter-item">
 <label class="checkbox" for="February">
  <input type="checkbox" class="month" id="February" value="February" name="month"> February
 </label>
</li>
...

1 个答案:

答案 0 :(得分:0)

你可以做一些向php提交表单的方法,当你有一个多值表单变量(如一组复选框)时,你可以将它们命名为name[]month[]而不是namemonth。我看到你正在使用jQuery,所以你可以使用jQuery&#39; s serialize

而不是map。
var data=$('#yourForm').serialize();

会返回类似

的内容
state[]=Alaska&state[]=Arkansas&state[]=California&month[]=January&month[]=February&month[]=March

您可以通过ajax将其传递给您的php脚本,然后当它们被发送到$_POST时,php会将其解释为array push syntax,因此$_POST['state']$_POST['month']将会是数组而不是字符串。然后是implode

$stateList=implode("','",$_POST['state']); //'Alaska','Arkansas','California'
$monthList=implode("','",$_POST['month']); //'January','February','March'

然后sql将是

$query='SELECT * FROM events WHERE state IN ('.$stateList.') OR month IN ('.$monthList.')';

所以我认为这种情况不一定需要任何正则表达式。表单中的imploding个复选框值被推送到sql IN子句中,我发现自己一直在这样做。