Seiten Blätterfunktion - wie funktioniert das mit einer MySQL Klasse?

Rostalski

Grünschnabel
Hallo Leute,

ich habe da ein Problem. In einer Klasse lese ich meine DB aus und speichere alles in einem Array. Ich gebe der Anweisung noch ein LIMIT 0,10 mit - somit soll von 0 beginnend ausgelesen werden und max. 10 Einträge pro Seite.

Auf meiner Php Seite lese ich das Array mit einer foreach() aus und gebe es untereinander aus. Darunter sind Links für Vor und Zurück - in ihnen übergebe ich den Startwert + die Anzahl der anzuzeigenden Einträge. auch alles, NUR:

- wie kann ich den LIMIT 0,10 Wert in meiner Klasse "überschreiben" damit auf Seite 2 ab 10 ausgelesen wird - also LIMIT 10,10 ? Geht das nicht irgendwie ?

Wenn nicht, kann ich das LIMIT ganz weglassen und auf meiner PHP Seite das Array auslesen und sagen nur 10 STOP ? Dann Seite 2. die nächsten 10 und STOP ?

Hilfe !
 
PHP:
class Product {
function getPageinfo() {

// Anzahl Datensätze ermitteln
$result4 = $this->db->select( " SELECT * FROM produkt LEFT JOIN hersteller ON hersteller.hersteller_id = produkt.hersteller_id LEFT JOIN gruppe ON gruppe.gruppe_id = produkt.gruppe_id WHERE produkt.gruppe_id='{$this->cid}' ORDER BY gruppe_name");
$anzds = $result4->count;

// Anzahl der Produkte pro Seite
$anzview = 10;

// 1. Aufruf
if(!isset($startview)) {
$startview = 0;
$seitenr   = 1;
}

$result2 = $this->db->select( " SELECT * FROM produkt LEFT JOIN hersteller ON hersteller.hersteller_id = produkt.hersteller_id LEFT JOIN gruppe ON gruppe.gruppe_id = produkt.gruppe_id WHERE produkt.gruppe_id='{$this->cid}' ORDER BY gruppe_name LIMIT $startview, $anzview");

}
}

habs ein wenig gekürzt - muß ja nur wissen wie ich die LIMIT $startview aus meiner php Seite ändern kann.
 
PHP:
function getPageInfo($startnr = 0, $seitennr = 0) {} // somit hättest du schonmal default werte und kannst dir die if abfrage sparen
[...]
// aus der php-datei
$produkt = new produkt();
$produkt->getPageInfo(10, 4); // ich hoffe du meinst es so wie ich
 
Ich versteh wie Du es meinst, Danke - aber irgendwas noch nicht! Bekomme auf allen Seiten immernoch die sleben Produkte raus. Das Startview läuft nicht weiter. Ich habe bestimmt was vergessen.

Was soll die 10, 4 bedeuten ?
Startview 10 und 4 ? Wieso 4 ?

Hier nochmal der Teil-Code meiner Php:
PHP:
if( count( $page['products'] ) > 0 ) {

echo "<table width=\"386\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
    $tdzaehler = 0;

foreach( $page['products'] as $row ) {
    $tdzaehler = $tdzaehler;

  if($tdzaehler % 2 == 0)
  {
  echo "</tr><tr>";
  }

    echo "<td colspan=\"2\" align=\"center\" class=\"beschreibung\">\n";
    if( file_exists( $bilderpfad.$pic ) ) {
      echo "produkt-name">";
    } else {
      echo "nix">";
    }
 echo "</td>\n";

$tdzaehler++;
}
?>
</table>
<?

// 1. Aufruf
if(!isset($startview)) {
 $startview = 0;
 $seitenr   = 1;
}

if(($page['anzds'] <= $startview) && ($page['anzds'] > 0)) {
 $page['anzds']   = $startview - $page['anzview'];
 $seitenr = $seitenr - 1;
}

// Seitennummer
$anzseiten   = ceil($page['anzds'] / $page['anzview']);
$nextseitenr = $seitenr + 1;
$lastseitenr = $seitenr - 1;

// Link vor
if($page['anzds'] <= ($startview + $page['anzview'])) {
$nextsite = "<span style=\"color:#888888\">n&auml;chste Treffer ››</span>";
} else {
$nextindex = $startview + $page['anzview'];
$nextsite  = "<a href=\"$thisscript?startview=$nextindex&seitenr=$nextseitenr\">
<span style=\"text-decoration:underline;color:#000000\">n&auml;chste Treffer ››</span></a>";
}

// Link zurück
if($seitenr == 1){
$lastsite = "<span style=\"color:#888888\">‹‹ vorherige Treffer</span>";
} else {
$lastindex = $startview - $page['anzview'];
$lastsite  = "<a href=\"$thisscript?startview=$lastindex&seitenr=$lastseitenr\">
<span style=\"text-decoration:underline;color:#000000\">‹‹ vorherige Teffer</span></a>";
}

if(!$page['anzds'] == "0") {
echo "<br><center>Seite ".$seitenr." von ".$anzseiten." / gesamt ".$page['anzds']." Treffer</center><br>\n";
 }
if($page['anzds'] == 0) {
echo "<center>Fehler! Bitte benachrichtigen Sie uns!</center><br>\n";
} else {
echo "<center>".$lastsite."&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;".$nextsite."</center><br>\n";
}
}

Wenn ich nun
$produkt = new produkt();
$produkt->getPageInfo(10, 4);
einsetzte bekomme ich den Fehler:
Cannot instantiate non-existent class: produkt

EDIT:
Diese Variablen habe ich auch schon deklariert:
$db = new DB( $config );
$product = new Product( $db );
$page = $product->getPageinfo();
 
Zuletzt bearbeitet:
1. hoffentlich hast du die klasse included
2. schreib Produkt groß
3. das 4 ist die seitenzahl, kA ob du das brauchst...
 
SUPER - Hast mir echt geholfen, danke danke danke !

Was jetzt nur noch blöde ist das ich folgendes immer abfragen muß:

PHP:
if($startview == 10) {
  $page = $product->getPageinfo(10);
} else {
  $page = $product->getPageinfo();
}

aber ich mache einfach ein paar ifelse und dann geht das schon !
 
Original geschrieben von Rostalski
SUPER - Hast mir echt geholfen, danke danke danke !

Was jetzt nur noch blöde ist das ich folgendes immer abfragen muß:

PHP:
if($startview == 10) {
  $page = $product->getPageinfo(10);
} else {
  $page = $product->getPageinfo();
}


aber ich mache einfach ein paar ifelse und dann geht das schon !
Du kannst auch Variablen einer Funktion, die beim Aufruf nicht mit übergeben wird, einen Wert zuweisen. Das geht so:

PHP:
function getPageinfo($intNumber = 10) {
    /* do someting */
    return something;
}
Die Funktion kann jetzt folgendermaßen aufgerufen werden:

PHP:
/* variante 1 */
$product->getPageinfo();

/* variante 2 */
$product->getPageinfo(10);
 
ehm?

@Rostalski:

PHP:
$product->getPageInfo($startview);

das reicht... damit übergibt er der methode der klasse produkt den inhalt der variable $startview...

@chino: das hab ich oben schon gemacht?!
 
Zurück