2017-01-06 8 views
0

私はちょうどhttp_build_queryを使い始めました。私はそれを私のページ分割スクリプトに実装しましたが、正しく動作しません。http_build_queryページングに20を追加

URLはhttp://example.com/categories.php?cat=category&page=2であることが予想されますが、なんらかの理由で、http://example.com/categories.php?cat=category&page=22 <<< This is actually for page 2のようなURLを作成するページ番号に20が追加されています。ここで

は私の元のスクリプトです:

$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

など、&page=21&page=20を印刷しますを既存のページ番号に追加すると、実際にここで連結が行われていますが、これは間違っています。既存のURLがhttp://example.com/categories.php?cat=category&page=2ある場合は、次のコードスニペットで

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

を見て、2は単にそれ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

あなたがリンクを印刷している方法を見..

最初の2すでに&page=2で終わり、その後、あなたは、URLの末尾に任意の番号を追加

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

pageParametersこの配列から来ていますので、これらは今、あなたのコードはを追加されていない

("$_SERVER[PHP_SELF]?$pageParameters").$i." 
("$_SERVER[PHP_SELF]?$pageParameters").($page-1) 
("$_SERVER[PHP_SELF]?$pageParameters").($page+1) 
関連する問題