Blätterfunktion - kleines Problem!

zamo76

Erfahrenes Mitglied
Hi Leute,

ich nutze folgendes Script für eine Blätterfunktion:

PHP:
$seite = $_GET['seite'];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   {
   $seite = 1;
   }

//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = $limit;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;


//Tabelle Abfragen
//Tabelle heißt hier einfach: Tabelle
$abfrage = "SELECT * FROM `snapmax_angebote` WHERE `hersteller` LIKE '".mysql_real_escape_string($_GET['hersteller'])."%' AND `festplatte` ".formatExpression($_GET['festplatte'])." AND `bildschirm` ".formatExpression($_GET['bildschirm'])." AND `prozessor` LIKE '".mysql_real_escape_string($_GET['prozessor'])."%' AND `grafikkarte` LIKE '".mysql_real_escape_string($_GET['grafikkarte'])."%' AND `speicher` ".formatExpression($_GET['speicher'])." AND `takt` ".formatExpression($_GET['takt'])." AND `ps22` ".formatExpression($_GET['ps22'])." AND `seller`LIKE '".mysql_real_escape_string($_GET['seller'])."%' ORDER BY `".mysql_real_escape_string($orderby)."` LIMIT $start, $eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
    {
   echo $row->id.""; // Hier die Ausgabe der Einträge
   }


//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wieviele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result = mysql_query("SELECT * FROM `snapmax_angebote` WHERE `hersteller` LIKE '".mysql_real_escape_string($_GET['hersteller'])."%' AND `festplatte` ".formatExpression($_GET['festplatte'])." AND `bildschirm` ".formatExpression($_GET['bildschirm'])." AND `prozessor` LIKE '".mysql_real_escape_string($_GET['prozessor'])."%' AND `grafikkarte` LIKE '".mysql_real_escape_string($_GET['grafikkarte'])."%' AND `speicher` ".formatExpression($_GET['speicher'])." AND `takt` ".formatExpression($_GET['takt'])." AND `ps22` ".formatExpression($_GET['ps22'])." AND `seller`LIKE '".mysql_real_escape_string($_GET['seller'])."%' ORDER BY `".mysql_real_escape_string($orderby)."`");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "  <b>$b</b> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <a href=\"?hersteller=$hersteller&festplatte=$festplatte&bildschirm=$bildschirm&grafikkarte=$grafikkarte&$prozessor=$prozessor&speicher=$speicher&takt=$takt&ps22=$ps22&seller=$seller&seite=$b\">$b</a> ";
      }


   }
echo "</div>";

Es funktioniert soweit alles prima. Es zählt richtig, gibt somit die richtigen seitenanzahl an...allerdings werden bei Klick auf die nächste Seite dieselben Ergebnisse wie auf Seite 1 angezeigt.

Ich glaube einen Denkfehler gemacht zu haben, komme allerdings nicht drauf...

Danke im Voraus

zamo76
 
Wo kommt denn der Wert der $limit-Variable her? Weitergehend würde ich die übergebenen Werte noch validieren, etwa:
PHP:
$seite = ( isset($_GET['seite']) && abs(intval($_GET['seite'])) == $_GET['seite'] )
	? intval($_GET['seite'])
	: 1;
 
Hallo,

wo definierst du die Variablen $limit und $order.
Vllt. liegst daran. Aber wenn die sie irgendwo definiert hast, müsste der Fehler wo anders liegen.

tObee
 
$limit wird hier definiert:

PHP:
$limit = (isset($_GET['maxtreffer']) && $_GET['maxtreffer'] > 0) ? mysql_real_escape_string($_GET['maxtreffer']) : 5;
 
Du musst wohl alle Parameter einzeln prüfen:
PHP:
$page = ( isset($_GET['seite']) && abs(intval($_GET['seite'])) == $_GET['seite'] )
	? intval($_GET['seite'])
	: 1;
$limit = ( isset($_GET['maxtreffer']) && abs(intval($_GET['maxtreffer'])) == $_GET['maxtreffer'] )
	? intval($_GET['maxtreffer'])
	: 5;
$offset = ($page - 1) * $limit;


$query = '
	SELECT
	        *
	  FROM
	        `snapmax_angebote`
	  WHERE
	        1
	';
