php: strankovanie

Programovacie jazyky, rady, poradňa...
Frikso
Darca
Darca
Používateľov profilový obrázok
Príspevky: 4777
Registrovaný: 07 mar 2006, 19:09

php: strankovanie

Príspevok od používateľa Frikso »

Ľudia,
Robím teraz jednu fotogaleriu pre svojho švagra. Potreboval som vytvoriť stránkovanie, tak som siahol na riešenie z isteho tutorialu z nejakej zahraničnej stranky:

Kód: Vybrať všetko

$rowsPerPage=5;		   
$pageNum=1;
if (isset($_GET['page'])){
  $pageNum=$_GET['page'];
}
$od=($pageNum-1)*$rowsPerPage;
$do=$od+$rowsPerPage;
$query = mysql_query("SELECT * FROM galeria_sutaz  ORDER BY datum limit $od, $rowsPerPage");
	if (mysql_num_rows($query)==0){
    	echo"Momentalne v sutazi nie su ziadne obrazky"; 
	}else{
	?>
	
<form action="fotosutaz_index.php" method="post">
<input type="hidden" value="odoslane" name="odoslane"/>
<table class="tabulka">
<?
       while($zaznam = mysql_fetch_array($query)){
       $datum = date('j. m. Y, H:i', $zaznam["datum"]);
 if($zaznam['verejne']==1)
       echo"<tr><td><img src='".$zaznam['cesta'].$zaznam['obr']."' width='120' height='90'/></td>
        <td><h3>". $zaznam['nazov']."</h3>
		<div class=\"datum\">".$datum." </div>
	                  ". $zaznam['popis']." <br/>
		<input type='radio' name='hlas' value='".$zaznam['id']."' id='".$zaznam['id']."'/>
		 <label for='".$zaznam['id']."'>Hlasujem za túto fotku</label>
        </td></tr>\n";
    }	 //koniec podm
	
$query   = "SELECT COUNT(id) FROM galeria_sutaz";
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];	

$maxPage = ceil($numrows/$rowsPerPage);
$self = $_SERVER['PHP_SELF'];
$nav  = '';

for($page = 1; $page <= $maxPage; $page++)
{
   if ($page ==$pageNum)
   {
      $nav .= " $page "; // no need to create a link to current page
   }
   else
   {
      $nav .= " <a href=\"$self?page=$page\">$page</a> ";
   } 
}	


if ($pageNum > 1)
{
   $page  =$pageNum - 1;
   $prev  = " <a href=\"$self?page=$page\">[Prev]</a> ";

   $first = " <a href=\"$self?page=1\">[First Page]</a> ";
} 
else
{
   $prev  = '&nbsp;'; // we're on page one, don't print previous link
   $first = '&nbsp;'; // nor the first page link
}

if ($pageNum < $maxPage)
{
   $page =$pageNum + 1;
   $next = " <a href=\"$self?page=$page\">[Next]</a> ";

   $last = " <a href=\"$self?page=$maxPage\">[Last Page]</a> ";
} 
else
{
   $next = '&nbsp;'; // we're on the last page, don't print next link
   $last = '&nbsp;'; // nor the last page link
}

// print the navigation link
echo $first . $prev . $nav . $next . $last;
Výstup z databázy chcem stránkovať po 5ks, čo mi aj funguje. No problem nastáva so zobrazením listovania medzi stránkami [first][previous]1,2,3..15[next][last]. Keď som na stránke >1, tak zobrazí len [first][previous], na prvej nezobrazí nič.

Už do toho pozerám peknú dobu, skúšal to všeliako pretvoriť, no pomaly mi už z toho hrabe. Neviete mi poradiť, kde bude chyba?
Dúfam, že to bude len nejaká banalita, na ktorú sa treba proste vyspať, no potrebujem to doklepnúť čim skôr a bez tohto sa neviem pohnúť ďalej.

Každému, kto pomôže vopred vďaka. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

riadok

Kód: Vybrať všetko

$numrows = $row['numrows']; 
by som dal

Kód: Vybrať všetko

$numrows = mysql_num_rows($result); 
Frikso
Darca
Darca
Používateľov profilový obrázok
Príspevky: 4777
Registrovaný: 07 mar 2006, 19:09

Príspevok od používateľa Frikso »

Dáva to logiku, zmenil som to a teraz to ukazuje stranku č. 1 v možnosti listovania. 2,3,.. stale nezobrazuje.


Kód: Vybrať všetko

if ($pageNum < $maxPage)
 
som nahradil

Kód: Vybrať všetko

if ($pageNum <= $maxPage)
čím som dosiahol, že sa zobrazuje [next][last] no ešte to číslovanie.
Tiež sa cez [next][last] neviem dostať na 3. stranku (3z3).
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Frikso napísal:Dáva to logiku, zmenil som to a teraz to ukazuje stranku č. 1 v možnosti listovania. 2,3,.. stale nezobrazuje.


Kód: Vybrať všetko

if ($pageNum < $maxPage)
 
som nahradil

Kód: Vybrať všetko

if ($pageNum <= $maxPage)
čím som dosiahol, že sa zobrazuje [next][last] no ešte to číslovanie.
Tiež sa cez [next][last] neviem dostať na 3. stranku (3z3).
nie, tam nemá byť <= inak ti next a last bude ukazovať aj v prípade že bude galéria iba na jednu stránku (že nebude dosť fotiek na viac strán). Tebe sa z nejakého dôvodu du $maxPage dáva jednotka. Určite tam máš viac fotiek ako 5?
Frikso
Darca
Darca
Používateľov profilový obrázok
Príspevky: 4777
Registrovaný: 07 mar 2006, 19:09

Príspevok od používateľa Frikso »

Fotiek mám 15 a ručne si ich môžem listovať, keď si prepišem v URL ?page=2, page=3.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ahaaaaa, asi viem čo je tam zle. Daj to takto:

Kód: Vybrať všetko

$query   = "SELECT COUNT(id) as numrows FROM galeria_sutaz";
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];   
čiže ten riadok ktorý si menil bude tak ako predtým. Ja som nevidel logiku prečo je to tak robené, lebo som si nepozeral to query
Frikso
Darca
Darca
Používateľov profilový obrázok
Príspevky: 4777
Registrovaný: 07 mar 2006, 19:09

Príspevok od používateľa Frikso »

Bingo! Presne v tom bola chyba. :smt023 Teraz to šlape bezchybne. Srdečna vďaka, máš u mňa pivo :smt001 a samozrejme K+ :)
Napísať odpoveď