PEAR::DB mit Blätterfunktion
In diesem Beispiel wird PEAR::DB mit der Erweiterung PEAR::DB_Pager verwendet.
PHP:
-
<?php
-
// PEAR:DB mit Blätterfunktion(PEAR::DB_Pager)
-
// Autor Tobias Lorsbach
-
// tobi@phpschnipsel.de
-
//
-
//
-
-
-
//Globale Konfiguration
-
//Diese Tabelle wird in diesem Tutorial benutzt:
-
-
# CREATE TABLE `user` (
-
# `id` tinyint(64) NOT NULL auto_increment,
-
# `name` varchar(128) NOT NULL default '',
-
# `email` varchar(128) NOT NULL default '',
-
# PRIMARY KEY (`id`)
-
# );
-
-
$db_table = 'user';
-
//Manueller Include_path. Da wo PEAR liegt. Meist auf Shared-Hosting Accounts:
-
$config['include_path']='/home/www/web68/files/!PEAR/';
-
-
-
-
-
//Den Include-Path einstellen
-
//Dies kann natürlich wegelassen werden, wenn eine Installation im lokalen Include_path erfolgt ist
-
-
-
-
//PEAR-Pakete includen
-
$pear_package = 'DB/Pager.php';
-
if(!@include_once($pear_package)) die('Fehler: Das Pearpaket '.$pear_package.' wurde nicht gefunden!');
-
-
//Muss nicht, KANN
-
$pear_package = 'DB.php';
-
if(!@include_once($pear_package)) die('Fehler: Das Pearpaket '.$pear_package.' wurde nicht gefunden!');
-
-
-
-
//PEAR::DB initalisieren
-
-
//Datebbankdaten
-
$config['sqlhost'] = 'localhost';
-
$config['sqluser'] = '##';
-
$config['sqlpass'] = '##';
-
$config['db_name'] = '##';
-
-
//Datenbanktyp
-
//Alles nochmal (superglobalen) Konstanten zuweisen
-
-
//Der DSN
-
-
-
//
-
//
-
//
-
//Per PEAR::DB mit der Datenbank Verbindung aufnehemen
-
//
-
//
-
//
-
-
-
//Optionen: z.B. dubug ist das Debug-Level,
-
//das man mit 0 natürlich auch ausschalten kann
-
'debug' => 2
-
);
-
//Referenz auf das PEAR::DB Objekt mit der
-
//Konstanten _DSN in der unser DSN_String schlummert
-
$db =& DB::connect(_DSN, $db_options);
-
-
//Immer checken ob kein Fehler aufgetreten ist.
-
//Ab dann bricht das Script per die() ab und
-
//gibt eine PEAR-Fehlermeldung aus
-
if (DB::isError($db)) {
-
}
-
-
-
//
-
//
-
//
-
//Per PEAR::DB Daten aus einer Datenbank ziehen
-
//
-
//
-
//
-
-
-
//Zeit einen (zugegeben sehr trivialen) Query zu senden
-
//Starten wir mit dem SQL-Statement
-
$sql = 'SELECT * FROM '.$db_table;
-
-
-
//ACHTUNG: Dieser Query wird nur dazu gebraucht um die komplette Datenmenge zu ermitteln
-
$res =& $db->query($sql);
-
-
if (DB::isError($res)) {
-
}
-
//Die komplette Anzahl der Zeilen ermitteln
-
$numrows = $res->numRows();
-
-
-
//Wichtig ist jetzt der Unterschied zur "Standard-Funktion" DB::query()
-
//Zum Pagen müssen wir dem Query nämlich ein Limit verpassen.
-
//Dies machen wir mit DB::limitQuery()
-
//Damit auch apäter die Werte korrekt per GET-Request eingelesen werden können,
-
//verpassen wir der Variablen $from noch einen dreifach-konditionalen Operator auf $_GET['page']
-
//(das was wir später in den Link zum Blättern schreiben)
-
// Wie viele Results ausgegeben werden
-
$limit = 4;
-
// Hier wird der "Google-Algorithmus" verwendet,
-
//der ab einer bestimmten Menge von Seiten, diese begrenzt. [optional]
-
$maxpages = 5;
-
-
-
$res = $db->limitQuery($sql, $from, $limit);
-
-
//Es besteht immer die Möglichkeit ein mysql_error() mit dran zuhängen,
-
//falls man vor lauter Fehlern mal nicht weiterkommen sollte.
-
//(Später wieder löschen um den bösen Hackern die Tour zu versauen)
-
if (DB::isError($res)) {
-
}
-
-
//Resultset holen. Hier benutze ich die Konstante DB_FETCHMODE_ASSOC (Stichwort: mysql_fetch_array()),
-
//die einen assoziativen Array zuweist.
-
//Es ist auch möglich hier eigene Funktionen zu verwenden
-
//Stichwort: mysql_fetch_array()
-
-
//der Tabellenkopf
-
echo '
-
<table width="80%" border="1">
-
<tr>
-
<th width="34" scope="col">ID</th>
-
<th width="340" scope="col">Name</th>
-
<th width="422" scope="col">Email</th>
-
</tr>
-
<tr>
-
<td>'.$row['id'].'</td>
-
<td>'.$row['name'].'</td>
-
<td>'.$row['email'].'</td>
-
</tr>
-
</table>
-
';
-
-
-
//
-
//
-
//Pager
-
//
-
//
-
-
-
//Kommen wir zum eigentlichen Pager:
-
//Die erforderlichen Daten werde mit DB_Pager::getData() ermittelelt.
-
//Diese Funtion gibt ein assoziatives Array, mit allen benötigten
-
//Werten zurück, die zum Bauen des Pagers benötigt werden.
-
//Bei den Parametern treffen wir nun wieder alte Bekannte.
-
$data = &DB_Pager::getData($from, $limit, $numrows, $maxpages);
-
-
-
//Fangen wir mit dem "Zurück-Link" an:
-
-
//Weiter geht es mit den Seiten
-
// hierfür müssen wir uns aber einer foreach-Schleife bedienen.
-
foreach($data['pages'] as $a => $val){
-
}
-
-
//Und last but not least der "Weiter-Button"
-
-
-
//Das war`s
-
-
-
//Wer zu faul ist, sich Daten für das Tutorial einzutippen
-
/*
-
INSERT INTO `user` VALUES (1, 'Tom', 'tom@phpschnipsel.de');
-
INSERT INTO `user` VALUES (2, 'Klaus', 'klaus@phpschnipsel.de');
-
INSERT INTO `user` VALUES (3, 'Jenny', 'jenny@phpschnipsel.de');
-
INSERT INTO `user` VALUES (4, 'Claudia', 'cl@phpschnipsel.de');
-
INSERT INTO `user` VALUES (5, 'ich', 'ich@phpschnipsel.de');
-
INSERT INTO `user` VALUES (6, 'toller', 'toller@phpschnipsel.de');
-
INSERT INTO `user` VALUES (7, 'Max', 'max@phpschnipsel.de');
-
INSERT INTO `user` VALUES (8, 'Miliav', 'mm@phpschnipsel.de');
-
INSERT INTO `user` VALUES (9, 'Superdupermann', 'wer@phpschnipsel.de');
-
INSERT INTO `user` VALUES (10, 'tommy', 'tommy@phpschnipsel.de');
-
INSERT INTO `user` VALUES (11, 'Vater', 'vater@phpschnipsel.de');
-
INSERT INTO `user` VALUES (12, 'mudda', 'mudda@phpschnipsel.de');
-
*/
-
-
?>