Probleme numerotare script paginare

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
botavlad89
Mesaje: 13

Probleme numerotare script paginare

Salut ! Am si eu o problema , am folosit un script de paginare de pe situ tau si am o problmea . uite codul:

Cod: Selectaţi tot

$sql = "SET NAMES 'utf8'";
mysql_query($sql);

// Afla cate linii sunt in tabel (MODIFICATI 'nume_tb') din baza de date  
$sql = "SELECT COUNT(*) FROM `tblsource_code`";  
$result = mysql_query($sql) or trigger_error(E_USER_ERROR);  
$r = mysql_fetch_row($result);  
$numrows = $r[0];  
 
// Stabileste numarul de linii din tabel afisate in pagina 
$rowsperpage = 5;  
// afla numarul total necesar de pagini 
$totalpages = ceil($numrows / $rowsperpage);        // ceil face rotunjire la int. maxim
 
// Obtine pagina curenta sau seteaza default 
if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
  // seteaza variabila ca int 
  $currentpage = (int) $_GET['currentpage'];  
} else {  
  // pagina care este initial afisata (pagina default) 
  $currentpage = 1;  
}
 
// daca pagina curenta e mai mare decat total pagini...
if ($currentpage > $totalpages) {  
  // seteaza pagina curenta la ultima pagina  
  $currentpage = $totalpages;  
} 
// daca pagina curenta e mai mica decat prima pagina...  
if ($currentpage < 1) {  
  // seteaza pagina curenta la prima pagina   
  $currentpage = 1;  
} 
 
// lista cu pagini, in functie de pagina curenta   
$offset = ($currentpage - 1) * $rowsperpage;  
 
// obtine datele din tabel (MODIFICATI 'nume_tb') din baza de date  
$sql = "SELECT 
 tblsource_code.Id, 
 tblsource_code.IdUser, 
 tblsource_code.Descriere, 
 tblsource_code.SourceCode, 
 tblsource_code.IdCategorie,
 tblsource_code.Data,
 tblcategorieSource_code.ID, 
 tblcategoriesource_code.Denumire, 
 tblusers.username
 FROM tblsource_code 
 LEFT JOIN 
 tblcategoriesource_code 
 ON 
 tblsource_code.IdCategorie = tblcategoriesource_code.ID 
 LEFT JOIN 
 tblusers 
 ON 
 tblsource_code.IdUser = tblusers.IdUser
 WHERE access= 2 LIMIT $offset, $rowsperpage";  
$result = mysql_query($sql) or trigger_error(E_USER_ERROR);  
 
// parcurgerea matricei cu datele obtinute 
while ($list = mysql_fetch_assoc($result)) {  
  // - MODIFICATI numele coloanelor tabelului ('id' si 'texte')
  // Stocheaza datele returnate de MySQL in variabile array pt. fiecare coloana
            $descriere[] = $list["Descriere"];
            $SourceCode[] = $list["SourceCode"];
            $Categorie[] = $list ["Denumire"];
            $username = $list ["username"];
            $data = $list ["Data"];
            $id[] = $list ["Id"];
}
mysql_close();    // Incheie conexiunea cu mysql

/*** Afisarea datelor obtinute ***/
// Parcurge variabilele array setate in bucla WHILE
for($i=0; $i<count($id); $i++) {
  // Aici puteti adauga cod HTML pentru aspectul grafic al afisarii
echo '<input type="hidden" value='.$id[$i].'>';
echo "<p></br></br>$id[$i] ) &nbsp;$descriere[$i]</br></br></p>";
echo '<p><b>Source Code</b></p>';
echo '<center><textarea readonly="value" rows="25" cols="60" name="source_code" wrap="physical"> '.$SourceCode[$i].'</textarea></center>';
echo '<a href="/licenta/compilator/compilator.php?Id='.$id[$i].'"><center><img src="/licenta/images/send.png"></center></a>';
echo "<p class='post-footer'><span class='dated'>$data</span><span class='category'>$Categorie[$i]</span><span class='author'>$username</span></p>";
}

/*** Construirea link-urilor pt. paginare ***/ 
// raza nr. link-uri din jurul celui curent 
$range = 3;
 echo '<center>';
// Link-uri inapoi, daca pagina curenta nu e prima
if ($currentpage > 1) {  
  // arata << pt. link la prima pagina  
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> &nbsp; ";  
  // obtine nr. pagina din urma 
  $prevpage = $currentpage - 1;  
  // arata < pt. link la o pagina in urma 
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> &nbsp;";  
} 
 
// definirea link-urilor din raza paginii curente
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
  // daca e un nr. de pagina valid ... 
  if (($x > 0) && ($x <= $totalpages)) {  
     // daca nr. e pagina curenta ...  
     if ($x == $currentpage) {  
        // afiseaza nr. pagina fara a fi link  
        echo " [<b>$x</b>] ";  
     // daca nr. nu e pagina curenta ...  
     } else {  
        // il face link  
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
     }  
  }
}
          
// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
if ($currentpage != $totalpages) {  
  // obtine pagina urmatoare 
  $nextpage = $currentpage + 1;  
   // arata > pt. urmatoarea pagina   
  echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";  
  //  arata >> pt. ultima pagina
  echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";  
}
echo '</center>';
?>
Am doua problmeme aici :
prima problmea ar fi la notare , adica in loc sa puna 1,2,3,4,5 etc imi ia id din tabela .
si a doua problmea chiar daca nu depasesc $rowsperpage adica cum am pus eu 5 chiar daca am 4 tot imi arata a doua pagina! cum as putea sa numi arete ce afiseaza codu

