いくつかのチュートリアルから簡単でシンプルなページネーションを実行しようとしてこの問題に直面しましたが、どうやらそれが本来あるべき方法で機能していないようです..よくコメントアウトされたコードを投稿して、私が直面している問題をプレビューさせてください:-
まず第一に、次のコードを持つ FAQ_content という名前のファイルがあります: -
<?php
include ('config/setup.php'); //database connection file!
##Database Retrieval Query: -
##FAQ_Retrieval_Query: -
##Pagination Logic
//This Query is Only to get the number of rows.. we'll use a second part downstairs.
$FAQ_query="SELECT * FROM FAQ_content ORDER BY id ASC ";
$data1 = mysql_query($FAQ_query);
$nr = mysql_num_rows($data1); // counts the number of entries within the database table.
if (isset ($_GET['pn']))
{
$pn=preg_replace('#[^0-9]#i','',$_GET['pn']); //filters everything but numbers for security
}else {// if the URL variable has no $pn then it will be set to 1.
$pn=1;
}
$itemsPerPage= 5; //How many items do we wanna view per page?
$lastPage = ceil($nr/$itemsPerPage); //number of entries in the database divided by the number we wanna show per page.
if ($pn <1) {
// if the pagenumber is less than 1, then it'll be forced to one,
//and if it's larger than last page, it'll be forced to last page.
$pn=1;}
else if ($pn>$lastPage){
$pn = $lastPage;
}
//Creating the Numbers to click between next and back buttons..
$centerPages = ""; //just initiating the variable.
$sub1 = $pn - 1;
$sub2 = $pn - 2;
$add1 = $pn + 1;
$add2 = $pn + 2;
if ($pn == 1)
{
$centerPages .= ' <span class="pagNumActive">'.$pn.'</span> ';
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$add1.'">'.$add1.'</a> ';
}else if ($pn == $lastPage)
{
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$sub1.'">'.$sub1.'</a> ';
$centerPages .= ' <span class="pagNumActive">'.$pn.'</span> ';
}else if ($pn > 2 && $pn < ($lastPage-1)) {
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$sub2.'">'.$sub2.'</a> ';
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$sub1.'">'.$sub1.'</a> ';
$centerPages .= ' <span class="pagNumActive">'.$pn.'</span> ';
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$add1.'">'.$add1.'</a> ';
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$add2.'">'.$add2.'</a> ';
}else if ($pn >1 && $pn < $lastPage) {
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$sub1.'">'.$sub1.'</a> ';
$centerPages .= ' <span class="pagNumActive">'.$pn.'</span> ';
$centerPages .= ' <a href="' .$_SERVER['PHP_SELF'].'?pn='.$add1.'">'.$add1.'</a> ';
}
//Setting the limit range for the number of data retrieved and the items per page.
$limit = 'LIMIT ' .($pn - 1) * $itemsPerPage .',' .$itemsPerPage;
$FAQ_query2=mysql_query("SELECT * FROM FAQ_content ORDER BY id ASC $limit " , $dbc) or die(mysql_error());
##Pagination Logic End-- :(
##Pagination Display Options : -
$paginationDisplay = "";// just initialising..
//This condition runs only if the last page is not equal to 1, if it is equal to 1, then we don't require links.
if ($lastPage != "1") {
//showing the user what page he is on, and what number of pages are there..
$paginationDisplay .= 'Page <strong>' .$pn. '</strong> of' .$lastPage. '<img src="images/clearimage.png" width="48px" height="1px" alt="Spacer"/>';
//if we're not on page 1 we can place a back button ^_^
if ($pn != 1) {
$previous = $pn - 1;
$paginationDisplay .= ' <a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'"> Back </a>';
}
//Lay in the clickable numbers display here between the back and next links ^_^.
$paginationDisplay .='<span class="paginationNumbers">'.$centerPages.'</span>';
//If we're not on the very last page, a next button is placed :-
if ($pn != $lastPage) {
$nextPage = $pn +1;
$paginationDisplay .= ' <a href="'.$_SERVER['PHP_SELF'].'?pn='.$nextPage.'"> Next </a>';
}
}
?>
これは、表示方法をフォーマットするページネーション表示に加えて、すべてのページネーション規則とロジックを含む最初のファイルです..問題自体に移ります..
上記のファイルを、データを表示したいメイン ファイルに含めました (ヒント: 前のクエリのデータベースには 23 エントリがあり、numrows が 23 エントリを表示することをテストしました)。データベースには 23 のエントリがあり、id、title、text の 3 つのフィールドがあります。title はおそらくヘッダーであり、text は取得する各 FAQ の本文です。問題が発生する可能性のあるコードは次のとおりです。 -
<div class="FAQWrapper">
<?php
include ('content/FAQ-content.php');
$output1='';
$output2='';
while ($row = mysql_fetch_array($FAQ_query2)) {
$title = $row['title'];
$text = $row['text'];
$output ='<div class="FAQInstance">
<div class="FAQHeader"><h2>'.$title.'</h2></div><div class="FAQDetails"><p>'.$text.'</p></div></div>';
//$output2 ='<div class="FAQDetails"><p>'.$text.'</p></div>';
}
?>
<!--FAQ Instance Start-->
<?php echo $output; ?>
<!--FAQ Header Start-->
<!--FAQ Header Ends-->
<!--FAQ Details Start-->
<!--FAQ Details Ends-->
<!--FAQ Instance Ends-->
<!--Pagination Display Start-->
<div style="margin-left:58px; margin-right:58px; padding:6px; background-color:#FFF; border:#999 1px solid; float:right;"><?php echo $paginationDisplay; ?></div>
<!--Pagination Display Ends-->
</div>
<!-- FAQ Content Ends-->
私が得ているの は:
私がやろうとしているのは、ページごとに5つのアイテムを表示することです..それらはdivに分割されます.FAQラッパーは、同じレベルに2つのネストされたdivを保持する大きなラッパーであり、ヘッダーdivと詳細div..ヘッダーがタイトルを取ります詳細はデータベース内のテキストを取得し、それをヘッダーに関連付けます..それが私がやりたいすべてです..
私はあなたの助けに本当に感謝しています..これまでに提供した大量の情報に加えて、何か情報が必要な場合はお知らせください.