PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tutorial : PEAR:DB mit DB_Pager (Alpha)



betrazivis
21.10.2005, 01:57
Ein wenig PEAR::DB mit DB_Pager.
Prost Mahlzeit.


Wer Fehler finden sollte, kann(SOLL) diese gerne öffentlich machen.
Ansonsten viel Spaß beim Schustern von neuen Scripts mit PEAR.



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PEAR::DB mit Bl&auml;tterfunktion</title>
</head>

<body>

<?php
// PEAR:DB mit Blätterfunktion(PEAR::DB_Pager)
// Autor Tonias Lorsbach
// tobi@phpschnipseld.de
//
//


//Globale Konfiguration
error_reporting(E_ALL);
$config = array();
//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';
$config['include_path']=$_SERVER['DOCUMENT_ROOT'].'/!PEAR/';




//Den Include-Path einstellen
//Dies kann natürlich wegelassen werden, wenn eine Installation im lokalen Include_path erfolgt ist
ini_set('include_path',$config['include_path'].PATH_SEPARATOR.get_include_path());



//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'] = 'tobi';
$config['sqlpass'] = 'uppz';
$config['db_name'] = 'dbname';

//Datenbanktyp
define ('_DBTYPE', 'mysql');
//Alles nochmal (superglobalen) Konstanten zuweisen
define ('_DBUSER', $config['sqluser']);
define ('_DBPASS', $config['sqlpass']);
define ('_DBHOST', $config['sqlhost']);
define ('_DBNAME', $config['db_name']);

//Der DSN
define ('_DSN',_DBTYPE.'://'._DBUSER.':'._DBPASS.'@'._DBHOST.'/'._DBNAME);


//
//
//
//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
$db_options = array(
'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)) {
die($db->getMessage());
}


//
//
//
//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($res->getMessage());
}
//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)
$from = isset($_GET['page']) ? $_GET['page'] : 0;
// 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)) {
die($res->getMessage().mysql_error());
}

//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>';
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
//der Dateninhalt
echo '
<tr>
<td>'.$row['id'].'</td>
<td>'.$row['name'].'</td>
<td>'.$row['email'].'</td>
</tr>
';
}
//Tabellen-Ende
echo '</table>';


//
//
//Pager
//
//


//Kommen wir zum eigenlichen 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:
echo $prevlink = isset($data['prev']) ? '<a href="'.$_SERVER['PHP_SELF'].'?page='.$data['prev'].'">zur&uuml;ck&nbsp;</a>' : '';

//Weiter geht es mit den Seiten
// hierfür müssen wir uns aber einer foreach-Schleife bedienen.
foreach($data['pages'] as $a => $val){
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$val.'">&nbsp;'.$a.'&nbsp;</a>';
}

//Und last but not least der "Weiter-Button"
echo $nextlink = isset($data['next']) ? '<a href="'.$_SERVER['PHP_SELF'].'?page='.$data['next'].'">weiter&nbsp;</a>' : '';


//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');
*/
?>


</body>
</html>