有没有更简单的方法来执行这些搜索过滤器?
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' ";
一切正常,问题是我目前有 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' ";