0

AJAX で使用しようとしている複数選択フォームがあります。ドロップダウンは、画像のフィルターとして機能するはずです。

インデックス.php

<script>
function filterResults(str)
{
if (str=="")
  {
  document.getElementById("divResults").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("divResults").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","filter_ajax.php?filter="+str,true);
xmlhttp.send();
}
</script>

<form action="" class="css_form" id="picture_filter" name="picture_filter">
    <select onchange="filterResults(this.value)" multiple="multiple" name="filter[]" id="filter">
     <option value="filter_name_1">Filter name 1</option>
     <option value="filter_name_2">Filter name 2</option>
     <option value="filter_name_3">Filter name 3</option>
     <option value="filter_name_4">Filter name 4</option>
</select>
<div id="divResults"></div>

およびfilter_ajax.php

<?php

include ("connect.php");

    $filter = $_GET["filter"];
    $filterIn = implode("','",$filter);

        $result = mysql_query("SELECT * FROM edt_images
                                WHERE category1 IN ('$filterIn')
                                OR category2 IN ('$filterIn')
                                OR category3 IN ('$filterIn')
                                OR category4 IN ('$filterIn')
                                OR category5 IN ('$filterIn')
                                OR category6 IN ('$filterIn')")
            or die(mysql_error());
        while ($row = mysql_fetch_array($result)) {
            echo "<img src='files/small/thumb0_".$row['item_name'].".".$row['file_extension']."' border='0'/>"; 
        }

?>

私のデータベースでは、各画像にはカテゴリに対応する 6 つのエントリがあり、サブカテゴリで満たされています。したがって、アイテムが「フィルター ドロップダウン」から選択されると、その情報について 6 つの列ごとにクエリを実行する必要があります。ただし、次のエラーと出力が表示されます。

implode(): 無効な引数が渡されました ... 行 6.

テスト用に、5 つのエントリがあります。3 つは 6 つのカテゴリ エントリのすべての情報が入力されており、2 つは空白のままです。

空白のままになっている 2 つは、常に上記のエラーと共に返されます。

なぜこれが起こっているのか、誰にも考えがありますか?

前もって感謝します

4

2 に答える 2

2

修正<select>:

<select onchange="filterResults(this)" multiple="multiple" name="filter[]" id="filter">

これを試してください(注:サーバー側で「、」を使用して配列を内破する必要はありません-これは、例のJSですでに行われています):

function filterResults(sel)
{
    var selectedOptions = [];
    for (var i = 0; i < sel.options.length; i++) {
        if (sel.options[i].selected) {
            selectedOptions.push("'" + sel.options[i].value + "'");
        }
    }
    if (selectedOptions.length == 0) {
        document.getElementById("divResults").innerHTML="";
        return;
    }
    str = selectedOptions.join(",");
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else  {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("divResults").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","test.php?filter="+str,true);
    xmlhttp.send();
}

UPD: SQL も変更します。

$result = mysql_query("SELECT * FROM edt_images
                                WHERE category1 IN ($filterIn)
                                OR category2 IN ($filterIn)
                                OR category3 IN ($filterIn)
                                OR category4 IN ($filterIn)
                                OR category5 IN ($filterIn)
                                OR category6 IN ($filterIn)");
于 2013-01-09T03:26:39.960 に答える
0

PHPスクリプトに送信するのは、配列ではありません。implode()そのため、使用できずimplode()、エラーが返されます。これを実行します:

var_dump($filter);

次に、結果に基づいてコードを変更する方法を決定できます。

于 2013-01-09T03:00:07.233 に答える