【问题标题】:How to return multiple queries from a multiple select form?如何从多选表单返回多个查询?
【发布时间】: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 攻击。您应该通过mysqliPDO 使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • 您也可以使用WHERE type_name IN (&lt;some list of values&gt;) 之类的方式将该循环更改为单个查询。
  • @AlexHowansky 你是对的,我正在覆盖 $result。我将 echo table 部分放在我的 foreach 循环中,它可以工作。我也会查一下你提到的几点。谢谢!!

标签: php html sql database web-applications


【解决方案1】:

就像@Alex Howansky 提到的那样,我在每次循环迭代时都覆盖了我的 $result。我只是移动了代码的第二部分,它在我的 foreach 循环中打印出庇护所,它就可以工作了!

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 2023-01-28
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多