2017-01-06 55 views
0

我剛開始使用http_build_query。我已經將它實現爲我的分頁腳本,但它不能正常工作。http_build_query添加20到分頁

我期待的是我的網址爲http://example.com/categories.php?cat=category&page=2,但由於某種原因,它將20添加到我的頁碼中,使得網址像http://example.com/categories.php?cat=category&page=22 <<< This is actually for page 2那樣。

這是我原來的腳本:

$img_start=0; 
    $img_limit=8; 

    if(isset($_GET['page'])) { 
    $page=$_GET['page']; 
    $img_start=($page-1)*$img_limit; 
    } 
    else { $page = 1; } 

    if($_COOKIE['age_verification'] == "adult") { 
    $img_total = mysqli_num_rows(mysqli_query($conn, "select * from gallery_img WHERE $cat = 1")); 
    } 
    else if($_COOKIE['age_verification'] == "child") { 
    $img_total = mysqli_num_rows(mysqli_query($conn, "select * from gallery_img WHERE $cat = 1 AND WHERE nude != 1")); 
    } 
    $img_total_count = ceil($img_total/$img_limit); 

    if($img_limit != $img_total) { 
    echo '<nav aria-label="Page navigation"> 
     <ul class="pagination">' . PHP_EOL; 
    if($page>1) { 
    echo '<li><a href="?page='.($page-1).'" aria-label="Previous"><span aria-hidden="true">Previous</span></a></li>' . PHP_EOL; 
    } 
    for($i=1;$i<=$img_total_count;$i++) { 
    if($i==$page) { echo "<li class='active'><a href='?page=".$i."'>".$i."</a></li>" . PHP_EOL; } 
    else { echo "<li><a href='?page=".$i."'>".$i."</a></li>" . PHP_EOL; } 
    } 
    if($page!=$img_total_count) { 
    if(!isset($page)) { echo '<li><a href="?page='.($page+2).'" aria-label="Next"><span aria-hidden="true">Next</span></a></li>' . PHP_EOL; } 
    else { echo '<li><a href="?page='.($page+1).'" aria-label="Next"><span aria-hidden="true">Next</span></a></li>' . PHP_EOL; } 
    } 

echo '</ul> 
     </nav>' . PHP_EOL; 
    } 

然後,這些都是我修改了線,正在添加20我的頁碼:

$pageParameters = http_build_query(array_merge($_GET, array("page"=>2))); 

    if($img_limit != $img_total) { 
    echo '<nav aria-label="Page navigation"> 
     <ul class="pagination">' . PHP_EOL; 
    if($page>1) { 
    echo '<li><a href="'.htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").($page-1).'" aria-label="Previous"><span aria-hidden="true">Previous</span></a></li>' . PHP_EOL; 
    } 
    for($i=1;$i<=$img_total_count;$i++) { 
    if($i==$page) { echo "<li class='active'><a href='".htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").$i."'>".$i."</a></li>" . PHP_EOL; } 
    else { echo "<li><a href='".htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").$i."'>".$i."</a></li>" . PHP_EOL; } 
    } 
    if($page!=$img_total_count) { 
    if(!isset($page)) { echo '<li><a href="'.htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").($page+2).'" aria-label="Next"><span aria-hidden="true">Next</span></a></li>' . PHP_EOL; } 
    else { echo '<li><a href="'.htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").($page+1).'" aria-label="Next"><span aria-hidden="true">Next</span></a></li>' . PHP_EOL; } 
    } 

echo '</ul> 
     </nav>' . PHP_EOL; 
    } 

爲什麼會變成這樣增加20到我的網頁號碼?

回答

1

您的代碼不加入20到現有的頁碼,你實際上是在這裏串聯,這是錯誤的。請看下面的代碼片段,

... htmlspecialchars("$_SERVER[PHP_SELF]?$pageParameters").($page-1) ... 
                 ^see here 

如果您現有的網址是http://example.com/categories.php?cat=category&page=22只會看到上述操作後追加,使其http://example.com/categories.php?cat=category&page=22。這對於所有使用上述操作的情況都適用。所以將改變你的分頁的解決方案將部分是這樣的:

parse_str($_SERVER["QUERY_STRING"], $url_array); 
unset($url_array['page']); 
$pageParameters = http_build_query($url_array); 

if($img_limit != $img_total) { 
    echo '<nav aria-label="Page navigation"><ul class="pagination">'; 
    if($page>1) { 
     ?> 
     <li><a href="<?php echo $_SERVER['PHP_SELF'].'?page='.($page-1); echo isset($pageParameters) && !empty($pageParameters) ? "&" . $pageParameters : ""; ?>" aria-label="Previous"><span aria-hidden="true">Previous</span></a></li> 
     <?php 
    } 
    for($i=1;$i<=$img_total_count;$i++) { 
     if($i==$page) { 
      ?> 
      <li class='active'><a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$i; echo isset($pageParameters) && !empty($pageParameters) ? "&" . $pageParameters : ""; ?>"><?php echo $i; ?></a></li> 
      <?php 
     } 
     else { 
      ?> 
      <li><a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$i; echo isset($pageParameters) && !empty($pageParameters) ? "&" . $pageParameters : ""; ?>"><?php echo $i; ?></a></li> 
      <?php 
     } 
    } 
    if($page!=$img_total_count) { 
     if(!isset($page)) { 
      ?> 
      <li><a href="<?php echo $_SERVER['PHP_SELF'].'?page='.($page+2); echo isset($pageParameters) && !empty($pageParameters) ? "&" . $pageParameters : ""; ?>" aria-label="Next"><span aria-hidden="true">Next</span></a></li> 
      <?php 
     }else { 
      ?> 
      <li><a href="<?php echo $_SERVER['PHP_SELF'].'?page='.($page+1); echo isset($pageParameters) && !empty($pageParameters) ? "&" . $pageParameters : ""; ?>" aria-label="Next"><span aria-hidden="true">Next</span></a></li> 
      <?php 
     } 
    } 
    echo '</ul></nav>'; 
} 
0

看看你是如何打印鏈接..

前兩個來自該陣列

$pageParameters = http_build_query(array_merge($_GET, array("page"=>2))); 

pageParameters&page=2已經結束,那麼你添加任意號碼的URL結束,所以這些現在將打印&page=20&page=21

("$_SERVER[PHP_SELF]?$pageParameters").$i." 
("$_SERVER[PHP_SELF]?$pageParameters").($page-1) 
("$_SERVER[PHP_SELF]?$pageParameters").($page+1)