• Keine Ergebnisse gefunden

Der WWW-Server ist das Bindeglied zwi- schen Browser und Datenbank.

N/A
N/A
Protected

Academic year: 2021

Aktie "Der WWW-Server ist das Bindeglied zwi- schen Browser und Datenbank. "

Copied!
43
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Der Browser wird vom Benutzer (Client) gestartet.

Der WWW-Server ist das Bindeglied zwi- schen Browser und Datenbank.

Der WWW-Server stellt die Datenbankver- bindung (ODBC, OLE DB, JDBC) her.

Der Datenbank-Server verwaltet die Daten- bank selbstständig.

Kleine Systeme verwalten Datenbank und

Browser

WebServer

DB-Server

(2)

Hinweise zum Arbeiten mit PHP in der Vorlesung

¾ Erstellen der HTML/PHP-Dateien mit einem beliebigen WEB-Editor

¾ Arbeiten mit dem Apache WWW-Server rfhs8012.fh-regensburg.de

Verwenden dieses Servers:

¾ Laufwerk U: unter WindowsXP in U511/514:

o Verzeichnis public_html im Hauptverzeichnis erstellen

o Leserechte für alle auf dem Hauptverzeichnis

o Lese- und Ausführungsrechte für alle auf public_html

¾ Zugriff auf den WWW-Server erfolgt mittels der URL:

(3)

Aufbau einer HTML-Datei

<html>

<!-- Kopf: -->

<head>

<title>Text des Titels</title>

</head>

<!—Rumpf: -->

<body>

Text, Verweise, Grafikreferenzen usw.

</body>

(4)

<!-- Tabellenstruktur -->

<table border cellpadding=3>

<tr>

<th>Kopfzelle</th>

<th>Kopfzelle</th>

</tr>

<tr>

<td>Datenzelle</td>

<td>Datenzelle</td>

(5)

<form action="HTML-/PHP-Datei" method="post">

<!-- Formularelemente -->

<!-- Verschiedene Eingabefelder: -->

<input type="text" size=x maxlength=x

name="Elementname" value="Text">

<input type="password" size=x maxlength=x

name="Elementname">

<!-- Buttons: -->

<input type="submit" value="OK-Beschriftung">

<input type="reset" value="Abbruch-Beschriftung">

</form>

(6)

<form action="HTML-/PHP-Datei" method="post">

<select multiple name="Elementname" size=x>

<option> Eintrag

<option> anderer Eintrag

<option selected> Vorauswahl

<option value="Wert"> weiterer Eintrag

</select>

<!-- Radio-Buttons und Check-Boxen: -->

<input type="radio" name="Name" value="Wert"> Text

<input type="checkbox" name="Name" value="Wert"> Text

(7)

<html>

<head>

<title>Erstes Beispiel einer Formularseite</title>

</head>

<body>

<center><h1>Vorlesung DB</h1></center>

<center><h3>Edwin Schicker</h3></center>

Diese Seite ist die Einstiegsseite zur ...

<p>

Folgende Seiten stehen zur Verfügung:

<p>

<table cellpadding=10>

<tr>

<td align=right> <form action="name.html">

<input type="Submit" value="Erstes PHP-Beispiel">

</form>

</td>

<td valign=top> Aufruf der Datei <i>name.html</i>.

(8)

<!-- PHP-Beispiel, Datei name.html -->

Bitte Daten eingeben und Weiter-/Rücksetz-Button klicken.

<form action="name.php" method=post> <!-- name.php -->

<table cellpadding=10>

<tr> <td align=right>Bitte geben Sie Ihren Namen ein: </td>

<td> <input size=30 maxlength=30 name=Name> </td>

</tr>

<tr> <td align=right>Ihre Anrede: </td>

<td> Herr<input type=radio name=Anrede

value="Sehr geehrter Herr">

Frau<input type=radio name=Anrede

value="Sehr geehrte Frau">

</td>

</tr>

(9)

<!--Auslesen der mit POST uebergebenenen Daten: -->

<?php

$Name = $_POST['Name'];

$Anrede = $_POST['Anrede'];

echo "$Anrede $Name! Sie haben es ";

?>

geschafft! Die erste PHP-Seite wurde ausgeführt.</p>

