PHP请求的多选列表

时间:2014-06-19 12:20:48

标签: javascript php html mysql sql

我有这个数据表从服务器获取数据。现在的问题是数据库包含的数据比我想象的要多一些。因此,为了防止浏览器加载所有条目,我创建了一个多选列表,我将仅用于提取基本信息。

然后将此列表中的输入与数据库中的内容进行匹配。然后将结果存储在$ results中,如下所示。

这里的问题是我不知道如何获取输入数据,特别是如果它有多种选择,进入最后一个mysql查询然后进入$ results。

稍后我使用$ results将数据推送到表中。虽然正如我所说,当我将所有数据加载到$ results中时,表格会有点拥挤。

其他所有内容都正常工作,我在我的多选列表中获取了scopeID。

那么,我如何让我选择的选项进入

<?php   
        $results = mysql_query("SELECT * FROM tableID LIKE (/*some cool way of putting the input here*/)";
        ?>

完成任务的代码:

///Connection parameters above///
    $multiplechoice = mysql_query("SELECT scopeId FROM tableID");
            $storeArray = array();
            print"<select multiple name=\"scopeValues\" id=\"scopeIdchoice\">";
            while ($rowchoice = mysql_fetch_array($multiplechoice, MYSQL_ASSOC)) {
            $storeArray =  $rowchoice['scopeId'];  
    print"<option id='".strtolower($storeArray)."'>";
    print $storeArray;
    print"</option>";

    }

    <?php   
    $results = mysql_query("SELECT * FROM tableID LIKE (/*some cool way of putting the input here*/)";
    ?>

3 个答案:

答案 0 :(得分:0)

因为现在有一个以上与输入关联的值,您需要告诉服务器将所有值存储在数组中(注意括号):

name=\"scopeValues[]\"

然后你内爆数组并运行SQL。我假设您正在发布表单数据:

$scopeValues = implode(',', $_POST['scopeValues']);
// … remember to sanitize $scopeValues before the query
$results = mysql_query("SELECT * FROM tableID WHERE scopeId IN ($scopeValues) )";

确保在将$scopeValues插入查询之前清除{{1}}中的所有值以防止SQL注入。更安全的方法是不使用ext / mysql(无论如何已弃用)并使用PDO或ext / mysqli并使用预准备语句。

(ID字符串是吗?)

答案 1 :(得分:0)

将选择的名称更改为scopeValues[]。 从选择中,您将在$_POST数组中获得一组值。您可以将其作为值列表传递给SQL查询,如下所示。您需要将xx_thefield_xx用于正确的列名,当然需要对SQL注入进行检查,这些都是为了更好地阅读这些内容而缺失的。

<?php   
    $scopeVals = $_POST['scopeValues[]'];
    // … remember to sanitize $scopeVals before the next step
    $results = mysql_query("SELECT * FROM tableID where xx_thefield_xx in ('" .
           implode("','", $scopeVals) . "');";
?>

答案 2 :(得分:0)

我不知道你是否知道这一点,但PHP是在服务器上执行的。请求您的页面如下:

  1. 浏览器向您的服务器发送请求;
  2. 服务器执行PHP;
  3. 服务器将输出发送到浏览器;
  4. 浏览器呈现HTML。
  5. 这会产生一个问题:如果您更改了选择(在浏览器中发生),PHP就已经执行了。它不能神奇地改变发送到浏览器的输出。因此,要刷新结果,您应该创建一个表单并将输入POST到同一页面,这将检查是否已发布数据,如果有,则仅输出所选数据,如果没有,则显示所有内容。如果你想使它更复杂(但也更有用),你可以使用AJAX来检索选择查询的结果。

    其他答案已经涵盖了表格,AJAX的方式是这样的:

    • 有一个单独的页面,使用POSTed输入选择数据进行过滤。
    • 每次<select>更改时,都会在显示数据的页面上发出AJAX请求。

    (也许这个答案对你来说完全没用,因为你已经知道PHP是服务器端的。)