单击下拉菜单项后过滤html表结果

时间:2018-09-20 09:07:21

标签: php html search drop-down-menu filter

在我的sql表中单击填充的下拉条目后,我可以过滤我的表。默认情况下,该表向我显示“完成”和“打开”的数据库结果。我想要的是下拉菜单中的静态条目,该条目向我显示“所有”结果以及“进行中”结果。

这是我的sql表:

+--------+------+----------+
|StatusID| name |  status  |
+--------+------+----------+
|      1 | TC   | open     |
|      2 | HTS  | on going |
|      3 | HTOL |finished  |
+--------+------+----------+

这是我的html下拉列表,其中包含提供sql表中条目的php代码。

<th>
    <td>
        <label class="wmfg_label_a" for="chk_Status">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
    </td>
    <td>
        <select name="StatusIDSuch[]" multiple="multiple">
            <option disabled selected value> </option>;
            <option value="alle" <?php if ($StatusIDSuch=="alle") echo 'selected="selected"'; ?>>alle</option>;                  
            <?php 
                foreach($result as $m)
                {
                    echo "<option value=\"" . $m['StatusID'] . "\">" .$m['Status'] . "</option>";
                }
            ?>
        </select>
    </td>
</th>

这是尝试向我显示所有条目1、2 3以及不仅是我的默认1,2,而且还是行不通的。重要的是带有单词“ alle”的行。

if(isset($_POST['StatusIDSuch'])) {
    if ($StatusIDSuch == "alle"){
        $search .= "WHERE StatusID IN ('1', '2', '3')";
        var_dump($StatusIDSuch);
    } else {
        $i = 0;
        $selectedOptionCount = count($_POST['StatusIDSuch']);
        $selectedOption = "";

        while ($i < $selectedOptionCount) {
            $selectedOption = $selectedOption . "'" . $_POST['StatusIDSuch'][$i] . "'";

            if ($i < $selectedOptionCount -1){
                $selectedOption = $selectedOption . ", ";
            }
            $i ++;
        }

        $search .= " WHERE StatusID IN (".$selectedOption.")";
    }
}

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

根据您的代码,变量$StatusIDSuch之前未设置,因此它永远不能等于"alle"

if(isset($_POST['StatusIDSuch']) && is_array($_POST['StatusIDSuch']) && count($_POST['StatusIDSuch']) > 0) {
    $show_default = false;
    for($i=0,$count=count($_POST['StatusIDSuch']);$i<$count;$i++) if ($_POST['StatusIDSuch'][$i] == "alle") $show_default = true;

    if ($show_default){
        $search .= "WHERE StatusID IN ('1', '2', '3')";
    } else {

        $i = 0;
        $selectedOptionCount = count($_POST['StatusIDSuch']);
        $selectedOption = "";

        while ($i < $selectedOptionCount) {
            if (!is_numeric($_POST['StatusIDSuch'][$i])) continue; //only numeric values must be accepted to prevent sql injection
            $selectedOption = $selectedOption . "'" . $_POST['StatusIDSuch'][$i] . "'";

            if ($i < $selectedOptionCount -1){
                $selectedOption = $selectedOption . ", ";
            }
            $i ++;
        }

        $search .= " WHERE StatusID IN (".$selectedOption.")";
    }
}

对于查询的建立,以下是更好,更快和更安全的

if ($show_default){
    $search .= "WHERE StatusID IN ('1', '2', '3')";
} else {
   $vals = array_filter($_POST['StatusIDSuch'],'is_numeric');

   if (count($vals)) $search .= " WHERE StatusID IN (".implode(',', $vals).")";
}