Non sono sicuro di quanto questo ti aiuterà, ma
1.) Dove è definito il tuo $uid? Forse era lì e me lo sono perso perché avevi MOLTO codice. Se è stato definito in un controller o in un altro tipo di file intermediario, forse quando hai cambiato pagina l'uid non è stato impostato?
2.) Se utilizzi la stessa paginazione più di una volta, creala in una funzione.
Presumo che i risultati che hai ottenuto fossero corretti utilizzando la query che stavi utilizzando, l'unico problema era che non mostrava i risultati corretti su altre pagine. Se questo è il caso, usa questa funzione che ho ottimizzato. (Potrebbe essere necessario modificarlo da solo, ad esempio la tua pagina potrebbe non leggere domain.com/pg=3 come fa la mia)
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
Utilizzare: (Sto usando la tabella "utenti" di base perché è semplice)
Scrivi una query per ottenere il numero totale di righe per quello che stai cercando. Esempio:
$getusers = mysql_query("SELECT * FROM users", $conn);
$total_users = mysql_num_rows($getusers)
$display_limit = "20" // display 20 users per page
quindi usa la prima funzione.
Pagination($total_users, $display_limit);
quindi esegui di nuovo la query, ma questa volta imposta i limiti in modo che vengano visualizzati solo 20 utenti per pagina.
$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
}
Quindi per visualizzare i collegamenti, utilizza la seconda query
PaginationLinks($url_to_go_to, $optional_tab_if_you_need_to_select_a_default_tab);
Questo dovrebbe funzionare per QUALSIASI query, non importa quanto complicata, purché la query sia corretta per cominciare. Mi sembrava che la tua richiesta fosse corretta, solo i risultati venivano visualizzati nella seconda pagina. In ogni caso, se quella funzione non funziona per te, dovresti comunque creare la tua impaginazione nella sua funzione, è troppo codice per essere scritto in più di una posizione.