簡體   English   中英

PHP-兩個多重選擇下拉菜單,將用戶選擇傳遞到MySQL查詢中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM