AJAX使用复选框过滤MySQL结果

时间:2012-06-29 15:11:58

标签: php mysql ajax

我正试图根据用户复选框选择在PHP页面中显示可过滤的MySQL数据。我有一个域名数据库以及根据Nominet DAC信息需要更新的日期,我可以获得未经过滤的数据显示,但域扩展过滤结果对我来说很难实现。我应该在这个阶段指出,我是我想要学习的许多想法的重要新人,所以请保持温和。我也尝试过这里的其他一些文章,但没有骰子。

到目前为止,我有以下内容:

HTML

<input type="checkbox" class="extensions" name="extensions" value=".co.uk">.co.uk</input>
<input type="checkbox" class="extensions" name="extensions" value=".org.uk">.org.uk</input>

脚本

$('.extensions').live('click', function() {
var all_boxes = $('.extensions');
var all_boxes_values = [];
var i = 0;
for (var i; i < all_boxes.length; i++) {
    if (all_boxes[i].checked) {
        all_boxes_values.push(all_boxes[i].value)
    }
}   
var all_boxes_values_clean = all_boxes_values.join(", ");
console.log(all_boxes_values_clean);
$.get("sql-test.php", {q: all_boxes_values_clean},
function(result) {
$("div#output").html(result);
}   
    )});     

PHP

$g = $_GET['q'];
$extensionsql="";
$extension=1;
if(isset($g))   {
$extension=1;
$param = "" . str_replace(",", "','", $_GET['q']) . "";
}

就我的能力有限而言,这就是我的意思。接下来我要做的是在列domainName中搜索字符串匹配,并将适当的结果返回给用户。模仿下面的东西,但我不知道如何实现它。任何帮助将不胜感激:

SELECT * FROM `refresh` WHERE `domainName` LIKE '%.co.uk%' AND renewalDate LIKE '%2012-06-30%' ORDER BY `domainName` ASC  

谢谢

2 个答案:

答案 0 :(得分:2)

将name =“extensions”更改为name =“extensions []”,因为这将创建一个元素数组,而不是使用上一个选中的值进行覆盖(如果您通常发布)

$g = explode(',', $_GET['q']);

$param='';
while(list($key,$value)=each($g))
{
    $param.="`domainName` LIKE '%".mysql_real_escape_string($value)."' OR ";
}
$param=substr($param,-3); // knock off last OR

$sql="SELECT * FROM `refresh` WHERE renewalDate LIKE '%2012-06-30%' AND (".$param.") ORDER BY `domainName` ASC  

答案 1 :(得分:1)

更改复选框的名称(extensions []),以便在POST回PHP时使它们成为数组:

<input type="checkbox" class="extensions" name="extensions[]" value=".co.uk">.co.uk</input>
<input type="checkbox" class="extensions" name="extensions[]" value=".org.uk">.org.uk</input>

可能应该稍微清理你的javascript:

$('.extensions').live('click', function() {
var all_boxes = $('.extensions');
var checked_boxes = $('.extensions:checked');
var all_boxes_values = [];

checked_boxes.each(function(){
 var cb_value = $(this).val();
 all_boxes_values.push(cb_value);
});

var all_boxes_values_clean = all_boxes_values.join(", ");
console.log(all_boxes_values_clean);
$.get("sql-test.php", {q: all_boxes_values_clean},
      function(result) {
       $("div#output").html(result);
      })
});