Überblick PHP • Prinzipien und Architekturen • PHP als Programmiersprache • PHP: Skriptsprache für server-seitige Einbettung in HTML • Features – Ausführung in der Unix-Shell – Ausführung im Webserver • • • • • • • – – – – Einbettung HTML und Formulare Datenbank-Connect Anfragen (select) Anfrageergebnisse iterieren Anfragen (insert, update) Formulare und SQL verknüpfen Dr. Michael Höding PHP und Datenbanken Schnelleinstieg • Prinzip <html><body> <?php echo "Hello World !" ?> </body></html> 1 Einführendes Beispiel „Hallo Welt“ in PHP • http://fwil588.fh-brandenburg.de/~ hoeding /HalloWelt.php • • Ausführung in der Unix-Shell Ausführung durch Webserver PHP und Datenbanken Schnelleinstieg PHP und Datenbanken Schnelleinstieg In PHP gibt es 3 Skalar-Typen – Integer – Real (Float, Double) – String • Ungetypte Sprache: Typen werden nicht vordefiniert <?php // Integer-Variablen $inte[] = 123; $inte[] = -123; $inte[] = 0x123; // reelle Variablen $reele[] = 123.4; $reele[] = 12e20; $reele[] = -.23; // Strings $str[] = "abc"; $str[] = 'abc\n\c\''; $str[] = "abc\n\ab\rx\t\\,\$\041\x401"; ?> 3 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg PHP-Kontrollstrukturen Ein wenig HTML • Bedingte Ausführung: if oder switch • Schleifen: while, do while, for • Kurzschlüsse: break, continue • bei Ausgabe über Browser: HTML-Tags wirksam aber Leerzeichen Zeilenumbruch unterdrückt • Zeilenumbruch: <BR> <P> • Fettdruck: <B> </B> • Überschriften <H1></H1> <H2> </H2> usw. • Tabellen: <TABLE> </TABLE> <?php $a = 12; print "$a, $b , $c"; while ($a>0) { print "$ai .. "; if ($a<10) print "Einstellig \n"; $a--; } ?> Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 2 PHP – Datentypen <?php print "Hallo Welt\n"; ?> Dr. Michael Höding Dr. Michael Höding • • C-ähnliche Syntax, objektorientierte Konzepte einfache Verarbeitung von Dokumentanforderung dynamische Generierung von HTML-Dokumenten Schnittstellen zu vielen Systemfunktionen und DBMS 4 – Zeile (Row) <TR> </TR> – Spalte <TD> </TD> 5 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 6 1 HTML-Table - Beispiel Common Gateway Interface (CGI) <?php print "<H1>Hallo Welt</H1>"; • CGI: ursprüngliche Schnittstelle zwischen Web-Server und Programm zur Anbindung externer Quellen • Gateway: $a = 12; $b =1.23; $c = "Eine Zeichenkette\n"; – Umformung einer Informationsquelle in ein Web -Dokument – Programm/Skript zur Bearbeitung einer Dokumentenanforderung, das print "$a, $b , $c"; print "<TABLE BORDER=3>"; while ($a>0) { print "<TR><TD>$a</TD>\n"; if ($a<10) print "<TD>Einstellig</TD><TR>\n"; $a--; } print "</TABLE>"; • HTML-Text, eine URL oder andere Daten liefert • in beliebiger Sprache implementiert ist ?> /+,!-"#.*$%+,-. &'( ) Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 7 PHP und Datenbanken Schnelleinstieg Einbettung: Prinzip 9 Einbettung: Beispiel <html><body> <H1>Hallo Welt</H1> <?php $a = 12; $b =1.23; $c = "Eine Zeichenkette\n"; print "$a, $b , $c"; ?> <TABLE BORDER=3> <?php while ($a>0) { ?><TR><TD><?php print $a ?></TD> <?php if ($a<10): ?> <TD>Einstellig</TD><TR> <?php endif; $a--; } ?> </TABLE>; </body></html> Dr. Michael Höding PHP und Datenbanken Schnelleinstieg PHP und Datenbanken Schnelleinstieg 0016:1627253;738<849=459>? @86 AB LMEJNFGHIJKNG CGI: Prinzip Dr. Michael Höding Dr. Michael Höding Dr. Michael Höding 8 0161273:7308C84925?695>4D0:2?5 PHP und Datenbanken Schnelleinstieg 10 Einbettung mit PHP • Einbindung externer Dateien (z.B. HTML-Vorlagen) – require 'dateiname' Einfügen des Inhaltes der Datei dateiname – include 'dateiname' Einfügen und Auswerten der Datei dateiname • Verarbeitung von Formularen – Auswertung der Umgebungsvariablen durch PHP -Interpreter – Zugriff auf Werte der Felder: Variablen mit Elementnamen – Beispiel: HTML: <input type="text" name="eingabe"> PHP: $eingabe 11 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 12 2 PHP und Datenbanken Verbindungsaufbau PHP-Oracle • DatenbankHandle=OCILogin(Name, Passwort, Datenbankname) • Beispiel $connID = ocilogon("scott","tiger","db2.fhbrandenburg.de"); • PHP – prozedurale Programmiersprache • Nutzung von SQL über CLI • Verschieden CLI für verschiedene DBMS – ora, oci8 für Oracle (http://www.php.net ) – mySQL für MySQL – scott (mit tiger) ist bei Oracle ein Testaccount (Achtung Sicherheitslücke schließen) – Kleine Testdatenbank mit 4 Tabellen – Umgebungsvariablen müssen gesetzt sein, wichtig: ORACLE_HOME (sollte durch Webserver erfolgen) • Grundsätzlich – zum Verbindungsaufbau: Database Handle – Erzeugen, Parsen, Ausführen von SQL-Anweisungen: Statement Handle – Auswertung des Ergebnis mit Cursor – Test ob Ausführung erfolgreich Dr. Michael Höding PHP und Datenbanken Schnelleinstieg • Test ob Verbindung aufgebaut – einfach überprüfen, ob der Database Handle initialisiert ist: if ($connID > 0) { echo "Connected to Oracle!<BR>"; } 13 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 14 SQL-Statement ausführen SQL-Ergebnis auswerten • Schritt 1: SQL-Anfrage formulieren $sql = "select ENAME from EMP"; • Schritt 2: Statement-Handle durch Parsen erzeugen $stmt = OCIParse($connID, $sql); • Schritt 3: Ausführen OCIExecute($stmt); • Schritt 4: Auf Ausführungsfehler testen if($error = OCIError($stmt)) { die("<font color=red>ERROR!! Could not execute statement!</font>");} • mit OCIFetch wird satzweise über die Ergebnismenge iteriert • OCIFetch liefert 0 wenn kein Satz gefunden • mit OCIResult wird aus dem Satz auf den der Cursor zeigt und der genannten Spalte eine Datenwert geliefert • Beispiel: Auslesen bzw. Ausgeben aller Werte für ENAME (Name des Employees - Arbeitnehmers) Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 15 while (OCIFetch($stmt)) { print OCIResult($stmt, "ENAME"). "<BR>"; } Dr. Michael Höding PHP und Datenbanken Schnelleinstieg SQL-Ergebnis auswerten Metainformationen nutzen • Das ganze als HTML-Tabelle: • OCINumCols liefert Anzahl der Spalten einer Ergebnisrelation • OCIColumnName liefert Name der n-ten Spalte • Damit kann man für beliebige SQL-Anfragen „passende“ HTML-Tabellen erzeugen • Prinzip: <TABLE BORDER=3> <?php while (OCIFetch($stmt)) { $ename= OCIResult($stmt, "ENAME"); $sal= OCIResult($stmt, "SAL"); ?><TR><TD><?php print $ename ?></TD> <TD><?php print $sal ?></TD><TR> <? } ?> </TABLE>; Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 16 – Überschrift ausgeben: für 1 bis n: OCIColumnName – Äußere Schleife; für alle Datensätze OCIFetch • für 1.. n OCIResult( $stmt, $OCIColumnName(n)) 17 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 18 3 Parametrisierung mit Formular Fazit • Formularvariablen sind unmittelbar in PHP-Skript nutzbar! • Nutzung von HTML und Formularen erlaubt einfache Oberflächen • Datenbankanbindung über spezielle CLI: z.B OCI • Zahlreiche OCI-Funktionen zur Anfragebearbeitung, Transaktionssteuerung, Zugriff auf Daten und Metadaten • Einbettung von PHP erlaubt komfortable Nutzung von HTML mit Datenbankzugriff oder Berechnungsfunktionalität • Einbettung kann zu unübersichtlichem HTML-Code führen beispiel_form.html <HTML><BODY> <H1> Das ist ein Beispielformular</H1> <form method=POST action="beispiel.php"> <input type="text" SIZE=40 name="sqlQuery"> <input type="submit"> </form> </BODY><(HTML> beispiel.php (Ausschnitt) ... $sql = $sqlQuery; ... Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 19 Dr. Michael Höding PHP und Datenbanken Schnelleinstieg 20 4