i++ zählt von vorne auf der nächsten Seite

DasLicht

Mitglied
Guten Abend,

ich habe mir eine Topliste erstellt zu einem Top oder Flop Script, auf jeder Seite werden 5 einträge angezeigt. Mein Problem ist jetzt das $i auf der nächsten seite von vorne zählt.

Hier mal ein ausschnitt aus meinem Code:
PHP:
      if($_GET["act"] == "top50"){ 
        eval("dooutput(\"".gettemplate("topflop/top50_head")."\");");
        $qry = "SELECT * FROM topflop ORDER BY schnitt DESC";
        $eintrage = mysql_num_rows(mysql_query($qry));
        $maxproseite = 5;
        $seiten = $eintrage / $maxproseite;
        if (!isset($_GET['seite'])) {
          $qry = "SELECT * FROM topflop ORDER BY schnitt DESC LIMIT 0,".$maxproseite.";";
        }
        else {
          $abeintrag = $_GET['seite'] * $maxproseite - $maxproseite;
          $qry = "SELECT * FROM topflop ORDER BY schnitt DESC LIMIT ".$abeintrag.",".$maxproseite.";";
        }
        $ergebnis = mysql_query($qry);
        while($row = mysql_fetch_array($ergebnis)){
          $i++; 
          eval("dooutput(\"".gettemplate("topflop/top50_list")."\");");
        }
        msql_seiten_Zähler(topflop, "index.php?inc=topflop&act=top50", $maxproseite);
        eval("dooutput(\"".gettemplate("topflop/top50_bottom")."\");");
      }

Funktion msql_seiten_Zähler() ;
PHP:
function msql_seiten_Zähler($db, $link, $proseite) 
{ 
  $result = mysql_query("SELECT COUNT(*) FROM $db"); 
  $total = mysql_result($result,0); 
  $seite = $_GET["seite"]; 
  $anzseiten = 6 ; 
  $seite = (isset($seite)) ? abs((int)$seite) : 1; 
  //$data=$anfang; 
  //------ 
  $seitentotal = ceil($total/$proseite) ; 
  $start = floor($seite - $anzseiten/2) ; 
  $start = $start <= 0 ? 1 : $start ; 
  $end = ($start + $anzseiten-1) ; 
  $end = $end >= $seitentotal ? $seitentotal : $end ; 
  echo '<div align="center">'; 
  if($seite == 1)
    echo "<img border='0' src='../files/gfx/nleftd.gif'>";
  else
    echo "<a href='".$link."&seite=1'><img border='0' src='../files/gfx/nlefta.gif'></a>";
  if ($seite > 1) 
    printf (' <a href="'.$link.'&seite=%s"><img border="0" src="../files/gfx/lefta.gif"></a> ',$seite-1);
  else 
    printf (' <img src="../files/gfx/leftd.gif"> ');

  for ($i = $start; $i <= $end ;$i++){ 
    if($i==$seite){ 
      printf ("<strong>$i</strong> ");
    } 
    else { 
      printf ('<a href="'.$link.'&seite=%s">%s</a> ',$i,$i);
    } 
  }
  if ($seite < $seitentotal){ 
    printf ('<a href="'.$link.'&seite=%s"><img border="0" src="../files/gfx/righta.gif"></a> ',$seite+1); 
  }
  else {
    printf ('<img src="../files/gfx/rightd.gif"> ');
  }
  if($seitentotal == $seite)
    echo "<img border='0' src='../files/gfx/nrightd.gif'>";
  else
    echo "<a href='".$link."&seite=$seitentotal'><img border='0' src='../files/gfx/nrighta.gif'></a>";
  echo '</div>';
}
 
fehlermeldungen? error_reporting(E_ALL); ?

msql_seiten_Zähler(topflop, "index.php?inc=topflop&act=top50", $maxproseite);

ist topflop eine konstante?

ich würde auch keinen deutschen umlaut als funktionsnamen benutzen..

Mein Problem ist jetzt das $i auf der nächsten seite von vorne zählt.
Die Lebenszeit von Variablen beschränkt sich imho auf das aktuelle Script. Woher sollt die nächste seite $i kennen?
 
Guten Abend,

also das mit dem Umlaut hab ich schon geändert, aber der Fehler liegt nicht dadran,
es wird ja auch keine Fehlermeldung angezeigt da mein Script keinen Fehler enthält.
Also ich verteile meine Einträge aus der Datenbank auf mehreren Seiten.
Ich fang nochmal von vorne an.
Auf jeder Seite werden 5 einträge gelistet. Nun wird die Variable $i auf der ersten Seite richtig dargestellt, also so:

1. Platz Max
2. Platz Fritz
3. Platz Olaf
4. Platz Frank
5. Platz Dieter

