2012-06-29 43 views
2

我正试图根据用户复选框选择来在PHP页面内显示可过滤的MySQL数据。我有一个域名数据库,这些数据库需要根据Nominet DAC信息进行续订,我可以得到未过滤的数据,但通过域名扩展过滤结果对我来说很难完成。在这个阶段,我应该指出,我很想在这里学习与我一起学习的许多想法,这是一个认真的新手,所以请温和。我也尝试过在这里的其他文章,但没有骰子。AJAX过滤器使用复选框的MySQL结果

我见到目前为止以下内容:

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

变化名称=“扩展”到名称=“扩展[]”,因为这将创建元素的数组,而不是与最后检查值改写(如果您发布它通常)

$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,但'而(名单($键,$值)=每($ G))'是这么早PHP 4时代,伙计。使用[foreach](http://php.net/manual/en/control-structures.foreach.php):) – goat

+0

谢谢@Waygood。我已将while(list ...)转换为现在的foreach,但脚本在运行时返回SQL错误:或者您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以获取正确的语法请在第1行使用'ORDER BY ORDER BY domainName ASC'附近。您是否能够建议为什么会出现这种情况?再次感谢您的帮助 – keepitnang

1

复选框更改名称(扩展[]),使它们阵列调回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); 
     }) 
}); 
+0

感谢@David代码清理。比我的业余尝试更好的方式:) – keepitnang