<p>Das erste PHP-Beispielprogramm wäre damit bearbeitet.

Mit dem folgenden Link kehren Sie zur Anfangsseite zurück.</p>

<p>

<center><a href="index.html">Startseite</a></center>

</p>

</body>

</html>

(10)

Zugriff auf Datenbanken, Schritt für Schritt Schritt 1: Eingabe der Verbindungsdaten

<form action="db_anf.php" method="post">

<table><tr>

<td>Kennung: </td>

<td><input type=Text name=Kennung size=20></td>

</tr><tr>

<td>Passwort: </td>

<td><input type=Password name=Passwort size=20></td>

</tr></table>

<p><input type="Submit" value="Bestätigen"></p>

</form>

(11)

Verbindungen mit PHP zu einer Datenbank

oci_connect Einloggen in eine Oracle Datenbank.

oci_pconnect Einloggen in eine persistente Oracle Datenbank, sonst wie oci_connect.

oci_close Schließen einer Datenbankverbindung zu Oracle

mysqli Objektkonstruktor zum Einloggen in die MySQL Datenbank.

->close Schließen einer Datenbankverbindung zu MySQL.

odbc_connect Einloggen in eine ODBC Datenbank

odbc_pconnect Einloggen in eine persistente ODBC Datenbank odbc_close Schließen einer Datenbankverbindung zu ODBC

(12)

Schritt 2: Einloggen in eine Oracle-Datenbank

<?php

echo "<br>Aufbau einer Verbindung zu Oracle.<br>";

$conn = oci_connect($_POST['Kennung'],

$_POST['Passwort'], "rfhs8012_ora9i")

or die("Verbindung zu Oracle gescheitert<br>");

(13)

Verbindungen mit PHP zu einer Datenbank

oci_parse Analysieren einer Abfrage mit Rückgabe eines Statements.

oci_execute Ausführen eines Statements.

oci_free_statement Freigeben aller mit dem Statement verbundenen Ressourcen.

->query Ausführen eines SQL-Befehls, liefert ein Query-Objekt zurück

->close Freigeben der Query-/Statement-Ressourcen (Query- Objekt!)

odbc_exec Ausführen eines SQL-Befehls

odbc_free_result Freigeben aller mit dem Ausführen verbundenen Ressourcen

(14)

Schritt 3: Ausführen eines SQL-Befehls

$sql = "Select Name, Ort From Personal Where Persnr=2";

$wert = oci_parse($conn, $sql) // Ueberpruefen

or die("Fehler im Select-Befehl");

oci_execute($wert,OCI_DEFAULT) // Ausfuehren

or die("Fehler beim Ausfuehren des Select-Befehls");

(15)

Auslesen eines Select-Befehls aus einer Datenbank

oci_fetch_array Lesen der nächsten Ergebniszeile in ein assoziatives/nummeriertes Feld

->fetch_array Lesen der nächsten Ergebniszeile in ein Feld (Query-Objekt!).

odbc_fetch_array Lesen der nächsten Ergebniszeile in ein assoziatives/nummeriertes Feld

(16)

Schritt 4: Auslesen eines Select-Befehls

if ($erg = oci_fetch_array($wert)) { // Einlesen der Daten

echo "Der Mitarbeiter mit der Persnr 2 heißt ", "$erg[NAME] und wohnt in $erg[ORT].<br>";

}

else {

echo "Der Mitarbeiter existiert nicht!<br>";

}

(17)

Transaktionsbetrieb mit PHP

oci_commit Abschließen einer Transaktion.

oci_rollback Rückgängigmachen einer Transaktion.

->commit Abschließen einer Transaktion (Verbindungsobjekt) ->rollback Rückgängigmachen einer Transaktion.

->autocommit Einstellen, ob mit oder ohne Autocommit.

odbc_commit Abschließen einer Transaktion

odbc_rollback Rückgängigmachen einer Transaktion odbc_autocommit Einstellen, ob mit oder ohne Autocommit

(18)

Schritt 5: Beenden einer Datenbankverbindung

oci_commit($conn);

oci_free_statement($wert);

oci_close($conn);

?>

(19)

Wichtige Informationen zu einer DB-Verbindung

