【发布时间】:2015-04-01 10:36:37
【问题描述】:
我正在尝试根据多选框中的值过滤 mysql 表,以便它返回已选择值的所有结果。例如这是我的多选框:
<select name="gift[]" id="gift" multiple="multiple" onchange="change()">
<option value="him">Him</option>
<option value="her">Her</option>
<option value="kids">Kids</option>
<option value="teens">Teens</option>
<option value="mothersday">Mothers Day</option>
<option value="fathersday">Fathers Day</option>
<option value="valentines">Valentines Day</option>
<option value="gadgets">Gadgets</option>
<option value="secretsanta">Secret Santa</option>
</select>
如果用户选择“him”和“gadgets”,它应该返回 mysql 表中包含“him”或“gadgets”的所有结果。
mysql 表将每个产品的数据作为字符串存储在单个列中(即,在“礼物”列下,它可能是他,她,孩子,小工具,或者另一行可能是她,小工具。使用上面的示例我希望它返回两行)。
结果由 AJAX 返回,我尝试使用 WHERE IN 子句但无法使其正常工作。这是我的代码(上面已经有 HTML 选择框):
AJAX 注意:为简单起见,并非完整代码
function change(){
var giftarray = new Array();
$.each($("#gift option:selected"), function(){
giftarray.push($(this).val());
});
var gift = "'" + giftarray.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("product").innerHTML=xmlhttp.responseText;
}
}
var url="results.php"
url=url+"&gift="+gift;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
Results.PHP 注意:为简单起见,并非完整代码
$gift=$_GET['gift'];
$gift=str_replace("\\","",$gift);
$sql= "SELECT * FROM $productstable WHERE gift IN ($gift)";
$result = mysql_query($sql) or die ('Unable to run query:'.mysql_error());
while($item = mysql_fetch_array($result))
{
code to view products here
}
<? } mysql_close() ?>
Mysql 表和数据注意:我只显示了两行的gift 列、id 和数据(希望没问题)
CREATE TABLE `products` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`gift` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `products` VALUES(1,'him,her');
INSERT INTO `products` VALUES(2,'him,her,teens,gadgets');
如果产品在 mysql 表中只分配了一个值,这似乎有效,但当它有多个时则无效。从我读过的内容来看,我认为在单个列中存储多个标准可能会出错,但不知道如何解决它。非常感谢。
【问题讨论】:
-
您可以编辑您的问题以包含您正在使用的数据库表中的一些示例吗?
-
还在为 AJAX 使用原始 javascript 吗?考虑使用 jQuery!另外,停止使用已弃用的
mysql_*函数;使用 MySQLi 或 PDO。 -
添加了数据库脚本,也感谢 Raptor,我改一下。任何想法为什么它不起作用?
标签: php mysql ajax multi-select