[PHP] Suchergebnisse in Seiten einteilen

skred

Active member
ID: 129842
L
19 März 2008
44
0
Hallo,
vorweg: ich habe leider wenig Erfahrung mit php, also bitte nicht zu kritisch sein.
ich habe mal ein kleines Suchskript geschrieben, mit dem man nach verschiedenen Dingen in einer Datenbank suchen kann (zb. nach deren Namen, Farbe, etc...) und die zutreffenden Ergebnisse ausgegeben bekommt. Das funktioniert auch alles ohne Probleme. Jetzt wollte ich aber gerne noch hinzufügen, dass z.B. max. 20 Ergebnisse pro Seite angezeigt werden. Dazu habe ich mich an Vorlagen aus dem Internet Orientiert, habe jedoch noch ein paar Probleme. Hier mal auszüge aus der search.php

PHP:
<?php
$con = mysql_connect("xxx","xxx","xxx");
mysql_select_db("xxx", $con);

$id = $_GET["id"];
$name = $_POST["name"];
$color = $_POST["color"];

$where = array(); 
if(empty($where)) die ('Please specify at least one search criteria.');
if(!empty($id)) $where[] = "id = '$id'"; 
if(!empty($name)) $where[] = "name LIKE '%$name%'"; 
if(!empty($color)) $where[] = "color = '$color'"; 

$condition = implode (" AND ", $where);   
$result = mysql_query("SELECT * FROM table WHERE $condition"); 

$rows_per_page = 20;
$anz = mysql_num_rows($result);
$lastpage = ceil($anz/$rows_per_page);

//Beziehen der Seite
if (isset($_GET['pageno'])) {
   $pageno = $_GET['pageno'];
} else {
   $pageno = 1;
}

//Setzen der letzten Seite
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} 

//Setzen der ersten Seite
if ($pageno < 1) {
   $pageno = 1;
} 

//Setzen des Limits für Ausgaben (20)
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
//Beziehen der Datensätze
$result = mysql_query("SELECT * FROM cards WHERE $condition $limit"); 

//Ausgabe
while($row = mysql_fetch_array($result))
  {
//Hier werden die Suchergebnisse (z.B. $row['name'] und $row['color'] ausgegeben)
  }

//Ganz unten jetzt die Auswahl der Seite
if ($pageno == 1) {
   echo " FIRST PREV ";
} else {
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=1'>FIRST</a> ";
   $prevpage = $pageno-1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$prevpage'>PREV</a> ";
} 

echo " ( Page $pageno of $lastpage ) ";

if ($pageno == $lastpage) {

   echo " NEXT LAST ";
} else {
   $nextpage = $pageno+1;
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$nextpage'>NEXT</a> ";
   echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$lastpage'>LAST</a> ";
} 
  
mysql_close($con);
?>

Was funktioniert ist, das nur die ersten 20 Suchergebnisse angezeigt werden. Klicke ich jedoch auf NEXT, komm ich zwar auf die nächste Seite (in der Adresszeile steht auch search.php?pageno=2, jedoch ist dem Skript scheinbar entfallen nach was gesucht wurde und ich bekomme mein "Please specify at least one search criteria" angezeigt. Wie kann ich nun anstellen, dass mein $result, bzw. mein $name, etc.. beim Seitenwechsel nicht verloren gehen?
Wäre sehr dankbar für Tips : )
 
Daten entweder in einer Session oder einem versteckten Formular übergeben.
Alternativ geht auch die Speicherung aller Ergebnisse in einer temporären Tabelle auf Basis der Session-ID z. B.
 
...oder noch einfacher: direkt in der URL als GET-Parameter mitgeben ;)

Da hast du 2 Möglichkeiten:

  • Du kannst, wenns nicht viel is, einfach alle Suchattribute anhängen.
    Ein Beispiel findest du hier:
    https://www.whatpulse-team.de/teamlist.php

    Klicke oben auf "Keys", "Clicks", ... um die Liste zu sortieren. Nochmaliges Klicken kehrt die Sortierung um. Ganz unten kannst du die Seiten blättern.
    Beachte wie die URL aussieht.

  • Ansonsten kannst du deine Suchabfrage mit einer ID versehen und die ID zusammen mit den Attributen in der Datenbank abspeichern.
    Das funktioniert wie LasMiranda's Vorschlag mit der Session-ID, nur ein User kann mehrere Suchabfragen parallel im Browser offen halten.

    Ein Beispiel hierfür ist die Forensuche.

    Suche nach etwas. Du wirst danach auf die Ergebnisseite umgeleitet und siehst, dass deine Suchabfrage eine ID bekommen hat, die beim Blättern und Sortieren angehängt wird.