【问题标题】:MySQL PHP Sortable table columns with pagination带有分页的 MySQL PHP 可排序表列
【发布时间】:2020-02-12 11:02:57
【问题描述】:

请帮忙。我的表格是分页的。当我单击列标题时,对列进行 ASC 或 DESC 排序。很好,这对所有列都完成了。我的问题是,当我单击第二个或第三个页面或任何其他页面时,我在单击的页面上看不到同一列的排序项目的延续。它现在的作用是在单击的页面上显示排序项目的延续,但对于数组索引 0 列。

我的代码如下。您的帮助将不胜感激。我对这件事完全陌生。提前谢谢你。

我的代码:

     <?php
     require_once "db.php";
     $columns = array('date', 'mname', 'amount');
     $column = isset($_GET['column']) && in_array($_GET['column'], $columns) ? $_GET['column'] :   $columns[0];
     $sort_order = isset($_GET['order']) && strtolower($_GET['order']) == 'desc' ? 'DESC' : 'ASC';

     $perpage = 5;
     if(isset($_GET['page']) & !empty($_GET['page'])){
     $curpage = $_GET['page'];
     }else{
     $curpage = 1;
     }
     $start = ($curpage * $perpage) - $perpage;
     $PageSql = "SELECT * from `save`";
     $pageres = mysqli_query($link, $PageSql);
     $totalres = mysqli_num_rows($pageres);

     $endpage = ceil($totalres/$perpage);
     $startpage = 1;
     $nextpage = $curpage + 1;
     $previouspage = $curpage - 1;
     $ReadSql = "select date, mname, saving from save ORDER BY $column $sort_order LIMIT $start,    $perpage";
     $result = mysqli_query($link, $ReadSql);
    ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <style> </style>
    <title>Table Sort with Pagination - MySQL and PHP</title>
    </head>
    <body>

    <div class="pageno">
    <nav aria-label="Page navigation">
    <ul class="pagination">
    <?php if($curpage != $startpage){ ?>
    <li class="page-item">
    <a class="page-link" href="?page=<?php echo $startpage ?>" tabindex="-1" aria-label="Previous">
    <span aria-hidden="true">&laquo;</span>
    <span class="sr-only">First</span>
    </a>
    </li>
    <?php } ?>
    <?php if($curpage >= 2){ ?>
    <li class="page-item"><a class="page-link" href="?page=<?php echo $previouspage ?>"><?php echo $previouspage ?></a></li>
    <?php } ?>
    <li class="page-item active"><a class="page-link" href="?page=<?php echo $curpage ?>"><?php echo $curpage ?></a></li>
    <?php if($curpage != $endpage){ ?>
    <li class="page-item"><a class="page-link" href="?page=<?php echo $nextpage ?>"><?php echo $nextpage ?></a></li>
    <li class="page-item">
    <a class="page-link" href="?page=<?php echo $endpage ?>" aria-label="Next">
    <span aria-hidden="true">&raquo;</span>
    <span class="sr-only">Last</span>
    </a>
    </li>
    <?php } ?>
    </ul>
    </nav>
    </div>

    </body>
    </html>
    <?php

    if($result = mysqli_query($link, $ReadSql)){
    $up_or_down = str_replace(array('ASC','DESC'), array('up','down'), $sort_order); 
    $asc_or_desc = $sort_order == 'ASC' ? 'desc' : 'asc';
    $add_class = ' class="highlight"';
    if(mysqli_num_rows($result) > 0){
    $row_count=0;
    echo '<div class="containerparticulars">';
    echo "<table class='table table-bordered table-striped'>";
    echo "<thead>";
    echo "<tr>";
    ?>

    <th><a href="help1.php?column=date&order=<?php echo $asc_or_desc; ?>">Date<i class="fas fa-sort<?php echo $column == 'date' ? '-' . $up_or_down : ''; ?>"></i></a></th>
    <th><a href="help1.php?column=mname&order=<?php echo $asc_or_desc; ?>">Member Name<i class="fas fa-sort<?php echo $column == 'mname' ? '-' . $up_or_down : ''; ?>"></i></a></th>
    <th><a href="help1.php?column=saving&order=<?php echo $asc_or_desc; ?>">Saving<i class="fas fa-sort<?php echo $column == 'saving' ? '-' . $up_or_down : ''; ?>"></i></a></th>

    <?php
    echo "</tr>";
    echo "</thead>";
    echo "<tbody>";
    while($row = mysqli_fetch_array($result)){
    echo "<tr>";
    ?>

    <td<?php echo $column == 'date' ? $add_class : ''; ?>><?php echo $row['date']; ?></td>
    <td<?php echo $column == 'mname' ? $add_class : ''; ?>><?php echo $row['mname']; ?></td>
    <td<?php echo $column == 'saving' ? $add_class : ''; ?>><?php echo number_format($row['saving'],2); ?></td>

    <?php
    echo "</tr>";
    }
    echo "</tbody>";                            
    echo "</table>";
    echo '</div>';
    mysqli_free_result($result);
    } 

    else{
    echo "<No records were found.";
    }
    } 
    else
    {
    echo "ERROR: Could not able to execute $link. " . mysqli_error($link);
    }
    mysqli_close($link);
    ?>

【问题讨论】:

    标签: php mysql sorting pagination


    【解决方案1】:

    您需要在更改页面的链接中添加排序子句:

    <a class="page-link" href="?column=<?php echo $column;?>&order=<?php echo $sort_order;?>&page=<?php echo $previouspage ?>"><?php echo $previouspage ?></a>
    <a class="page-link" href="?column=<?php echo $column;?>&order=<?php echo $sort_order;?>&page=<?php echo $curpage ?>"><?php echo $curpage ?></a>
    <a class="page-link" href="?column=<?php echo $column;?>&order=<?php echo $sort_order;?>&page=<?php echo $nextpage ?>"><?php echo $nextpage ?></a>
    <a class="page-link" href="?column=<?php echo $column;?>&order=<?php echo $sort_order;?>&page=<?php echo $endpage ?>" aria-label="Next"></a>
    

    【讨论】:

    • 非常感谢。你的解决方案奏效了。所以它必须如下所示:
    • 第一个
    【解决方案2】:

    您应该尝试使用 DataTables,它会为您进行排序和搜索。您可以查看以下链接中的示例:

    https://legacy.datatables.net/examples/data_sources/server_side.html

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签