фильтровать результаты html таблицы после нажатия на выпадающую запись - PullRequest
0 голосов
/ 20 сентября 2018

я могу отфильтровать свою таблицу после нажатия на заполненные выпадающие записи из моей таблицы 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.")";
    }
}

Спасибо за помощь.

1 Ответ

0 голосов
/ 20 сентября 2018

согласно вашему коду, переменная $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.")";
    }
}

для построения запросов, ниже лучше, быстрееи securer

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).")";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...