oci_field_name Zurückgeben des Spaltennamens

oci_num_rows Anzahl der betroffenen Zeilen (Vorsicht beim Select!) oci_num_fields Zurückgeben der Anzahl der Spalten

->field_count Eigenschaft enthält Anzahl der Spalten der letzten Abfrage ->affected_rows Eigenschaft enthält die Anzahl der manipulierten Zeilen ->fetch_field Zurückgeben eines Info-Objekts mit Spalteninfos (Query-

Objekt!)

->num_rows Query-Eigenschaft enthält die Anzahl der ausgelesenen Zeilen

odbc_field_name Zurückgeben des Spaltennamens

odbc_num_rows Anzahl der betroffenen Zeilen (Vorsicht beim Select!)

(20)

Fehlerfunktionen in PHP

oci_error Liefern des letzten Fehlers stmt|conn|global zurück oder FALSE, falls fehlerfrei

mysqli_connect_errno Liefern des letzten Verbindungsfehlers oder 0, falls fehlerfrei

mysqli_connect_error Liefern des letzten Verbindungsfehlertextes oder ' ' ->errno Liefern der letzten Fehlernummer oder 0, falls fehlerfrei

->error Liefern des letzten Fehlertextes oder ' ', falls fehlerfrei ->sqlstate Liefern des SQLSTATE-Status

(21)

Ausgabe eines Select-Befehls (1)

<?php

if (isset($_POST['Kennung'])) {

$Name = trim($_POST['Name']); // Leerzeichen entfernen if (strlen($Name) == 0) {

echo "Es wurden im Formular keine Angaben gemacht";

} else {

echo "Mitarbeitersuche mit Teilstring $Name.<br>";

$conn = oci_connect($_POST['Kennung'],$_POST['Passwort'], "rfhs8012_ora9i") or die("DB-Verbindung gescheitert");

$sql = "Select Persnr, Name, Ort, GebDatum, Gehalt, Vorgesetzt

From Personal

Where Upper(Name) Like Upper('%$Name%');";

(22)

Ausgabe eines Select-Befehls (2)

$wert = oci_parse($conn, $sql) or die("Parse-Fehler");

oci_execute($wert,OCI_DEFAULT) or die("Fehler");

// Ausgeben der gelesenen Daten:

if (!($erg = oci_fetch_array($wert))) {

echo "Gesuchter Mitarbeiter existiert nicht!";

} else {

?>

Ergebnis:<br>

<table border cellpadding=10><tr>

<th>Persnr </th> <th>Name </th>

<th>Ort </th> <th>GebDatum </th>

(23)

// In einer Schleife ausgeben:

do {

echo "<td> $erg[PERSNR] </td>";

echo "<td> $erg[NAME] </td>";

echo "<td> $erg[ORT] </td>";

echo "<td> $erg[GEBDATUM]</td>";

echo "<td> $erg[GEHALT] </td>";

echo "<td>($erg[VORGESETZT] == null)?

'Ja': 'Nein'</td>";

echo "</tr>";

} while ($erg = oci_fetch_array($wert));

echo "</table>"

}

oci_commit($conn); // TA beenden oci_free_statement($wert);

oci_close($conn); // DB schliessen } // endif

} // endif

(24)

Typische Ausgabe von Select-Abfragen:

while ( $erg = oci_fetch_array($wert) )

// Zeile auslesen bis Ende {

// Attribute dieser Zeile in assoziativem Feld

// $erg["SPALTENNAME"]

// abgelegt, mittels echo ausgeben

} // end while

(25)
(26)

Auslesen von Kunden- und Teiledaten

$conn = oci_connect($_POST['Kennung'],$_POST['Passwort'], "rfhs8012_ora9i") or die("DB-Verbindung gescheitert");

$sql1 = "Select Nr, Name From Kunde";

$sql2 = "Select Teilnr, Bezeichnung From Teilestamm";

$wert1 = oci_parse($conn,$sql1) or die();

$wert2 = oci_parse($conn,$sql2) or die();

oci_execute($wert1,OCI_DEFAULT) or die();

oci_execute($wert2,OCI_DEFAULT) or die();

(27)

Auslesen von Kundendaten in eine Combobox

