在我的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"> 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.")";
}
}
谢谢您的帮助。
答案 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).")";
}