【问题标题】:PHP How to show all results from db if the user selects "ALL" option from select list optionsPHP如果用户从选择列表选项中选择“ALL”选项,如何显示来自db的所有结果
【发布时间】:2017-10-03 23:17:21
【问题描述】:

嗨 :) 我有一个包含选择列表和搜索按钮的表单,用于在表中显示来自数据库的结果。我所有选择列表的第一个选项是“全部”(这不是来自数据库!基本上它假设当用户单击搜索而不选择任何特定选项时,它会从数据库中获取所有数据)。如果我选择真实选项(不是第一个选项“ALL”),当前代码可以正常工作。我的问题是:如果用户在一个选择列表或所有选择列表中选择“全部”,如何带来所有数据?

<!-- Search Components -->
<div class="row">
  <form action="search.php" method="POST" name="" class="text-center">

    <!-- Username -->
    <div class="form-group col-sm-6 col-md-4">
      <?php
        include("dbc.php");
        $qq = "SELECT DISTINCT username FROM users ORDER BY username";
        $rr = mysqli_query($dbc,$qq);
        while ($row = mysqli_fetch_array($rr)){
          $username_array[] = $row['username'];
        }
        echo '<select class="form-control border-input" name="username">';
        echo '<option value="all">ALL</option>';
        foreach($username_array as $user){
          $selected = '';
          if($_POST['username'] == $user) {
            $selected = 'selected="selected"';
          }
          echo '<option value="'.$user.'"'.$selected.'>'.$user.'</option>';
        }
        echo '</select>';
      ?>
    </div>

    <!-- Hospital Sections -->
    <div class="form-group col-sm-6 col-md-4">
      <?php
        include("dbc.php");
        $qqq = "SELECT DISTINCT section_name FROM hospital_sections ORDER BY section_name";
        $rrr = mysqli_query($dbc,$qqq);
        while ($row = mysqli_fetch_array($rrr)){
          $sections_array[] = $row['section_name'];
        }
        echo '<select class="form-control border-input" name="section_name">';
        echo '<option value="all">ALL</option>';
        foreach($sections_array as $sec){
          $selected = '';
          if($_POST['section_name'] == $sec) {
            $selected = 'selected="selected"';
          }
          echo '<option value="'.$sec.'"'.$selected.'>'.$sec.'</option>';
        }
        echo '</select>';
      ?>
    </div>

    <!-- Room Number -->

    <!-- Qeblah Status -->
    <div class="form-group col-sm-6 col-md-4">
      <select class="form-control border-input" name="qeblah_status">
        <option <?php if($_POST['qeblah_status'] == "ALL") echo 'selected="selected"'; ?> value="all">ALL</option>
        <option <?php if($_POST['qeblah_status'] == "yes") echo 'selected="selected"'; ?> value="yes">Yes</option>
        <option <?php if($_POST['qeblah_status'] == "no") echo 'selected="selected"'; ?> value="no">No</option>
      </select>
    </div>

    <!-- Prayer Painting -->
    <div class="form-group col-sm-6 col-md-4">
      <select class="form-control border-input" name="prayer_painting">
        <option <?php if($_POST['prayer_painting'] == "ALL") echo 'selected="selected"'; ?> value="all">ALL</option>
        <option <?php if($_POST['prayer_painting'] == "yes") echo 'selected="selected"'; ?> value="yes">Yes</option>
        <option <?php if($_POST['prayer_painting'] == "no") echo 'selected="selected"'; ?> value="no">No</option>
      </select>
    </div>

    <!-- Fatwah -->
    <div class="form-group col-sm-6 col-md-4">
      <select class="form-control border-input" name="fatwa_status">
        <option <?php if($_POST['fatwa_status'] == "ALL") echo 'selected="selected"'; ?> value="all">ALL</option>
        <option <?php if($_POST['fatwa_status'] == "yes") echo 'selected="selected"'; ?> value="yes">Yes</option>
        <option <?php if($_POST['fatwa_status'] == "no") echo 'selected="selected"'; ?> value="no">No</option>
      </select>
    </div>

    <!-- Search Button -->
    <div class="form-group col-sm-6 col-md-4">
      <button type="submit" class="form-control btn btn-success btn-fill btn-wd" name="submit" value="Search"><i class="ti-search"></i> Search </button>
    </div>

  </form>
</div> <!-- .row Ends -->
<!-- Search Components Ends -->

<hr>

