我可以在单击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"> Status </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).")";
}