【发布时间】:2018-09-14 04:28:28
【问题描述】:
我有一个像这样的多选表单:
<form name="form" action="result2.php" method="post">
<label>Type of Resource</label>
<select name="resources[]" multiple>
<option>Charitable Organization</option>
<option>Women-Only Shelter</option>
<option>Men-Only Shelter</option>
<option>Family Shelter</option>
<option>Youth Shelter</option>
<option>Emergency Shelter</option>
</select>
<input type="submit" value="Submit">
</form>
用户将能够选择多个选项,并且将显示每个选定类别下我的数据库中的所有避难所。这是我的php代码:
$value_4 = $_POST["resources"];
if($value_4){
foreach ($value_4 as $v){
$result = mysqli_query($dbc, "SELECT DISTINCT shelter_name, type_name
FROM shelter s
INNER JOIN shelter_type st on s.shelter_id = st.shelter_id
INNER JOIN s_type stt on st.type_id = stt.type_id
WHERE type_name = '$v'");
}
}
echo"<table border='1'>";
echo"<tr><td>Shelter</td><td>Type</td></tr>";
while ($row = mysqli_fetch_assoc($result)){
echo"<tr><td>{$row['shelter_name']}</td><td>{$row['type_name']}</td></tr>";}
echo"</table>";
目前,我只能显示最后选择的选项。如何更改我的 php 代码以显示每个选定选项下的所有数据?谢谢。
【问题讨论】:
-
您在每次循环迭代时都会覆盖
$result,因此当您退出循环时,它只包含上次迭代的查询结果。 -
另外,您的代码容易受到SQL injection 攻击。您应该通过mysqli 或PDO 使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
-
您也可以使用
WHERE type_name IN (<some list of values>)之类的方式将该循环更改为单个查询。 -
@AlexHowansky 你是对的,我正在覆盖 $result。我将 echo table 部分放在我的 foreach 循环中,它可以工作。我也会查一下你提到的几点。谢谢!!
标签: php html sql database web-applications