2016-08-14 4 views
0

2つの変数のページングに苦労しています。そのうちの1つはページ番号です。複数のGET変数を使用したPHPページネーション

私が持っている変数$_GETは、$_GET['cat']です。フィルタリングしたい製品のカテゴリを取得しています。

すべてはページングのDISPLAY、ページ数などで動作しますが、特定のカテゴリでフィルタリングされていると結果の最初のページが表示されますが、次のページまたはページ番号製品の賢明さは何も表示されません。

下記のコードを参考にしてください。

<?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"); ?> 
+2

あなたのコードでは、[SQL-注射](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)に対して脆弱です。 Prepared、Parameterized Queriesを使用してください。 –

+0

これはホストされないため、変数の保護には慎重ではありません。私は現時点でlocalhostだけを使っていくつかの練習をしようとしています。 –

+0

なぜデータベースを2回クエリしますか?削除します。 –

答えて

0

まあ、ページパラメータを定義します。しかしカテゴリパラメータはリンク上で一度クリックすると失われます。なぜなら、それは単にそこにないからです。

あなたはこれを持っている:

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

あなたは、パラメータの猫を欠いています。ここでは例です:

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

残念ながら、これは問題を解決しませんでした。正しいパラメータが設定されていても、1ページ目以降は何も表示されません。 –

関連する問題