Dateneingabe über ein HTML-Formular in eine Datenbank: Über ein Eingabeformular mit fünf Eingabefelder sollen Personaldaten in eine Datenbank gespeichert werden: Schritt 1: Erstellen des Eingabeformulars (insertdata.html) <html> <head></head> <body> Geben Sie Ihre Daten ein und schicken Sie das Formular ab: <form action = "insertdata.php" method = "post"> <input name="na"> Name<p> <input name="vn"> Vorname<p> <input name="pn"> Pnr (eine ganze Zahl)<p> <input name="ge"> Gehalt (Zahl mit Punkt)<p> <input name="gt"> Geburtsdatum(JJJJ-MM-TT)<p> <input type="submit" > <input type="reset"> </form> Show <a href="showdata.php">all sets of data</a> </body> </html> Schritt 2: Erstellen der Tabelle in einer Datenbank: Datenbank anlegen (mit phpmyadmin, s. nächste Seite) Tabelle in dieser Datenbank anlegen (5 Felder) Datentypen der Felder bestimmen Name, Vorname = char oder varchar PNR = int Gehalt = double Geburtstag = date Das PHP-Auswertskript soll nun die Eingaben der HTML-Eingabefelder übernehmen und mittels SQL in diese Tabelle schreiben. Schritt 3: Datenbank erstellen mit phpmyadmin (s. nächste Seite) (db11.sql) Roscher W.-v.-Siemens-Schule Mannheim Seite 1 von 8
Administrieren einer MySQL-Datenbank mit phpmyadmin: 1. Datenbank anlegen: 2. Tabelle mit Feldern anlegen: 3. Feldnamen mit Datentypen eingeben: Roscher W.-v.-Siemens-Schule Mannheim Seite 2 von 8
Arbeiten mit phpmyadmin: 1 2 3 4 5 Anzeige von Datenbanken und Tabellen 1: Anzeigen der Datensätze einer Tabelle 2: Verändern der Felder und deren Datentypen 3: Einfügen von Datensätzen 4: Speichern der Tabellen mit den Datensätzen als SQL-Datei 5: Erstellen von Tabellen mit Datensätzen aus einer SQL-Datei Roscher W.-v.-Siemens-Schule Mannheim Seite 3 von 8
Schritt 4: Das PHP-Auswertskript (insertdata.php) Informationen für das PHP-Skript insertdata.php: Datenbankname (hier: db11) Tabellenname (hier: personen) Feldnamen (hier: Name, Vorname, PNR, Gehalt, Geburtstag) Servername, Benutzername, Passwort des Datenbankservers hier: localhost, root <html> <body> <?php $db = mysql_connect("localhost","root",""); Verbindung Datenbankserver $sqlab = "insert personen"; $sqlab.= "(Name, Vorname, PNR,"; $sqlab.= " Gehalt, Geburtsdatum) values "; $sqlab.= "('$_POST[na]', '$_POST[vn]', $_POST[pn], ; $sqlab.= $_POST[ge], '$_POST[gt]')"; SQL-Abfrage, gespeichert in der Variablen $sqlab mysql_db_query("db11", $sqlab);?> </body> </html> Abfrage der Datenbank SQL-Syntax: insert Tabellenname Auflistung der Feldnamen values Werte, die in die Felder eingefügt werden sollen; Die Tabelle der Datenbank db11: Roscher W.-v.-Siemens-Schule Mannheim Seite 4 von 8
Dateneingabe in eine Datenbank mit einer Datei (Selbstaufruf): (insertdata2.php) <html> <body> <? if($_post[gesendet]) { $db = mysql_connect("localhost","root",""); Über die SQL-Abfrage gelangt der Inhalt des Arrays in die Datenbank tabelle $sqlab = "insert personen"; $sqlab.= "(Name, Vorname, PNR,"; $sqlab.= " Gehalt, Geburtsdatum) values "; $sqlab.= "('$_POST[na]', '$_POST[vn]',"; $sqlab.= " $_POST[pn], $_POST[ge],"; $sqlab.= "'$_POST[gt]')"; mysql_db_query("db11", $sqlab); //Fehlermeldung: $num = mysql_affected_rows(); if ($num>0) echo "1 Set of Data has been addedt<p>"; else {echo "An error has ocurred, "; echo "no set of data added<p>"; } mysql_close($db); }?> Die Eingaben der HTML- Eingabefelder gelangen in das PHP-Array $_POST[ ] Geben Sie Ihre Daten ein und schicken Sie das Formular ab: <form action = "insertdata2.php" method = "post"> <input name="na"> Name<p> <input name="vn"> Vorname<p> <input name="pn"> Pnr (eine ganze Zahl)<p> <input name="ge"> Gehalt (Zahl mit Punkt)<p> <input name="gt"> Geburtsdatum (JJJJ-MM-TT)<p> <input type="submit" name="gesendet" value="gesendet"> <input type="reset"> </form> Show <a href="showdata2.php">all sets of data</a> </body> </html> Roscher W.-v.-Siemens-Schule Mannheim Seite 5 von 8
Datensätze anzeigen lassen: (showdata.php) <html> <body> <?php $db = mysql_connect("localhost","root",""); $res = mysql_db_query("db11", "select * from personen"); $num = mysql_num_rows($res); echo "$num Datensätze gefunden"; for ($i=0; $i<$num; $i++) { $nn = mysql_result($res, $i, "Name"); $vn = mysql_result($res, $i, "Vorname"); $pn = mysql_result($res, $i, "PNR"); $ge = mysql_result($res, $i, "Gehalt"); $gt = mysql_result($res, $i, "Geburtsdatum"); echo "$nn, $vn, $pn, $ge, $gt "; } mysql_close($db);?> </body> </html> SQL-Syntax: Select angezeigte Felder (* = alle Felder) From Tabellenname Die Funktion mysql_db_query() führt eine select-abfrage in der Datenbank db11 aus. Das Ergebnis wird in der Variablen $res gespeichert. Die Funktion mysql_num_rows() liefert die Anzahl der ermittelten Datensätze in die Variable $num zurück. Die for-schleife wird verwendet, um alle Datensätze des Ergebnisses auszugeben. Innerhalb der Schleife wird jeweils der Inhalt eines Feldes des Datensatzes ermittelt. Dies geschieht mit Hilfe der Funktion mysql_result(). Der Feldinhalt wird jeweils einer Variablen zugewiesen. Die Namen der Felder müssen genau denen der Tabelle entsprechen. Die Schleife wird sooft durchlaufen, wie Datensätze vorhanden sind Roscher W.-v.-Siemens-Schule Mannheim Seite 6 von 8
Datensätze mit mysql_fetch_row() auslesen: (showdata4.php) <html> <body> <?php $db = mysql_connect("localhost","root",""); $res = mysql_db_query("db11", "select * from personen"); $num = mysql_num_rows($res); echo "$num Datensätze gefunden"; while($zeile=mysql_fetch_row($res)) { for ($i=0; $i<mysql_num_fields($res); $i++) { echo $zeile[$i]; echo ""; } } mysql_close($db);?> </body> </html> Die SQL-Abfrage wird in die Variable $res gespeichert und mit mysql_db_querry() ausgeführt. Jeder ermittelte Datensatz wird nacheinander (while-schleife) mit Hilfe der Methode mysql_fetch_row() in das Array $zeile gespeichert. Die while-schleife wird so oft durchlaufen, wie es Datensätze gibt (Anzahl der Datensätze steht in der Variablen $num). Aus dem Array $zeile[] werden die Felder eines Datensatzes ausgegeben (for-schleife). Die for- Schleife wird fünfmal (5 Felder pro Datensatz) durchlaufen. Für den 2. Datensatz wird die while-schleife abermals durchlaufen. Aufgaben: 1. Erweitern Sie das Programm um ein Eingabefeld, indem die Nummer des anzuzeigenden Datensatzes eingegeben werden kann. 2. In das Eingabefeld soll nun die Nummer des anzuzeigenden Feldes eingetragen werden können. Es werden also nur ein Feld aller Datensätze ausgegeben. Roscher W.-v.-Siemens-Schule Mannheim Seite 7 von 8
mysql_connect() Verbindung zum Datenbankserver aufnehmen Parameter: (Servername, User,Passwort) Datenbankfunktionen in PHP 5: mysql_querry() Datenbankabfrage ausführen Parameter: (SQL-Abfrage, ev. zuvor in einer Variable gespeichert) mysql_select_db() Datenbank auswählen Parameter: (Datenbankname) mysql_db_query() Datenbank abfragen Parameter: (Datenbankname, SQL-Abfrage) mysql_num_rows() Anzahl der Datensätze eines Abfrageergebnisses ermitteln Parameter: (Ergebnis der SQL-Abfrage (query)) mysql_num_fields() Anzahl der Felder eines Datensatzes ermitteln Parameter: (Ergebnis der SQL-Abfrage (query)) mysql_fetch_assoc() Datensatz (einzeln) aus Abfrageergebnis holen und in ein assoziatives Array speichern Parameter: (Ergebnis der SQL-Abfrage (query)) mysql_fetch_row() Datensatz (einzeln) aus Abfrageergebnis holen und in ein numerisches Array speichern Parameter: (Ergebnis der SQL-Abfrage (query)) mysql_close() Schliessen einer Datenbankverbindung Parameter: (Variable mit der Verbindungskennung) Erweiterungen in PHP 5: objektorientiertes Programmieren wesentlich leichterer Umgang mit XML-Dateien Unterstützung der Datenbank SQLite (muss nicht auf eigenem Server laufen) zum Abfangen von möglichen Fehlern kann ein Exception-Handling verwendet werden Roscher W.-v.-Siemens-Schule Mannheim Seite 8 von 8