【问题标题】:Select filter dropdown/pagination with only php仅使用 php 选择过滤器下拉列表/分页
【发布时间】:2021-09-28 01:26:04
【问题描述】:

我是这个网站的新手,而且对 PHP 还是很陌生,所以不确定这是否是我需要提出的问题,但这里是。我目前正在尝试使用 PHP 为我的表创建一个过滤器。

过滤器选项已经在我的数据库中;例如,我有一个当前包含 Snake 和 Lizard 的物种列。我已经设法在下拉列表中显示了选项,以便在选择时正确过滤蛇或蜥蜴,正确地过滤,正确地过滤,但是当我选择通过使用过滤的页面进行进度时的主要问题编号的导航按钮它会清除我的过滤器选项并再次显示数据库中的所有内容。是否可以锁定选择直到清除或选择另一个项目?

即如果我从下拉列表中选择 Lizard,是否可以保留此选择,直到选择另一个选项。

澄清一下,我使用的是 PHP。

`

if (!empty($_POST['dropdown']) && $_POST['dropdown'] == 'snake') {

    
       $sql = "SELECT * FROM animal where species = 'snake' and  user = '$username' LIMIT $start_from,".$limit;

    $all_data=mysqli_query($con,$sql);
    $user_count = mysqli_fetch_row($all_data);   // say total count 9  
    $total_records = $user_count[0];   //9
    $total_pages = ceil($total_records / $limit);    // 9/3=  3
   

}



else if(!empty($_POST['dropdown']) && $_POST['dropdown'] == 'lizard') {

      $sql = "SELECT * FROM animal where species = 'lizard' and  user = '$username' LIMIT $start_from,".$limit;

    $all_data=mysqli_query($con,$sql);     //added 
    $user_count = mysqli_fetch_row($all_data);   // say total count 9  
    $total_records = $user_count[0];   //9
    $total_pages = ceil($total_records / $limit);    // 9/3=  3

}


else { //added 

$sql = "SELECT * FROM animal  where user = '$username' LIMIT $start_from,".$limit;  

    $all_data=mysqli_query($con,"select count(*) from animal where user = '$username'");
    $user_count = mysqli_fetch_row($all_data);   // say total count 9  
    $total_records = $user_count[0];   //9
    $total_pages = ceil($total_records / $limit);    // 9/3=  3

}



$num = 0;


// if($result = mysqli_query($con, $query)){
if($result = mysqli_query($con, $sql)){
    if(mysqli_num_rows($result) > 0){

       echo "<table>";

 
        while($row = mysqli_fetch_array($result)){
            if ($num++ % 4== 0 && $num > 1) echo '</tr><tr>';  
 
                 echo "<td>" . $row['animal'] . "</td>";


         // }
            // echo "</tr>";

        }
         // echo "</table>";
  }

}


    $current_page = isset($_GET['page'])?$_GET['page'] : 1;  

 
    for ($page = $start_page; $page <= $end_page; $page++){
            if ($total_pages > 0) {   

            if ($page == $current_page) {
    
                $active_class = "active";
                   
                 echo"<button class='btn' class='active' a href='room.php?page=".($page)."'>$page</a></button>";
    
    
                 echo "&nbsp;&nbsp;";
            } 
            
    
    
            // else {
                // else if ($num == $limit){
                else if ($num == $limit){
    
                echo '<a href="?page='.$page.'" class="btn">'.$page.'</a>';   
                 
                echo "&nbsp;&nbsp;";
    
        
    
        }
     
     }
    }
     

       echo "<form id='form_id' method='post' name='myform'>";
        echo "<select name='dropdown'>";
    
        // echo "<option value='All'>All</option>";
    
    if($result = mysqli_query($con, $sql)){
        if(mysqli_num_rows($result) > 0){
            while($row = mysqli_fetch_array($result)){
                  echo "<option name='all'>" . $row['species'] . "</option>";
    
     
        }
         echo "</select>";
         echo "<input id='submit' name='submit' type='submit' value='submit'>";
    
      echo "</form>";

` 这是从选项显示到页面到表格和带有分页的过滤器的抓取

【问题讨论】:

  • 原帖可以做一些澄清。听起来您在问如何让他们的 PHP 应用程序使用户选择的选项持久化。看来您有多种选择。但是,请注意您是否在 PHP 端或 Web 前端使用任何特定框架,这会有所帮助。您可以将值保留为 PHP 端的变量、浏览器端的变量、下拉选择是 ajax 调用以更新服务器端等。需要跟踪唯一会话。
  • 只有在数据库中才会显示多个选项。我对此表示赞同。目前不使用任何 ajax 我应该放我到目前为止的代码吗?并且它使用 select from 进行精细过滤,但选择名称更改回原始名称。所以下拉列表将是:蛇下面有蜥蜴。点击蜥蜴它会显示正确的数据,但选择会再次说蛇
  • 示例代码会有所帮助。根据您所说,当有人从下拉列表中选择蛇或蜥蜴时,PHP 代码应该采用它并更新生成的 HTML 以反映已选择的选项。
  • 是的,因为虽然它显示了蛇的结果,但如果我单击上一页,它将显示蛇的结果。抱歉忘了提及使用页码。我是这个网站的新手,我如何上传代码给你看?
  • 发现了问题。结果它显示的是 2 页蜥蜴,这是完美的,因为我每页有 2 个蜥蜴名称。对表格使用分页。但是,当我单击第 2 页时,它会在开头添加一个页面,其中包含蛇数据,就像它重置一样。

标签: php sorting filter pagination


【解决方案1】:

您的问题并不完全清楚,但也许您正在寻找selected 属性。

<select name="species">
    <option value="Snake">Snake</option>
    <option value="Lizard" selected>Lizard</option>
</select>

使用 PHP 你可以这样做:

<?php
$selectedSpecies = $_POST['species'];
?>

<select name="species">
    <?php foreach (['Snake', 'Lizard'] as $species) { ?>
        <option value="<?= $species; ?>" <?= $species === $selectedSpecies ? 'selected' : ''; ?>><?= $species; ?></option>
    <?php } ?>
</select>

【讨论】:

  • 我在想,但我希望从数据库中获取选项而不是预先设置一个
  • 好的,到目前为止,我已经添加了我的选项,如果你能看到它:)
  • 当然,它仍然可以工作,只需查看&lt;?= $species === $selectedSpecies ? 'selected' : ''; ?&gt; 部分并使其适应您的代码
  • 啊,过滤有效,但是使用上面我的代码示例中看到的选择代码,当我点击蜥蜴时,它会显示结果,但如果我点击蜥蜴,我有 2 页,它将显示正确的数字。但是,如果我单击第 2 页,它将在它之前添加另一个带有蛇形结果的页面,如果有意义的话,基本上将原始结果移动到第 2 页和第 3 页
  • 是否可以在不重新加载页面的情况下使用$_post?
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多