<td align=right> Bitte wählen Sie einen Kunden aus: </td>

<td><select name="Kundnr" size=1>

<?php do {

echo "<option value=\" $erg1[NR] \"> $erg1[NAME]";

} while ($erg1 = oci_fetch_array($wert1));

?>

</select> </td>

(28)

Versteckte Datenfelder übergeben

<input type="hidden" name="Kennung"

value="<?echo $_POST['Kennung'];?>">

<input type="hidden" name="Passwort"

value="<?echo $_POST['Passwort'];?>">

(29)

Aufbereiten der ausgewählten Daten

$sql = "Select A.Auftrnr As Auftrag, Datum, Persnr, Anzahl, Gesamtpreis From Auftrag A, Auftragsposten AP Where A.Auftrnr = AP.Auftrnr

And Kundnr = $_POST[Kundnr]

And Teilenr = $_POST[Teilnr]";

$wert = oci_parse($conn,$sql)

or die("Parse-Fehler");

oci_execute($wert,OCI_DEFAULT)

or die("Zugriffs-Fehler");

(30)

Fehlerbehandlung

@oci_execute($wert,OCI_DEFAULT); // keine Fehlermeldung!

$fehler = oci_error($wert); // Fehler in Variable merken

if ($fehler['code']) {

echo "Fehler $fehler[message] beim Select-Zugriff";

die();

}

(31)

Fehlerbehandlung und Exception-Handling

try {

// ...

@oci_execute($wert,OCI_DEFAULT); // ohne Fehlermeldung $fehler = oci_error($wert); // Fehler merken

if ($fehler['code']) // Fehler?

throw new Exception($fehler['message'],

$fehler['code']);

// ...

}

catch (Exception $e) {

echo "<p>Fehler ", $e->getMessage(), " in Zeile ",

$e->getLine(), " mit Code ", $e->getCode(), "</p>";

}

(32)

Fehlerbehandlung in Oracle Fehler beim Einloggen:

$conn = @oci_connect( ... );

if (!$conn) {

$fehler = oci_error(); // ohne Parameter // ...

}

Fehler beim Parsen:

$wert = @oci_parse($conn, ... );

if (!$wert) {

$fehler = oci_parse($conn); // Parse aufrufen!

// ...

}

(33)

Eingabe und Ausführen eines SQL-Befehls

Textbereich definieren:

<form action="select.php" method="post">

<table cellpadding=20>

<tr>

<td>

<table >

<tr><td>SQL-Befehl (ohne Semikolon!): </td></tr>

<tr><td><textarea name="Eingabe" rows=10 cols=60 wrap="virtual"><?

echo isset($_POST['Eingabe'])?

trim($_POST['Eingabe']):"" ?>

</textarea> </td></tr>

</table>

</td>

<td>

(34)

Textbereich auslesen und Datenbank aufrufen:

$Eingabe = trim($_POST['Eingabe']);

$pos = strpos($Eingabe, " "); // erstes Leerzeichens if ($pos === false)

die("Kein korrekter SQL-Befehl");

$erstesWort = substr($Eingabe, 0, $pos); // Erstes Wort $wert = @oci_parse($conn,$Eingabe);

$fehler = oci_error($wert); // Fehler explizit merken if ($fehler['code'])

{ die ("Fehler $fehler[message] beim SQL-Befehls");

}

oci_execute($wert,OCI_DEFAULT) // Ausfuehren or die("Fehler beim Ausfuehren des SQL-Befehls");

(35)

Select-Befehl auswerten und ausgeben:

if (strCaseCmp($erstesWort,"SELECT")==0) // Select!

