000
08.10.2003, 22:06 Uhr
mike
Pinguinhüpfer (Operator)
|
Hi! Ich wollte nur mal kurz meine bis jetzt gesammelten Erfahrungen mit PHP & PostgreSQL posten. Voraussetzung für diese Sample ist ein Server mit Apache und PHP, wobei PHP mit -with-pgsql kompiliert sein muss. Wie ihr sicher schon mitbekommen habt, ist Postgre einer der mächtigsten Open Source DBs. Ich möchte anhand eines Samples erklären, wie man Daten einfügen und auslesen kann und in einer PDF Datei zum Drucken zur Verfügung stellt.
Wenn PostgreSQL installiert ist, sollte man einen User postgres anlegen. Ebenfalls ist ein Ordner /var/lib/pgsql erforderlich (owner postgres), in dem die Datenbankdateien gespeichert werden. Um PostgreSQL im Hintergrund laufen zu lassen, müssen sämtliche Fehlermeldungen in eine Datei umgeleitet werden, daher wird mit folgendem Befehl die Log-Datei erstellt: touch /var/lib/pgsql.log chown postgres /var/lib/pgsql.log Zum erstmaligen Initialisieren wird folgender Befehl angewandt: ./initdb -d template1 -U postgres Nun sollte PostgreSQL seine Datenbank initialisieren. Mit dem Tool psql können Datenbanken uvm. erstellt werden. ./postmaster -i -D /var/lib/pgsql 1>/var/lib/pgsql.log 2>&1 & startet die DB. -i ermöglicht die TCP Anbindung. Für genaue config Datei Einstellungen www.postgresql.org
Folgende Befehle sind die wichtigsten PHP Commands um mit der DB zu kommunizieren: pg_Connect = verbindet pg_Close = Verbindung trennen pg_Exec = Execute des SQL Statements pg_Fetch_Array = gibt das Ergebnis in ein Array aus pg_NumRows = Anzahl der gefunden Ergebnisse
zu erstellen ist folgende Tabelle: CREATE TABLE public.tbluser ( userid serial NOT NULL, vorname varchar(256) NOT NULL, nachname varchar(256) NOT NULL, CONSTRAINT tbluser_pkey PRIMARY KEY (userid) ) WITH OIDS;
Folgender Source fügt einen User ein:
PHP 4: |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Das ist ein Postgre Test</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <?php if(isset($Submit)) { //Wenn Submit gedrückt wurde, dann... $db = pg_Connect("host=localhost dbname=mainhm user=postgres password=XXX") //wenn trust - kein passwort or die ("ERROR: Die Datenbank ist nicht erreichbar"); $query = "INSERT INTO tbluser (vorname,nachname) VALUES('$vorname','$nachname');"; pg_Exec($query); //SQL Statement ausführen pg_Close($db); //VErbindung wiedr Trennen } ?> <body> <form name="form1" method="post" action=""> <input name="vorname" type="text" id="vorname"> <input name="nachname" type="text" id="nachname"> <input type="submit" name="Submit" value="Submit"> </form> </body> </html>
|
Folgender Source liest alle User aus:
PHP 4: |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Auslesen</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <?php $db = pg_Connect("host=localhost dbname=mainhm user=postgres password=XXX") or die ("ERROR: Die Datenbank ist nicht erreichbar"); $query = "SELECT * FROM tbluser;"; $result = pg_Exec($query); $rowcount = pg_NumRows($result);
echo "<table width='100%' border='0' cellspacing='1' cellpadding='3' bgcolor=||LC01|| $index = 0; while ($index < $rowcount) { $user = pg_Fetch_Array($result, $index); if($index % 2) echo "<tr bgcolor=||LC01|| else echo "<tr bgcolor=||LC01|| echo "<td width=50%>$user[vorname]</td>"; echo "<td width=50%>$user[nachname]</td>"; echo "</tr>"; $index++; } echo "</table>"; pg_Close($db); ?> </body> </html>
|
Anschließend wäre es noch schön, das ganze zu drucken. Hier bietet sich das PDF File Format an. Am einfachsten geht es mit den Klassen von www.ros.co.nz/pdf/ Zu erstellen ist eine neue PHP File, z.B. preview.php
PHP 4: |
<?php include ('class.ezpdf.php'); $pdf =& new Cezpdf(); $pdf->selectFont('./fonts/Helvetica.afm'); $pdf->ezText('Vorschau',14); $pdf->ezSetDy(-30,'makeSpace'); $data = array(); $db = pg_Connect("host=localhost dbname=mainhm user=postgres password=XXX") or die ("ERROR: Die Datenbank ist nicht erreichbar"); $query = "SELECT * FROM tbluser;"; $result = pg_Exec($query); $rowcount = pg_NumRows($result); $index = 0; while ($index < $rowcount) { $user = pg_Fetch_Array($result, $index); $data[$index] = array('Vorname'=>$user[vorname],'Nachname'=>$user[nachname]); $index++; } pg_Close($db); $pdf->ezTable($data); $pdf->ezStream(); ?>
|
Mit freundlichen Grüßen mike --
Dieser Post wurde am 09.10.2003 um 15:49 Uhr von mike editiert. |