PHP分页与多个GET变量

时间:2016-08-14 17:43:25

标签: php variables pagination get

我正在努力与2个获取变量进行分页 - 其中1个是页码。

我的第二个$_GET变量是$_GET['cat'],它正在获取我要过滤的产品类别。

所有内容都适用于分页显示,页数等,但是,如果我按特定类别进行过滤,结果的第一页显示正常,但是当我尝试转到下一页或任何页码时,什么都没有显示产品明智。

如有任何帮助,请参阅以下代码。

<?php include("header.php");
echo '<div id="content_header"><center><h1> • Products • </h1></center></div>';
echo '<div id="products_left">
                Show:<br />
                <ul style="list-style-type:none; margin:0; padding:0;">
                    <li><a href="?cat=wedding">Wedding Stationery</a></li>
                    <li><a href="?cat=frame">Frames</a></li>
                    <li><a href="?cat=nappy">Nappy Cakes</a></li>
                    <li><a href="?cat=misc">Miscellaneous</a></li>
                    <li><a href="/michelle/products.php">All</a></li>
                </ul>
            </div>';
echo '<div id="clear"></div>';
echo '<div style="padding-left:150px; margin-top:-70px">';
$connect = mysqli_connect("localhost","root","") or die("Failed to connect to database");
mysqli_select_db($connect,"magical_moments") or die("Unable to find database");

if(empty($_GET['cat'])){
    $query = mysqli_query($connect,"SELECT * FROM products");
} else {
    $cat = $_GET['cat'];
    $query = mysqli_query($connect,"SELECT * FROM products WHERE type='$cat'");

};

$products = mysqli_fetch_array($query);

$start = 0;
$limit = 9;

if(isset($_GET['page']))
{
    $pid=$_GET['page'];
    $start=($pid-1)*$limit;
}
else{
    $pid=1;
}
//Fetch from database first 10 items which is its limit. For that when page open you can see first 10 items.
if(empty($_GET['cat'])){
    $query = mysqli_query($connect,"SELECT * FROM products LIMIT $start, $limit");
} else {
    $cat = $_GET['cat'];
    $query = mysqli_query($connect,"SELECT * FROM products WHERE type='$cat' LIMIT $start, $limit");

};

?>
<ul>
<?php
//print 10 items
while($result=mysqli_fetch_array($query))
{
        echo '<div id="display_product">
                        <table>
                        <tr>
                            <td><div id="product_image_holder" style="background-image:url('.$result[5].')"></div></td>
                        </tr>
                            <tr>
                                <td>'.$result[1].'</td>
                            </tr>
                            <tr>
                                <td>'.$result[3].'</td>
                            </tr>
                            <tr>
                                <td>£ '.$result[4].'</td>
                            </tr>
                        </table>
                    </div>';
}
echo '<div id="clear"></div>';
?>
</ul>
<?php
//fetch all the data from database.


echo '<div id="pagination_div">';

if(empty($_GET['cat'])) {

    $rows=mysqli_num_rows(mysqli_query($connect,"SELECT * FROM products"));
    //calculate total page number for the given table in the database
    $total=ceil($rows/$limit);

if($pid>1)
{
    //Go to previous page to show previous 10 items. If its in page 1 then it is inactive
    echo "<a href='?page=".($pid-1)."' class='previous_button'>PREVIOUS</a>";
}
if($pid!=$total)
{
    ////Go to previous page to show next 10 items.
    echo "<a href='?page=".($pid+1)."' class='next_button'>NEXT</a>";
}

//show all the page link with page number. When click on these numbers go to particular page.
        for($i=1;$i<=$total;$i++)
        {
            if($i==$pid) { echo "<li class='current'>".$i."</li>"; }

            else { echo "<li class='pagination'><a href='?page=".$i."'>".$i."</a></li>"; }
        }
        echo '</div>';

} else {

    $rows=mysqli_num_rows(mysqli_query($connect,"SELECT * FROM products WHERE type='$cat'"));
    //calculate total page number for the given table in the database
    $total=ceil($rows/$limit);

     // cat is set - pagination for cat + page

     if($pid>1)
     {
        //Go to previous page to show previous 10 items. If its in page 1 then it is inactive
        echo "<a href=".$_SERVER['REQUEST_URI']."?page=".($pid-1)." class='previous_button'>PREVIOUS</a>";
     }
     if($pid!=$total)
     {
        ////Go to previous page to show next 10 items.
        echo "<a href=".$_SERVER['REQUEST_URI']."?page=".($pid+1)." class='next_button'>NEXT</a>";
     }

     //show all the page link with page number. When click on these numbers go to particular page.
            for($i=1;$i<=$total;$i++)
            {
                if($i==$pid) { echo "<li class='current'>".$i."</li>"; }

                else { echo "<li class='pagination'><a href=".$_SERVER['REQUEST_URI']."?page=".$i.">".$i."</a></li>"; }
            }
            echo '</div>';

        };

?>
</ul>
</div>
<?php include("footer.php"); ?>

1 个答案:

答案 0 :(得分:0)

好吧,你定义了page参数。但是一旦点击链接,类别参数就会丢失,因为它根本就不存在。

你有这个:

echo "<li class='pagination'><a href=".$_SERVER['REQUEST_URI']."?page=".$i.">".$i."</a></li>";

你缺少参数cat。这是一个例子:

echo '<li class="pagination"><a href="'.$_SERVER['REQUEST_URI'].'?page='.$i.'&cat='.$_GET['cat'].'">'.$i.'</a></li>';