有没有更简单的方法来执行这些搜索过滤器?

Is there a simpler way of doing these search filters?

一切正常,问题是我目前有 6000 行代码,有没有更有效的方法来替换所有这些开关? 这是我的所有可能性的表格:

<form action="" method="POST">

                <select name="ordine">
                    <option value="0" selected hidden>ordina per...</option>
                    <option value="1">A-Z</option>
                    <option value="2">Z-A</option>
                </select>
                <select name="epoca">
                    <option value="0" selected hidden>Secoli di scrittura</option>
                    <option value="1">1300</option>
                    <option value="2">1800</option>
                    <option value="3"></option>
                    <option value="4"></option>
                    <option value="5"></option>
                    <option value="6"></option>
                    <option value="7"></option>
                    <option value="8"></option>
                </select>
                <select name="movimento">
                    <option value="0" selected hidden>Movimento letterario</option>
                    <option value="1">Dolce stil novo</option>
                    <option value="2">VEDI FOTO DI WIKIPEDIA</option>
                    <option value="3"></option>
                    <option value="4"></option>
                    <option value="5"></option>
                    <option value="6"></option>
                    <option value="7"></option>
                    <option value="8"></option>
                </select>
                <label class="checkbox-inline">
                    <input type='hidden' value='0' name='letteratura_ita'>
                    <input type="checkbox" name="letteratura_ita" value="1">Letteratura italiana
                </label>
                <label class="checkbox-inline">
                    <input type='hidden' value='0' name='letteratura_estero'>
                    <input type="checkbox" name="letteratura_estero" value="1">Letteratura straniera
                </label>

                <button type="submit" name='ricerca'>Cerca</button>
            </form>

对不起,意大利语……好吧,既然我已经有了所有这些可能性,我就开始为它做一个 switch(true) 。这是第一个的示例代码:

case ($opzione1 == 1 && $opzione2 == 0 && $opzione3 == 0 && $opzione4 == 0 && $opzione5 == 0):
                        $comando = "select * from autori order by cognome";
                        $risultato = mysqli_query($conn, $comando);
                        while ($autore = mysqli_fetch_assoc($risultato)) {
                            echo "<table border='1' class='autori'>\n";
                            $idautore = $autore["idautore"];
                            echo '<td><img src="data:image/jpeg;base64,' . base64_encode($autore['img']) . '" width="200" height="200"/> </td>';
                            echo "<tr>\n";
                            echo "<td> {$autore['nome']} {$autore['cognome']} </td>";
                            echo "</tr>\n";
                            echo "<tr>\n";
                            echo "<td> {$autore['descrizione_breve']} </td>";
                            echo "</tr>\n";
                            echo "</table>\n";
                        }
                        mysqli_close($conn);
                        break;

您可以获得每个 select 的 post 值,然后创建一个带有用于在一个字符串中搜索的所有选项的单个 mysqli 查询。为避免 SQL 注入风险,我建议将数组与要在 mysqli 查询中使用的值一起使用,并仅将 post 值用作数组的索引。示例:

$epoca = array("%","1300","1800",...);
$movimento = array("%","Dolce stil novo","VEDI FOTO DI WIKIPEDIA",...;
$order = array("ASC","ASC","DESC");
...
$epoca_index = $_POST['epoca'];
$movimento_index = $_POST['movimento'];
$ordine_index = $_POST['ordine'];
...

$comando = "select * from autori WHERE epoca LIKE '$epoca[$epoca_index]' && movimento LIKE '$movimento[$movimento_index]' ... order by cognome '$ordine' ";