【发布时间】:2014-09-30 11:44:49
【问题描述】:
我有一个事件数据库,我希望用户能够通过复选框分组实时过滤事件 - 状态、月份等。我在同一组中为复选框赋予了相同的名称:name="state"对于所有状态复选框,name="month" 对于所有月份复选框等。
我有一个函数,只要点击页面上的任何复选框就会触发,并尝试了三种方法来输出选定的值:
方法一
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(",")
在页面上进行选择时的示例 console.log 看起来像
'Alaska','Arkansas','California' 'January','February','March'
方法二
var formData = $('#form').serialize();
在页面上进行选择时的示例 console.log 看起来像
state=Alaska&state=Arkansas&state=California&month=January&month=February&month=March
方法3
var jsonData = JSON.stringify(formData);
在页面上进行选择时的示例 console.log 看起来像
"state=Alaska&state=Arkansas&state=California&month=January&month=February&month=March"
我已经为 ajax 尝试了 GET 和 POST 类型。我认为 POST 是我所追求的;这允许我将 JSON.stringify 发送到我的个人 PHP 变量,运行 $data = json_decode(stripslashes($_POST['data'])); 来解码字符串,当我 echo "$data"; 返回我的 HTML 页面时,我会在选中/取消选中它们时得到一个复选框值的动态列表:
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|...'"
和
$sql="SELECT * FROM events WHERE (state = 'Alabama' OR state = 'Alaska' OR...) OR (month = 'January' OR month = 'February' OR...)";
我觉得这只是我缺乏 php-fu,你们都可以启发我一个我一直忽略的简单解决方案。我也对我以错误的方式处理这个问题的可能性持开放态度。我想知道如何以最好的方式做到这一点。我的PHP知识明显不足,请用小词。
--编辑 1--
复选框遵循以下模式:
<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>
...
--编辑 2--
我尝试了以下 PHP 并没有得到任何结果; echo 甚至不会推出选定的值。
$state_values = $_POST['state'];
$month_values = $_POST['month'];
$con = mysqli_connect('localhost','****','****','db');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$state_values = array_map(function($val) use ($con){
return $con->real_escape_string($val);
});
$states = implode('|', $state_values);
$month_values = array_map(function($val) use ($con){
return $con->real_escape_string($val);
});
$months = implode('|', $month_values);
mysqli_select_db($con,"events");
$sql="SELECT * FROM events WHERE state REGEXP '$states'";
$result = mysqli_query($con,$sql);
echo "$state_values";
while($row = mysqli_fetch_array($result)) {
echo '<div class="panel panel-default">';
echo '<div class="panel-heading">';
echo '<span class="lead">' . $row['name'] . '</span><br>';
echo '<span class="small">' . $row['description'] . '</span>';
echo '</div>';
echo '<div class="panel-body">';
echo '<div class="row">';
echo '<div class="col-4 col-sm-4 col-lg-4">';
echo '<span class="glyphicon glyphicon-calendar"></span>' . $row['month'] .' ' . $row['day'] . ', ' . $row['year'] . '</div>';
echo '<div class="col-4 col-sm-4 col-lg-4">';
echo '<span class="glyphicon glyphicon-map-marker"></span>' . $row['city'] . ', ' . $row['state'] . '</div>';
echo '<div class="col-4 col-sm-4 col-lg-4">';
echo '<a href="' . $row['url'] . '" class="btn btn-primary btn-sm pull-right" target="_blank">Visit Race Site</a></div>';
echo '</div>';
echo '</div>';
echo '</div>';
}
mysqli_close($con);
【问题讨论】:
-
你有它们的表单标记吗?