单击下拉条目后过滤 HTML 表结果



我可以在单击SQL表中填充的下拉条目后过滤我的表。默认情况下,该表显示数据库从"完成"和"打开"的结果。我想要的是下拉列表中的静态条目,它向我显示"所有"结果以及"持续"结果。

这是我的 sql 表:

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

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

<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.")";
}
}

谢谢你的帮助。

根据你的代码,变量$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).")";
}

最新更新