Cod: Selectaţi tot

// Link-uri inapoi, daca pagina curenta nu e prima
if ($currentpage > 1) {  
  // arata << pt. link la prima pagina  
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> &nbsp; ";  
  // obtine nr. pagina din urma 
  $prevpage = $currentpage - 1;  
  // arata < pt. link la o pagina in urma 
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> &nbsp;";  
} 
 
// definirea link-urilor din raza paginii curente
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
  // daca e un nr. de pagina valid ... 
  if (($x > 0) && ($x <= $totalpages)) {  
	 // daca nr. e pagina curenta ...  
	 if ($x == $currentpage) {  
		// afiseaza nr. pagina fara a fi link  
		echo " [<b>$x</b>] ";  
	 // daca nr. nu e pagina curenta ...  
	 } else {  
		// il face link  
	echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
	 }  
  }
}
		  
// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
if ($currentpage != $totalpages) {  
  // obtine pagina urmatoare 
  $nextpage = $currentpage + 1;  
   // arata > pt. urmatoarea pagina   
  echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";  
  //  arata >> pt. ultima pagina
  echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";  
}
Numa cand chiar am peste 5 lini multumesc mult ! sper ca am fost destul de explicit !! mutumesc o zi buna

MarPlo Mesaje: 4343
Salut
Daca prin "notare" te referi la numerotarea inregistrarilor returnate, care in cod se face la linia asta:

Cod: Selectaţi tot

echo "<p></br></br>$id[$i] ) &nbsp;$descriere[$i]</br></br></p>";
Inlocuieste-o cu aceasta (foloseste $i de la for() ):

Cod: Selectaţi tot

echo '<p></br></br>'. ($i + 1). " ) &nbsp;$descriere[$i]</br></br></p>";
 
La a doua problema, incearca sa inlocuiesti:

Cod: Selectaţi tot

$totalpages = ceil($numrows / $rowsperpage);
Cu:

Cod: Selectaţi tot

/$totalpages = floor($numrows / $rowsperpage);
 

botavlad89 Mesaje: 13
Am facut cum mi-ai zis acuma au aparut alte 2 probleme :
1 ) cand dau sa treaca la pagina 2 de exemplu imi incepe numaratoare de la 1 din nou nu continua cu 6 cum ar trebuie .
2 ) daca dau floor in loc de ceil in loc de cate inregistrari am intabel imi apare cu 1 mai putin !

Poti sa ma ajuti ms mult !!

MarPlo Mesaje: 4343
Ar trebui lasat cu ceil(), am testat exemplu din arhiva cu scriptul "creare_tabel.php" si functioneaza cum trebuie, nu arata urmatoarea pagina daca nu mai sunt randuri.
Verifica cu "echo" sa vezi ce valori au variabilele $numrows si $currentpage .

Pt. numerotare, asa e, daca te folosesti de $i de la for(), incepe de la 1.
Incearca folosind si valoarea de la $offset , asa:

Cod: Selectaţi tot

echo '<p></br></br>'. ($i + 1 + $offset). " ) &nbsp;$descriere[$i]</br></br></p>";
 

botavlad89 Mesaje: 13
Problmea de numarotare intradevar merge ! este ok da cu paginare inca nu : poate fi si din cauza selectului din baza de date ?
Selectu:

Cod: Selectaţi tot

$sql = "SELECT 
tblsource_code.Id, 
 tblsource_code.IdUser, 
 tblsource_code.SourceCode, 
 tblsource_code.Data,
 tblusers.IdUser, 
 tblusers.username
 FROM tblsource_code
 LEFT JOIN 
 tblusers
 ON 
 tblsource_code.IdUser = tblusers.IdUser 
 WHERE access='1'
  LIMIT $offset, $rowsperpage ";  
Ms mult !

MarPlo Mesaje: 4343
Nu stiu daca e din cauza selectului, asta o poti afla depanand scriptul.
Vezi cate randuri returneaza, daca sunt indeplinite conditiile if() unde se adauga linkul de paginare.
Scriptul are destule explicatii in el, daca ii intelegi logica, rescrii /modifici codul unde e necesar.
Mai mult nu ma bag in modificarile pe care le faci.

- Mai e pe site, la script-uri, si o Clasa PHP mai avansata pt paginare.

botavlad89 Mesaje: 13
Salut ! nam reusit sa fac nik ! as mai avea o intrabre .

Cod: Selectaţi tot

$sql = "SELECT COUNT(*) FROM `tblsource_code`"; 

si mai am si asta:

Cod: Selectaţi tot

$sql = "SELECT 
tblsource_code.Id, 
 tblsource_code.IdUser, 
 tblsource_code.SourceCode, 
 tblsource_code.Data,
 tblusers.IdUser, 
 tblusers.username
 FROM tblsource_code
 LEFT JOIN 
 tblusers
 ON 
 tblsource_code.IdUser = tblusers.IdUser 
 WHERE access='1'
  LIMIT $offset, $rowsperpage "; 
Ca sus contorizez alceva nu ce vreau eu !! cum as putea face? Multumesc

MarPlo Mesaje: 4343
Vezi daca merge adaugand aceeasi clauza WHERE la contorizare:

Cod: Selectaţi tot

$sql = "SELECT COUNT(*) FROM `tblsource_code` WHERE access=1"; 

botavlad89 Mesaje: 13
Ms mult Marplo asta era buba!! multumesc

Subiecte similare