2012-06-29 56 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