[英]PHP - two multiple select dropdowns, passing user selections into a MySQL query
编辑:
下拉菜单中列出了以下内容:
打字课程日常营销课程
当使用下面的代码从下拉列表中添加所选文本到MySQL语句时,仅出现第一个单词,即。 “键入”和“每日”,代码如下所示:
SELECT * FROM `acme` WHERE `course` IN('Typing', 'Daily')AND `date` IN('2010-08-27', '2010-08-31')
应该是这样的:
SELECT * FROM `acme` WHERE `course` IN('Typing Course', 'Daily Marketing Course')AND `date` IN('2010-08-27', '2010-08-31')
以下是原始问题:
大家好,
好的,我会尽力解释我想做什么。
我有两个下拉菜单设置为多个,第一个是Course,第二个是Date,这是填充每个下拉菜单的代码:
课程
echo "<select name='course' value='' multiple='multiple'>";
// printing the list box select command
echo "<option value=''>All</option>";
while($ntc=mysqli_fetch_array($queryc)){//Array or records stored in $nt
echo "<option value=$ntc[course]>$ntc[course]</option>";
/* Option values are added by looping through the array */
}
echo "</select>";// Closing of list box
日期
echo "<select name='date' value='' multiple='multiple'>";
// printing the list box select command
echo "<option value=''>All</option>";
while($nt=mysqli_fetch_array($queryr)){//Array or records stored in $nt
echo "<option value=$nt[dates]>$nt[dates]</option>";
/* Option values are added by looping through the array */
}
echo "</select>";// Closing of list box
我的主要问题是将每个下拉列表的结果传递给MySQL查询。 例如,如果用户从“课程”下拉菜单中选择“打字”和“营销”-我需要MySQL查询为:
SELECT * FROM acme WHERE course = 'Typing' OR course = 'Marketing'
另外,我还需要将第二个下拉列表添加到公式中,因此假设用户选择了“ Typing”和“ Marketing”,然后他们从Date下拉列表中选择了21-06-2010,因此查询需要成为:
SELECT * FROM acme WHERE course = 'Typing' OR course = 'Marketing' AND date = '21-06-2010' OR date = '18-05-2010'
显然,如果他们从下拉列表中选择了多个日期,则还需要进行构建。
我希望我已经清楚地解释了我想要实现的目标。 真的很难让我明白这一点。
提前致谢,
荷马。
使用WHERE value IN ('a', 'b')
:
SELECT * FROM acme WHERE course IN ('Typing','Marketing') AND date IN ('21-06-2010', '17-09-2010');
在HTML(或输出HTML的PHP)中,在字段名中添加[]
:
<select name='course[]' value='' multiple='multiple'>
在PHP中:
$courses=$_POST['course'];
$courses=array_map('mysql_real_escape_string', $courses);
$dates=$_POST['date'];
$dates=array_map('mysql_real_escape_string', $dates);
$query = 'SELECT * FROM `acme` WHERE ';
$query.='`course` IN(\''. join("', '", $courses). '\')';
$query.='AND `date` IN(\''. join("', '", $dates). '\')';
好的,首先,您的SQL有点过时了。 而不是WHERE course = 'Typing' OR 'Marketing'
,而是希望WHERE course = 'Typing' OR course = 'Marketing'
。 或者,您可以使用WHERE course IN ('Typing', 'Marketing')
。 然后,您可以使用array_map
函数添加引号,并使用join
函数将其链接在一起来创建它:
<?php
...
function escape_and_add_quotes($string) {
return '\'' . mysql_real_escape_string($string) . '\'';
}
...
$sql = 'SELECT * FROM acme WHERE course IN (' . join(',', array_map('escape_and_add_quotes', $courses)) . ')';
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.