• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Seitenweise anzeigen

Spartakus

Neues Mitglied
Hallo Freunde habe hier ein kleinses Script was ich immer weiter am entwickeln bin, da ich aber kein Profi sondern nur so ein Freizeit Progi bin habe ich jetzt mal wieder ein Problem.

Wie bekomme ich hier bei diesem Script eine Seitenanzeige zum blättern rein?

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE">
<html>
<head>
<title>{mVu} Marler Vestnetz Unit - Spiele Übersicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<center>
<? include ("mysql.inc.php") ?>

<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr>
    <td class="heads" colspan="10"><center><b>Übersicht Anzahl Spiele (Wars/Funnys)</b></center></td></tr>
    <tr>
    <td colspan="10" bgcolor="006699"><center>Hier seht Ihr alle Member die <a href="http://www.wilas-support.de/mvu/include.php?path=war/war.php">eingetragene</a> Funnys bzw. Wars gespielt haben.<br>
    <b>Also nur eingetragene Spiele werden hier aufgelistet!!!</b><br><b>Wichtig:</b> Bei <u>won/remi/lost</u> werden nur einzelne Maps aufgelistet, also keine Matches.</td></tr>
<tr>
    <td class="left"><b><?php echo "$id"; ?>ID</td>
    <td class="left"><b><?php echo "$datum"; ?>Datum</td>
    <td class="left"><b><?php echo "$name"; ?></b></td>
    <td class="left"><b><?php echo "$spiele"; ?></b></td>
    <td class="left"><b><?php echo "$punkte"; ?></b></td>
    <td class="left"><b><?php echo "$lost"; ?></b></td>
    <td class="left"><b><?php echo "$s"; ?>won</b></td>
    <td class="left"><b><?php echo "$u"; ?>remi</b></td>
    <td class="left"><b><?php echo "$n"; ?>lost</b></td>
    <td class="left"><b><?php echo "$bemerkung"; ?>Bemerkung</td>

<?
$sql = mysql_query("SELECT * FROM $spielerteam");
while ($ds = mysql_fetch_object($sql)) 
{
  $id = $ds ->id;
  $datum = $ds ->datum;
  $name = $ds ->name;
  $spiele = $ds ->spiele;
  $punkte = $ds ->punkte;
  $lost = $ds ->lost;
  $s = $ds ->s;
  $u = $ds ->u;
  $n = $ds ->n;
  $bemerkung = $ds ->bemerkung;
  echo "<tr><td>$id</td><td>$datum</td><td>$name</td><td>$spiele</td><td>$punkte</td><td>$lost</td><td>$s</td><td>$u</td><td>$n</td><td><b>$bemerkung</b></td></tr>";

  

}
mysql_close($dz);
?>
</table><br><br><br><br><br><br><br>




</body>
</html>
Wie gesagt das Script funzt nur habe ich keinen Plan wie es mit der Seitenanzeige im Script funktioniert. Habe es auch schon mit einem Beispiel aus diesem Forum probiert aber auch ohne positives Ergebnis.

Danke
 
mit mysql_num_rows ermitteln, wieviele Zeilen gefunden wurden. Dann festlegen, wieviele Zeilen du pro Seite anzeigen lassen willst, und dem entsprechend ausrechnen, welche Zeile du auf einer Seite anzeigen lassen möchtest.
Meisstens wird es mit GET-Vars gemacht, zb 5 Zeilen pro Seite willst du anzeigen lassen, mysql_num_rows gibt 11 Zeilen zurück, dann rechnest du $seiten = ceil(mysql_num_rows/5);, das ergibt 3(ceil rundet auf). mit $seiten könntest du denn in einer Schleife 3 Links generieren lassen mit ?seite=$i

Mit $i kannst du denn die weiteren Seiten abrufen, indem du denn in der mysql Abfrage ein LIMIT einbaust. Zb bei Seite 2: SELECT .... LIMIT ($getseite*5) , 5 ....

usw..

Ich hoffe, ich konnnte dir einige Ideen bringen.

Mfg
 
Boah^^

Ich habe hier zwei Welzer neben mir liegen und bin fleißig am blättern, eines über PHP und das andere MYSQL. Aber Deine Hinweise habe ich auch schon gelesen und gegoogelt aber so ganz blicke ich da nicht durch. Kannst Du mir eventuell im Script mal demonstrieren wo ich ansetzen muss?

Ein etwas verwirrter User...
 
Kannst Du mir eventuell im Script mal demonstrieren wo ich ansetzen muss?
Sicher. Hier mal mein Newsarchiv-Script (Prinzip ist ja das selbe):

PHP:
<?php
## Einstellungen:
$db_host = "localhost"; ## Datenbank host
$db_usr = "xxx"; ## Datenbank Benutzer
$db_pw = "xxx"; ## Datenbank Passwort
$db_name = "xxx"; ## Datenbank Name
$db_news = "newstbl"; ## Name der Newstabelle