if( isset($_GET['hersteller']) ) {
	$query .= ' AND `hersteller` LIKE "'.mysql_real_escape_string($_GET['hersteller']).'%"';
}
if( isset($_GET['festplatte']) ) {
	$query .= ' AND `festplatte` '.formatExpression($_GET['festplatte']);
}
if( isset($_GET['bildschirm']) ) {
	$query .= ' AND `bildschirm` '.formatExpression($_GET['bildschirm']);
}
if( isset($_GET['prozessor']) ) {
	$query .= ' AND `prozessor` LIKE "'.mysql_real_escape_string($_GET['prozessor']).'%"';
}
if( isset($_GET['grafikkarte']) ) {
	$query .= ' AND `grafikkarte` LIKE "'.mysql_real_escape_string($_GET['grafikkarte']).'%"';
}
if( isset($_GET['speicher']) ) {
	$query .= ' AND `speicher` '.formatExpression($_GET['speicher']);
}
if( isset($_GET['takt']) ) {
	$query .= ' AND `takt` '.formatExpression($_GET['takt']);
}
if( isset($_GET['ps22']) ) {
	$query .= ' AND `ps22` '.formatExpression($_GET['ps22']);
}
if( isset($_GET['seller']) ) {
	$query .= ' AND `seller` LIKE "'.mysql_real_escape_string($_GET['seller']).'%"';
}
$query .= ' ORDER BY `'.mysql_real_escape_string($orderby).'` LIMIT '.$offset.', '.$limit;
$result = mysql_query($query)
	or die(mysql_error());
 
tja, so sieht es jetzt aus. Aber es ist immernoch dasselbe Problem!

PHP:
$page = ( isset($_GET['seite']) && abs(intval($_GET['seite'])) == $_GET['seite'] )
    ? intval($_GET['seite'])
    : 1;
$limit = ( isset($_GET['maxtreffer']) && abs(intval($_GET['maxtreffer'])) == $_GET['maxtreffer'] )
    ? intval($_GET['maxtreffer'])
    : 5;
$offset = ($page - 1) * $limit;


$query = '
    SELECT
            *
      FROM
            `snapmax_angebote`
      WHERE
            1
    ';
if( isset($_GET['hersteller']) ) {
    $query .= ' AND `hersteller` LIKE "'.mysql_real_escape_string($_GET['hersteller']).'%"';
}
if( isset($_GET['festplatte']) ) {
    $query .= ' AND `festplatte` '.formatExpression($_GET['festplatte']);
}
if( isset($_GET['bildschirm']) ) {
    $query .= ' AND `bildschirm` '.formatExpression($_GET['bildschirm']);
}
if( isset($_GET['prozessor']) ) {
    $query .= ' AND `prozessor` LIKE "'.mysql_real_escape_string($_GET['prozessor']).'%"';
}
if( isset($_GET['grafikkarte']) ) {
    $query .= ' AND `grafikkarte` LIKE "'.mysql_real_escape_string($_GET['grafikkarte']).'%"';
}
if( isset($_GET['speicher']) ) {
    $query .= ' AND `speicher` '.formatExpression($_GET['speicher']);
}
if( isset($_GET['takt']) ) {
    $query .= ' AND `takt` '.formatExpression($_GET['takt']);
}
if( isset($_GET['ps22']) ) {
    $query .= ' AND `ps22` '.formatExpression($_GET['ps22']);
}
if( isset($_GET['seller']) ) {
    $query .= ' AND `seller` LIKE "'.mysql_real_escape_string($_GET['seller']).'%"';
}
$query .= ' ORDER BY `'.mysql_real_escape_string($orderby).'` LIMIT '.$offset.', '.$limit;
$result = mysql_query($query)
    or die(mysql_error());

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $result / $limit;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($page == $b)
      {
      echo "  <b>$b</b> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <a href=\"?hersteller=$hersteller&festplatte=$festplatte&bildschirm=$bildschirm&grafikkarte=$grafikkarte&$prozessor=$prozessor&speicher=$speicher&takt=$takt&ps22=$ps22&seller=$seller&page=$b\">$b</a> ";
      }


   }
echo "</div>";
 
Für die Anzahl der Seiten und damit der Anzahl der Datensätze müsstest du eine eigene Abfrage absenden.
 
...die gab es ja schon in der alten Version, oder?:

PHP:
$result = mysql_query("SELECT * FROM `snapmax_angebote` WHERE `hersteller` LIKE '".mysql_real_escape_string($_GET['hersteller'])."%' AND `festplatte` ".formatExpression($_GET['festplatte'])." AND `bildschirm` ".formatExpression($_GET['bildschirm'])." AND `prozessor` LIKE '".mysql_real_escape_string($_GET['prozessor'])."%' AND `grafikkarte` LIKE '".mysql_real_escape_string($_GET['grafikkarte'])."%' AND `speicher` ".formatExpression($_GET['speicher'])." AND `takt` ".formatExpression($_GET['takt'])." AND `ps22` ".formatExpression($_GET['ps22'])." AND `seller`LIKE '".mysql_real_escape_string($_GET['seller'])."%' ORDER BY `".mysql_real_escape_string($orderby)."`");
$menge = mysql_num_rows($result);
 
Zurück