Inhalr der DB seitenweise anzeigen??
rainer
- php
0 lulu0 Thomas Meinike0 Rainer
Hallo und Guten Morgen allerseits,
ich möchte aus einer DB den Inhalt Seitenweise anzeigen. Dazu habe ich folgenden Test geschrieben. In der DB sind 60 Zeilen vorhanden.
#########################
<?
if($limit == ""){
$limit = "0,10";
}
?>
<table width="200" border="1">
<?
$n=mysql_query("SELECT name FROM tabelle LIMIT $limit");
while($z=mysql_fetch_array($n)):
$name=$z["name"];
?>
<tr>
<td><? echo"$name"; ?></td>
</tr>
<?
endwhile;
?>
</table><br>
<?
$zeilen=mysql_query("SELECT * FROM tabelle");
$anzahl=mysql_num_rows($zeilen);
$geteilt=($anzahl / 10);
?>
#########################
Nun möchte ich das die nächste Zeile mit den Links zu den 10erGruppen der Datensätze automatisch generiert wird. Leider hänge ich jetzt total fest. Ich habe in der "$geteilt" eine "6" für 6 10erGruppen.
#####################
<a href="test.php?limit=0,10">1</a> <a href="test.php?limit=11,10">2</a> //usw.????
#####################
Könnt ihr mir weiterhelfen?
Gruss
Rainer
Huhu Rainer
du müßtest Deinen $geteilt-Wert auf jeden Fall noch auf eine ganze Zahl runden (wenn Du z.B. 61 Records hast bekommst du sonst Probleme)
. Dazu gibt es die PHP-Funktionen floor und ceil.
Dann wäre zu überlegen, ob es nicht denkbar wäre den zweiten Limit-Parameter (die 10) als Konstante zu deklarieren falls sich der nicht mehr ändert.
Ich habe in einem ähnlichen Fall eine Funktion wie diese benutzt
define(cNBR_TO_SHOW,10);
[...]
function get_page_navigation($start,$total)
{
global $PHP_SELF,$SHOWPAGE;
$array=array();
$pages=ceil($total/cNBR_TO_SHOW);
for($c=0;$c<$pages;$c++){
$link=sprintf('<a href="%s">%s</a>',$PHP_SELF.build_uri(array("SHOWPAGE" => $c+1)),cSELECT_NEWSPAGE);
if($SHOWPAGE==$c+1) $link=cSELECTED_NEWSPAGE;
$m=((1+$c)*cNBR_TO_SHOW);
$array[]= $link."Eintrag ".(1+$c*cNBR_TO_SHOW).'-'.($m<$total?$m:$total);
}
if($pages>1){
$link=sprintf('<a href="%s">%s</a>',$PHP_SELF.build_uri(array("SHOWPAGE" => '0')),cSELECT_NEWSPAGE);
if($SHOWPAGE==0) $link=cSELECTED_NEWSPAGE;
$array[]= $link." Alle";
}
return $array;
}
///
Es wird ein Array zurückgegeben in dem jeweiligen Links für die Seitenaufrufe enthalten sind, ich hoffe man kann das in etwa nachvollziehen.
Es wird also ermittelt wie viele Seiten es gibt, ist es mehr als eine wird am Ende noch ein Link für alles anzeigen angehängt, dazu wird dann $SHOWPAGE = 0 gesetzt, dass muss entsprechend in der Select-Anweisung berücksichtigt werden.
Das Ganze musst Du natürlich an Deine Bedürfnisse anpassen.
Viele Grüße
lulu
Hallo Rainer,
$zeilen=mysql_query("SELECT * FROM tabelle");
$anzahl=mysql_num_rows($zeilen);
$geteilt=($anzahl / 10);
?>
#########################
Nun möchte ich das die nächste Zeile mit den Links zu den 10erGruppen der Datensätze automatisch generiert wird. Leider hänge ich jetzt total fest. Ich habe in der "$geteilt" eine "6" für 6 10erGruppen.
#####################
<a href="test.php?limit=0,10">1</a> <a href="test.php?limit=11,10">2</a> //usw.????
#####################
Etwas in dieser Art sollte helfen:
<?php
$anzahl=55;
$schritt=10;
$geteilt=($anzahl / $schritt);
$rest=$anzahl % $schritt;
for($i=0;$i<=$geteilt-1;$i++)
{
print "<a href="test.php?limit=".(int)($i*$schritt).",$schritt">".(int)($i+1)."</a> \n";
}
if($rest>0)
{
print "<a href="test.php?limit=".(int)($i*$schritt).",$rest">".(int)($i+1)."</a> \n";
}
?>
MfG, Thomas
Hallo Thomas,
besten Dank. Absolut perfekt und funktioniert genauso wie ich es mir dachte.
Gruss
Rainer