これがどれだけ役立つかはわかりませんが、
1.)$ uidはどこで定義されていますか?おそらくそれはそこにあり、あなたがたくさんのコードを持っていたので私はそれを逃しました。コントローラまたは他のタイプの仲介者ファイルで定義されている場合、ページを変更したときにuidが設定解除された可能性がありますか?
2.)同じページネーションを複数回使用している場合は、それを関数に作成します。
使用しているクエリを使用すると、得られた結果が正しいと思います。唯一の問題は、他のページに正しい結果が表示されなかったことです。その場合は、私が微調整したこの関数を使用してください。 (自分で微調整する必要があるかもしれません。たとえば、私のページのようにdomain.com/pg=3を読み取れない場合があります)
function Pagination($list, $limit){
global $pagination;
global $total_pages;
global $pg;
global $offset;
global $page_limit;
$page_limit = $limit;
global $total_results;
$total_results = $list;
global $offset;
// number of rows to show per page
// find out total pages
$total_pages = ceil($list / $limit);
// get the current page or set a default
if ($pagination) {
// cast var as int
$pg = $pagination;
} else {
// default page num
$pg = 1;
} // end if
// if current page is greater than total pages...
if ($pg > $total_pages || $pg == "last") {
// set current page to last page
$pg = $total_pages;
} // end if
// if current page is less than first page...
if ($pg <= 1 || $pg == "first") {
// set current page to first page
$pg = 1;
} // end if
// the offset of the list, based on current page
$offset = ($pg - 1) * $limit;
// get the info from the db
}
function PaginationLinks($url, $tab){
global $pg;
global $total_pages;
global $total_results;
global $page_limit;
global $offset;
$displayed_results = ($total_results - $offset);
if($displayed_results >= $page_limit && $total_results > $page_limit){
$displayed_results = $page_limit;
}
/****** build the pagination links ******/
// range of num links to show
$range = 5;
if($tab){
$tab = "?$tab";
}
// if not on page 1, don't show back links
if ($pg > 1) {
// show << link to go back to page 1
echo "<li class='pagination'><a href='$url/pg=first$tab'><<</a></li>";
// get previous page num
$prevpage = $pg - 1;
// show < link to go back to 1 page
echo "<li class='pagination'><a href='$url/pg=$prevpage$tab'><</a></li>";
} // end if
// loop to show links to range of pages around current page
for ($x = ($pg - $range); $x < (($pg + $range) + 1); $x++) {
// if it's a valid page number...
if (($x > 0) && ($x <= $total_pages)) {
// if we're on current page...
if ($x == $pg) {
// 'highlight' it but don't make a link
echo "<li class='current_page'>$x</li>";
// if not current page...
} else {
// make it a link
echo "<li class='pagination'><a href='$url/pg=$x$tab'>$x</a></li>";
} // end else
} // end if
} // end for
// if not on last page, show forward and last page links
if ($pg != $total_pages) {
// get next page
$nextpage = $pg + 1;
// echo forward link for next page
echo "<li class='pagination'><a href='$url/pg=$nextpage$tab'>></a></li>";
// echo forward link for lastpage
echo "<li class='pagination'><a href='$url/pg=last$tab'>>></a></li>";
} // end if
/****** end build pagination links ******/
echo "<div style='float:right; align: right; margin-top: 10px'>Displaying <font class='f2'>$displayed_results</font> of <font class='f2'>$total_results</font> results</div>";
} // end pagination links function
使用するには: (単純なため、基本的な「ユーザー」テーブルを使用しています)
1つのクエリを記述して、探しているものの合計行数を取得します。例:
$getusers = mysql_query("SELECT * FROM users", $conn);
$total_users = mysql_num_rows($getusers)
$display_limit = "20" // display 20 users per page
次に、最初の関数を使用します。
Pagination($total_users, $display_limit);
次にクエリを再度実行しますが、今回は制限を設定して、ページごとに20人のユーザーのみが表示されるようにします。
$getusers = mysql_query("SELECT * FROM users ORDER BY id DESC LIMIT $offset, $display_limit", $conn);
if($total_users == 0){
echo "There are no users at this time.";
}
else {
// for each user
while ($rowuserss = mysql_fetch_assoc($getusers)) {
// echo data
$user_id = $rowusers['id'];
$username = $rowusers['username'];
// etc etc
}
次に、リンクを表示するには、2番目のクエリを使用します
PaginationLinks($url_to_go_to, $optional_tab_if_you_need_to_select_a_default_tab);
これは、クエリが最初から正しい限り、どんなに複雑であっても、どのクエリでも機能するはずです。あなたの質問は正しかったように私には聞こえました、ちょうど結果が2ページ目に表示されていました。いずれにせよ、その関数が機能しない場合でも、独自の関数にページネーションを作成する必要があります。これは、複数の場所に書き出すにはコードが多すぎます。