【问题标题】:Is there a simpler way of doing these search filters?有没有更简单的方法来做这些搜索过滤器?
【发布时间】:2021-08-11 16:50:39
【问题描述】:

一切都很好,问题是我目前有 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;

【问题讨论】:

  • 需要重构的工作解决方案更适合Code Review Stack Exchange 站点。
  • 如果您的代码中有switch(true),那么您使用的是“反模式”。使用它没有功能上的好处,它通常表明是时候重构你的代码了。将“处理代码”与“显示代码”分开通常是一个好主意。另外,你不需要fetch()stackoverflow.com/a/66775416/2943403
  • 我们不知道这些$opzione 变量是从哪里来的。我们不知道您想要的确切结果。根据 Stack Overflow 标准,您的问题不清楚

标签: php html mysql switch-statement


【解决方案1】:

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

$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' ";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多