<!-- Search Results -->

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $username = $_POST['username'];
    $section_name = $_POST['section_name'];
    $qeblah_status = $_POST['qeblah_status'];
    $prayer_painting = $_POST['prayer_painting'];
    $fatwa_status = $_POST['fatwa_status'];
    ?>

    <!-- The Table -->
    <div class="row">
      <div class="col-md-12">
        <div class="card">
          <div class="content table-responsive table-full-width">
            <table class="table table-striped table-bordered" style="border-style: hidden;">
              <thead>
                <th>Username</th>
                <th>Section Name</th>
                <th>Room Number</th>
                <th>Qeblah</th>
                <th>Prayer Painting</th>
                <th>Fatwah</th>
                <th>Condition</th>
              </thead>
              <tbody>
              <?php
                        $selected_username = "";
                        if($username != 'All'){
                            $selected_username = "username = '$username'";
                        }
                        $selected_section_name = "";
                        if($section_name != 'All'){
                            $selected_section_name = "section_name = '$section_name'";
                        }
                        $selected_qeblah_status = "";
                        if($qeblah_status != 'All'){
                            $selected_qeblah_status = "qeblah_status = '$qeblah_status'";
                        }
                        $selected_prayer_painting = "";
                        if($prayer_painting != 'All'){
                            $selected_prayer_painting = "prayer_painting = '$prayer_painting'";
                        }
                        $selected_fatwa_status = "";
                        if($fatwa_status != 'All'){
                            $selected_fatwa_status = "fatwa_status = '$fatwa_status'";
                        }
                include("dbc.php");
                $q = "SELECT * FROM reports WHERE $selected_username AND $selected_section_name AND $selected_qeblah_status AND $selected_prayer_painting AND $selected_fatwa_status";
                $r = mysqli_query($dbc, $q);
                  while ($row = mysqli_fetch_array($r)){
                    echo "<tr>";
                      echo "<td>".$row['username']."</td>";
                      echo "<td>".$row['section_name']."</td>";
                      echo "<td>".$row['room_number']."</td>";
                      echo "<td>".$row['qeblah_status']."</td>";
                      echo "<td>".$row['prayer_painting']."</td>";
                      echo "<td>".$row['fatwa_status']."</td>";
                      echo "<td>".$row['report_status']."</td>";
                    echo "</tr>";
                  }
              ?>
            </tbody>
            </table>
          </div> <!-- .content Ends -->
        </div> <!-- .card Ends -->
      </div> <!-- .col-md-12 Ends -->
    </div> <!-- .row Ends -->
  }

<!-- Search Results Ends -->

</div> <!-- .container-fluid Ends -->
</div> <!-- .content Ends -->

【问题讨论】:

    标签: php mysql select search selectlist


    【解决方案1】:

    我没有提出解决方案,而是亲自编写了代码。我稍微修改了页面以使其在没有数据库的情况下工作。重要的部分是底部。

    我拿出了表格格式,我专注于根据用户的选择动态构建查询。理解:

    • 当用户选择 ALL 时,没有可过滤的内容,因此 $query 中甚至都没有提及。
    • 如果用户为所有字段选择 ALL,则查询中不需要 WHERE 子句($query 保持为空)。
    • 在用户选择多个字段而不是 ALL 时,每个 WHERE 项必须用“AND”分​​隔。所以我们必须在 $query 中添加“AND”。

    所以我生成和测试的代码是这样的(底部部分,其余部分我没有改):

    <div class="content table-responsive table-full-width">
              <?php
                        $where = "";
                        $query = "";
    
                        if($username != 'all'){
                            $query = "username = '$username'";
                            $where = "WHERE ";
                        }
    
                        if($section_name != 'all'){
                            if (strlen($query) != 0)
                            {
                                $query = $query . " AND ";
                            }
                            $query = $query . "section_name = '$section_name'";
                            $where = "WHERE ";
                        }
    
                        if($qeblah_status != 'all'){
                            if (strlen($query) != 0)
                            {
                                $query = $query . " AND ";
                            }
                            $query = $query . "qeblah_status = '$qeblah_status'";
                            $where = "WHERE ";
                        }
    
                        if($prayer_painting != 'all'){
                            if (strlen($query) != 0)
                            {
                                $query = $query . " AND ";
                            }
                            $query = $query . "prayer_painting = '$prayer_painting'";
                            $where = "WHERE ";
                        }
    
                        if($fatwa_status != 'all'){
                            if (strlen($query) != 0)
                            {
                                $query = $query . " AND ";
                            }
                            $query = $query . "fatwa_status = '$fatwa_status'";
                            $where = "WHERE ";
                        }
    
                $q = "SELECT * FROM reports $where $query";
                echo "<h1>$q</h1>\n";
              ?>
          </div>
    

    因此您的查询会动态变化。然后您可以运行它并显示输出。 希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      根据我理解您的问题的方式,您希望修改 $q 查询以查找被选为“ALL”的项目。

      查询限制了 WHERE 部分中返回值的数量。因此,如果用户选择 ALL,只需删除该部分查询即可。

      我会为用户名部分做,其余的你可以使用相同的概念:

      $username_part = "";
      if ($username != 'ALL')
      {
          $username_part = "username = '$username' AND";
      }
      
      $q = "SELECT * FROM reports WHERE $username_part section_name = '$section_name' AND qeblah_status = '$qeblah_status' AND prayer_painting = '$prayer_painting' AND fatwa_status = '$fatwa_status'";
      

      这样,如果用户选择了 ALL,您就不用在其上指定 WHERE 条件。你把它全部拿走。如果用户选择一个值,它会根据用户的选择在 WHERE 中添加一个条件。

      由您管理此类查询的结果 :-) 显然,如果用户名被命名为“ALL”,你就有问题了:-)

      【讨论】:

      • 逻辑上你的答案是对的。但是,我不知道为什么它直到现在才对我起作用。我会再试一次。
      • 我注意到“”并没有从数据库中获取所有数据!对于将在查询中执行的 $username_part 的值还有其他想法吗?
      • 你怎么看?
      • 是的...我查看了我的代码,如果没有一些 tweeking 它将无法工作...完成。我以前的版本是在做 WHERE AND section_name = ... 不好。但想法是,如果用户选择 ALL,则不要在 SQL 语句的 WHERE 部分中包含该部分。
      • 是的,我已经更新了查询,使其具有与 $username_part 相同的概念,但它不起作用。
      猜你喜欢
      • 2018-06-26
      • 2016-08-28
      • 2022-07-26
      • 2015-10-08
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多