{

$nspalten = oci_num_fields($wert); //

Spaltenanzahl

echo "<table border=2 cellpadding=2><tr>";

for ( $i = 1; $i <= $nspalten; $i++ ) { // Spaltennamen ausgeben:

{ echo "<th>", oci_field_name($wert,$i), "</th>";

}

while ( $erg = oci_fetch_array($wert) )

{ echo "</tr><tr>"; // Spalten ausgeben:

for ( $i = 1; $i <= $nspalten; $i++ ) { echo "<td> $erg[$i] </td>";

} }

echo "</tr></table>";

}

(36)

Andere Befehle ausgeben:

elseif (strCaseCmp($erstesWort,"INSERT")==0)

{ echo oci_num_rows($wert), " Zeilen eingefügt.<br>";

}

elseif (strCaseCmp($erstesWort,"UPDATE")==0)

{ echo oci_num_rows($wert), " Zeilen geändert.<br>";

}

elseif (strCaseCmp($erstesWort,"DELETE")==0)

{ echo oci_num_rows($wert), " Zeilen gelöscht.<br>";

}

else

{ echo "Ein DDL-Befehl wurde ausgeführt.<br>";

}

oci_commit($conn);

(37)

Sessionvariable (seit PHP 4.0 bzw. 4.3)

Erste Zeile einer HTML/PHP-Seite:

<?php

session_start();

?>

Verwendung:

$_SESSION['Kennung'] = "abc12345"; // Kennung wird gesetzt

$_SESSION['Nr'] = 17; // Nr wird gesetzt

if (isset($_SESSION['Kennung'])) {

echo "Kennung ist gesetzt und wird nun wieder entfernt";

unset($_SESSION['Kennung']); // Variable ungueltig }

(38)

Beispiel:

if (!isset($_SESSION['Kennung']) ||

!isset($_SESSION['Passwort'])) die ("Zur <a href="start.html">Startseite</a>");

// Jetzt kann auf die Datenbank zugegriffen werden:

$conn = oci_connect($_SESSION['Kennung'],

$_SESSION['Passwort'], "");

// ...

(39)

Datenbankunabhängiges Programmieren

Oracle:

$conn = oci_connect($kennung, $passwort, $connection);

ODBC:

$conn = odbc_connect($dsn, $kennung, $passwort);

MySQL:

$conn = new mysqli($server, $kennung, $passwort, $db);

(40)

Abstraktionsschicht dbx

Abstraktionsschicht in PHP mit Unterstützung von

mySQL

Microsoft SQL Server ab V4.0 ODBC

Oracle ab V4.3

(41)

Klassen in PHP

class DB {

var $db_name; // Datenbank bzw. Connectstring var $db_typ; // Datenbank-Typ (Oracle, ODBC) // Konstruktor, gibt DB-Typ und Connect-String vor:

function DB ($typ ="Oracle", $connect ="rfhs8012_ora9i") {

$this->db_typ = $typ;

$this->db_name = $connect;

} }

(42)

Login-Funktion in der Klasse

function login($kennung, $passwort) { switch ($this->db_typ)

{

case "Oracle":

$conn=oci_connect($kennung,$passwort,$this->db_name);

break;

case "ODBC":

$conn = odbc_connect

($this->db_name,$kennung,$passwort);

break;

case "mySQL":

$conn = new mysqli("localhost",$kennung,

$passwort,$this->db_name);

(43)

Verwendung der Klasse in PHP-Programm

include 'db_modul.inc'; // DB-Modul wird eingebunden

$dbx = new DB($_SESSION['DB_Typ'],$_SESSION['Connect']);

$conn = $dbx->login($_SESSION['Kennung'],

$_SESSION['Passwort']) or die("Verbindung zur RADL-DB gescheitert");

Referenzen

ÄHNLICHE DOKUMENTE

In einer Hash Tabelle, deren Kollisionen mit Verkettung aufgelöst werden, benötigt eine erfolgreiche Suche Θ(1+α) durchschnittliche Laufzeit unter der Annahme des einfachen

Schritt 2: Datenbankansicht ohne Dateiunterstützung, Datenquelle: ODBC. Steuerelemente auf

Im Klassenassistenten Membervariable für Steuerelemente festlegen. Franz Kohnle Seite 1 von

[r]

[r]

m_pSet-&gt;MoveFirst(); // zum ersten Datensatz m_pSet-&gt;MovePrevious(); // zum vorherigen Datensatz m_pSet-&gt;MoveNext(); // zum nächsten Datensatz m_pSet-&gt;MoveLast(); //

long m_ID; // MannschaftsID, Primaerschluessel CString m_Name; //

long m_ID; // SpielerID long m_Mannschaft; // Fremdschluessel CString m_Name; // Spielername long m_Tore; //