我有一个多选表单,我现在正在尝试使用AJAX。下拉应该用作图像的过滤器。
的index.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'/>";
}
?>
在我的数据库中,每个图像都有六个与类别对应的条目,并填充了子类别。因此,应该发生的是当从&#34;过滤器下拉菜单中选择一个项目时#34;它应该查询每个六列的信息。但是我收到以下错误并输出:
implode():传入的参数无效...第6行。
为了测试,我有五个条目。 3,其中包含六个类别条目的所有信息,两个留空。
留空的两个总是返回上面的错误。
任何人都有任何关于为什么会这样做的想法?
提前致谢
答案 0 :(得分:1)
修改<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)");
答案 1 :(得分:0)
您发送到PHP脚本的内容不是数组。因此,您无法在其上使用implode()
,implode()
会返回错误。运行这个:
var_dump($filter);
然后,您可以根据结果决定如何修改代码。