$anzahl = 5; ## wieviele Beiträge pro Seite

## Einstellungen ende

function isteinezahl($var) { 
 if (preg_match("=^[0-9]+$=i",$var)) { 
 return TRUE; 
 } else { 
 return FALSE; 
 } 
}

$db = new mysqli($db_host, $db_usr, $db_pw, $db_name);
$fehler = "";
if(!isteinezahl($_GET['seite'])) { $getseite = 0; } else { $getseite = $_GET['seite']; }
if(mysqli_connect_errno() == 0) { 

 $limit1 = $getseite*$anzahl; 
 $befehl = "SELECT SQL_CALC_FOUND_ROWS * FROM `".$db_news."` ORDER BY `id` DESC LIMIT ".$limit1.",".$anzahl."";
 $daten = $db->query($befehl);
 $neunum = $db->query("SELECT FOUND_ROWS()"); $numrows = $neunum->fetch_array();
 $seiten = ceil($numrows[0]/$anzahl);

 if($daten->num_rows == 0) {
  $fehler .= "<p>Es wurden keine News gefunden</p>";
 }
} else { 
 $fehler .= "<p>Fehler: Es konnte keine Verbindung zur Datenbank hergestellt werden.<br />Details: <code>".$db->error.$db->errno."</code></p>";
}


if(empty($fehler)) {
$debug = 0;
 while($data = $daten->fetch_object()) { 
 ## ab hier beginnt die Ausgabe der News, optische Anpassung ANFANG:
 
 echo "<p>".date('d.m.Y - H:i',$data->time)."<br />".$data->news_title."<br />".stripslashes($data->news_text)."<br /><a href=\"".$data->link."\">".$data->link_text."</a></p>";
 
 ## hier endet die Ausgabe der News, optische Anpassung ENDE
$debug++;
if($debug >= 100) { echo "<p><em>Fehler: Endlosscheife! Aktion unterbrochen.</em></p>"; break; }
 }
$daten->close();
echo "<p>Seiten: <br />";
$rseite = array();
 if($getseite >= 1) {
  for($a=$getseite;$a>0;$a--) {
   $rseite[$a] = $a;
   if($a == 0) { break; }
  }
 }
asort($rseite);

foreach($rseite as $b) {
   $fanz1 = $b-1;
   echo "<a href=\"".$_SERVER['PHP_SELF']."?site=".$_GET['site']."&amp;seite=".$fanz1."\">".$b."</a> "; ## Link für rückläufige Seiten
}

for($i=$getseite;$i<$seiten;$i++) {
 $fanz = $i+1;
 if($getseite == $i) { echo "<em>".$fanz."</em> "; } else {
  echo "<a href=\"".$_SERVER['PHP_SELF']."?site=".$_GET['site']."&amp;seite=".$i."\">".$fanz."</a> "; ## Link für fortlaufende Seiten
 }
 if($i >= 100) { echo "<p><em>Fehler: Endlosscheife! Aktion unterbrochen.</em></p>"; break; }
}
echo "</p>";

} else {
echo "<p><em>Es sind folgende Fehler aufgetreten:</em><br />".$fehler."</p>";
}
$db->close();
?>
Basierend auf der mysqli Erweiterung (ab PHP5 standartsgemäß mitgeliefert).
Ich hab es selbst geschrieben, daher kann es wohl sein, dass meine Methode vielleicht nicht die eleganteste ist, aber sie geht ;)

Ich hoffe, ich konnte dir damit einen kleinen Denk-Ansatz geben.

Mfg

Edit: $site bei der Linkerzeugung ist für das CMS, also für das Script nicht wirklich wichtig.
Edit2: threadi's Optimierungsvorschlag eingebaut
 
Zuletzt bearbeitet:
Deine Methode ist nicht die eleganteste. Bei deinem ersten Statement lädst Du eine komplette Datenbanktabelle ein. Angenommen diese Bestünde aus tausenden Einträgen - was meinst Du was für ein Performanceverlust das ist.

Schau dir mal SQL_CALC_FOUND_ROWS und FOUND_ROWS() an. Damit kann mehr sehr performant solche Daten einlesen.

MySQL :: MySQL 5.1 Referenzhandbuch :: 12.10.3 Informationsfunktionen
SQL_CALC_FOUND_ROWS oder: Wie man effektiv Blätternavigationen umsetzt » Beitrag » PHP Performance
 
Deine Methode ist nicht die eleganteste. Bei deinem ersten Statement lädst Du eine komplette Datenbanktabelle ein. Angenommen diese Bestünde aus tausenden Einträgen - was meinst Du was für ein Performanceverlust das ist.

Schau dir mal SQL_CALC_FOUND_ROWS und FOUND_ROWS() an. Damit kann mehr sehr performant solche Daten einlesen.
Vielen dank! Davon hatte ich bis dato noch nie gelesen. Ich hab mein Script demnach angepasst und funktioniert wunderbar. Danke.

Mfg
 
Zurück
Oben