2012-03-12 6 views
1

私が「Asus」チェックボックスをクリックすると結果はすべての「サイズ」の良い「Asus」のすべてのモデルです。しかし、 "Asus"と "15"チェックボックスの両方をクリックすると、結果は "Acer"などのこのサイズのすべてのモデルになります。どのように動作する必要がありますか(少なくとも私の想像力で:)) - "Asus"と "15" 'の両方をクリックし、クリックされた(チェックされた)チェックボックスに関連するデータを取得します。

ありがとうございます。

チェックボックス:

<input type="checkbox" name="Acer"> Acer 
    <input type="checkbox" name="Asus"> Asus 
... 
    <input type="checkbox" name="15.6"> 15'' 
    <input type="checkbox" name="17"> 17'' 

jQueryの/アヤックス:

$("input[type=checkbox]").click(function() { 
    var ids = []; 
    $("input[type=checkbox]:checked").each(function() { 
    ids.push($(this).attr("name")); 
    }); 
    ids = ids.join(","); 

    $.get("mysql.php", {q: ids}, 
    function(result) { 
    $("div#output").html(result); 

    }); 
}); 

MySQLのクエリ:

$g = $_GET['q']; 
if(isset($g)) { 
    $param = "" . str_replace(",", "','", $_GET['q']) . ""; 
    $sql = "SELECT * FROM `notebook` WHERE `trademark` IN ('$param') OR `size` IN ('$param') ORDER BY `trademark`"; 
    $query = mysql_query($sql) or die(mysql_error()); 
    while($row = mysql_fetch_array($query)) { 
     echo '<p>'.$row['trademark'].' = '.$row['size'].'</p>'; 
    } 
} 
+1

のためにP

申し訳ありませんが、あなたはhttp://xkcd.comでチラッがかかる場合があります/ 327/ – rjz

答えて

0

結果をフィルタリングする2つのパラメータがありますので、別々に処理する必要があります。

が示唆マイ:

チェックボックス:

<input type="checkbox" name="trademark" value="Acer"> Acer 
    <input type="checkbox" name="trademark" value="Asus"> Asus 
....  
    <input type="checkbox" name="size" value="15.6"> 15'' 
    <input type="checkbox" name="size" value="17"> 17'' 

jqueryの:

$("input[type=checkbox]").click(function() { 
    var trade = []; 
    var sizes= []; 
    $("input[type=checkbox]:checked").each(function() { 
     if($(this).attr("name")=="trademark"){ 
      trade.push($(this).val()); 
     } 
     else{ 
      sizes.push($(this).val()); 
     } 
    }); 
    trade = trade.join(","); 
    sizes= sizes.join(","); 
    $.get("mysql.php", {q: trade,p: sizes}, 
    function(result) { 
    $("div#output").html(result); 
    }); 
}); 

のmysql:

$g = $_GET['q']; 
$h = $_GET['p']; 
$wheresql=""; 
$where=0; 
if(isset($g)) { 
    $where=1; 
    $param = "" . str_replace(",", "','", $_GET['q']) . ""; 
    $wheresql.="`trademark` IN ('$param')"; 
} 
if(isset($h)) { 
    if($where==1){$wheresql.=" AND ";} 
    $where=1; 
    $param = "" . str_replace(",", "','", $_GET['p']) . ""; 
    $wheresql.="`size` IN ('$param')"; 
} 
if($where==1){ 
    $sql = "SELECT * FROM `notebook` WHERE ".$wheresql." ORDER BY `trademark`"; 
    $query = mysql_query($sql) or die(mysql_error()); 
    while($row = mysql_fetch_array($query)) { 
     echo '<p>'.$row['trademark'].' = '.$row['size'].'</p>'; 
    } 

} 

少し説明:あなたは、で区別チェックボックスの2基を有していますその名前と、別々にjqueryコードでそれらと一緒に働いて、2変数でmysql検索に送ることができるようにしてからmysql検索スクリプトで各変数に対して "where"検索を実行すると、$where変数は2目的:まず、商標とサイズがチェックされている場合は" AND "をsqlに追加します。2番目に:検索する条件があるかどうかを確認します(パラメータがない場合は検索は行いません)。

私はコードテストしていない

:ストレートSQLクエリにあなたの `$ _GET`変数を実行する前に、私の英語

+0

パブロはとても感謝しています。あなたのコードは完璧です。私はlocalhost MySQLバージョン用のmysql構文を修正しました。グラシアス。 Creo que la preguntaestácerrada)私のスペイン語には申し訳ありません。 – delete

+0

あなたを歓迎します:D –

0

はあなただけ使用する代わりに、ORのではないのですか?

すべての一致する商標と一致するサイズのすべての結果が表示されている場合は、ANDを使用して、商標とサイズが一致した場合にのみ結果を返します。

+0

ANDを使用しても問題は解決しません。最初のパラメータ "Asus"をクリックすると、2番目のパラメータ "size"を待ちます。しかし、私は各クリック後にデータを取得したい。 – delete

+0

2つのオプション。 JavaScriptを使用して現在の結果セットを選択サイズのみにフィルタリングするか、商標とサイズを再送信してモデルの新しいリストを取得し、現在のリストを消去して新しいリストで再構築します。 – DanRedux

+0

うん、結局私はそれを作った。ランドマークありがとう。 – delete

関連する問題