PHP - 两个多选下拉列表,将用户选择传递给MySQL查询

时间:2010-09-03 11:44:18

标签: php mysql drop-down-menu

编辑:

下拉菜单中列出了以下内容:

打字课程 每日营销课程

当使用下面的代码从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')

以下原始问题:

大家好,

好的,我会尽力解释我想做什么。

我有两个下拉菜单设置为多个,第一个是课程,第二个是日期,这是填充每个下拉列表的代码:

课程

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'

此外,我还需要将第二个下拉列表添加到等式中,因此假设用户选择了“打字”和“营销”,他们然后从日期下拉菜单中选择21-06-2010,这样查询然后需要:

SELECT * FROM acme WHERE course = 'Typing' OR course = 'Marketing' AND date = '21-06-2010' OR date = '18-05-2010'

显然,如果从下拉列表中选择多个日期,我还需要内置。

我希望我已经清楚地解释了我想要实现的目标......所有人都感激不尽。真的很想弄清楚这个。

提前致谢,

荷马。

2 个答案:

答案 0 :(得分:2)

使用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). '\')';

答案 1 :(得分:1)

好的,首先,你的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)) . ')';

?>