Wenn ich nun auf Seite 2 komme fängt die Variable $i von vorne an zu zählen:

1. Platz Helmut
2. Platz Erich
3. Platz Karl
4. Platz Michael
5. Platz Christian

So ist es falsch, so sollte es aussehen:

6. Platz Helmut
7. Platz Erich
8. Platz Karl
9. Platz Michael
10. Platz Christian

usw

Hoffe das es jetzt jeder versteht und mit dabei helfen kann.

MFG DL
 
Zuletzt bearbeitet:
Hallo!

da mein Script keinen Fehler enthält.

Das würde glaube ich nicht einmal ein professioneller Programmierer von seinem Skript behaupten :)

Hättest Du den Beitrag von Hirnhamster ganz gelesen, wäre Dir

Die Lebenszeit von Variablen beschränkt sich imho auf das aktuelle Script. Woher sollt die nächste seite $i kennen?

das sicher nicht entgangen.

Die Variable $i kann sich nach dem Abarbeiten des Skriptes nicht an Ihren zugewiesenen Wert "erinnern", den mußt Du ihr schon mitteilen, etwa über die Verwendung von $_SESSION oder Du gibst Sie versteckt über ein hidden-input Feld weiter.

Grüße

Martin
 
Zuletzt bearbeitet:
Hallo!

etwa über die Verwendung von $_SESSION oder Du gibst Sie versteckt über ein hidden-input Feld weiter.

Es gibt noch die dritte Möglichkeit, sie an die URL per ?i=XX anzuhängen und danach mit $_GET['i'] darauf zuzugreifen.

Bei einem hidden-Feld greifst Du per $_POST['i'] darauf zu und bei $_SESSION mit $_SESSION['i']. Welche der drei Methoden Du anwendest hängt auch von Deinen Bedürfnissen und dem Inhalt der Templates ab ...

Grüße

Martin
 
Hallo,

hab jetzt noch eine Frage, ich lese jetzt die Variable $j auf $_GET heraus. Auf den ersten Link in der Forschleife wird &j=0 ausgegeben, bin ich nun auf der Seite 2 wird &j=5 ausgegeben und wenn ich auf Seite 1 zurück will, wird &j=5 ausgegeben. Normal müsste dann bei Seite 1 &j=0 ausgegeben werden. Denn wenn $j = 5 ist und ich auf der Seite 1 bin, werden die Nummerrierungen auf 6,7,8,9,10 ausgegeben. Hoffe ihr versteht was ich meine. Der Fehler muss irgendwo in der Forschleife sein. Hier mal mein Code:

PHP:
  if ($seite > 1) {
    $zurueck = $j-10;
    printf (' <a href="'.$link.'&i='.$zurueck.'&seite=%s"><img border="0" src="../files/gfx/lefta.gif"></a> ',$seite-1);
  }
  else {
    printf (' <img src="../files/gfx/leftd.gif"> ');
  }
$j = 0;
  for ($i = $start; $i <= $end ;$i++){ 
    if($i==$seite){
      printf ("<strong>$i</strong> ");
    } 
    else {
      $j = $j+5;
      printf ('<a href="'.$link.'&i='.$j.'&seite=%s">%s</a> ',$i,$i);
    } 
  }
  if ($seite < $seitentotal){ 
    printf ('<a href="'.$link.'&i='.$j.'&seite=%s"><img border="0" src="../files/gfx/righta.gif"></a> ',$seite+1); 
  }
  else {
    printf ('<img src="../files/gfx/rightd.gif"> ');
  }
 
Zuletzt bearbeitet:
Das selbe Problem hatte ich auch mal bei einem Gästebuch aber du übergibst doch die Seitennummer und hast die Information wieviel Einträge auf einer Seite angezeigt werden mit diesen informationen ist es doch möglich eine durchlaufende Nummerierung hinzubekommen oder?
 
Re: AW: i++ zählt von vorne auf der nächsten Seite

Auf den ersten Link in der Forschleife wird &j=0 ausgegeben

PHP:
$j = 0;

for ($i = $start; $i <= $end ;$i++){   
   
 if($i==$seite){
      printf ("<strong>$i</strong> ");
    } 
     else {
      $j = $j+5;
      printf ('<a href="'.$link.'&i='.$j.'&seite=%s">%s</a> ',$i,$i);
    } 
 }

In der for Schleife weist Du im ersten Link der Variablen $j ERST den Wert $j+5 zu und gibst dann den Link aus.
Der erste Link wird also lauten: href="'.$link.'&i='.5.'&seite=%s"

Versuchs mal, indem Du Die zwei Zeilen vertauscht.

Hoffe das war es was Du meintest ...

Grüße

Martin
 

Neue Beiträge

Zurück