Die Open-Source-Skriptsprache PHP 5.2 Stand: Januar 2011 1.1. Installation von Apache Friends XAMPP Lite (Basis Package) Version 1.7.3 X A M P P x-beliebiges internetfähiges Betriebssystem Apache-Webserver MySQL PHP Perl System-Voraussetzungen: 128 MB RAM 160 MB freier Speicherplatz Windows 2000, XP, Vista, Windows 7, alle Systeme 32 bit (64 bit sollte auch funktionieren) Installationsschritte (1) Link: http://www.apachefriends.org/de/xampp-windows.html (2) XAMPP Lite XAMPP Lite 1.7.3 EXE (28 MB Selbst-extrahierendes RAR-Archiv) (3) Download von xampplite-win32-1.7.3.exe in das Hauptverzeichnis (4) Entpacken im Hauptverzeichnis C:\ oder D:\ oder anderes Festplattenlaufwerk oder einfach auf dem USB-Stick (Destination folder (Laufwerksbuchstabe) anpassen! (5) Fenstermeldungen abschließen mit shortcuts n locate y portable n Return Timezone Return Exit mit x (6) Nach dem Entpacken ist der Ordner xampplite angelegt (7) Im Ordner xampplite das Programm xampp-control.exe starten. Nach Start Apache und Start, MySQL sollte Running wie unten im Fenster angezeigt werden. Soll beim Hochfahren des PC der Apache-Webserver automatisch starten, dann muss Svc aktiviert werden. ______________________________________________________________________________________ Tress PHP Seite 1 MySQL phpMyAdmin 22.02.2011 1.2. Apache Webserver als lokalen Webserver aufrufen Jeder Webserver im Internet ist über einen eindeutigen Domain-Namen zu erreichen beispielsweise www.google.de Der lokale Webserver wird im Internetbrowser über die Adresse http://localhost oder über die IP-Adresse http://127.0.0.1 aufgerufen. Bei erfolgreicher Installation und gestartetem Webserver (Running muss im XAMPP-Control-Panel) angezeigt werden) erscheint die Startseite des installierten XAMPP. Beim erstmaligen Start muss noch die Landessprache gewählt werden. 1.3. Standardspeicherort (root directory) für PHP-Dateien und ihr Aufruf Der Standardordner für alle Webdokumente lautet bei einer Standardinstallation C:\xampplite\htdocs, bei Installation z.B. auf einem USB-Stick F:\xampplite\htdocs, wenn der Laufwerksbuchstabe vom USBStick F: ist. In diesem Ordner dürfen auch Unterordner gebildet werden z.B. ein Unterordner formulare. Befinden sich in diesem Ordner z.B. die HTML-Seite formular.html und das Formular auswertende Skript auswertung.php, so folgt der Aufruf im Browser wie folgt: http://localhost/formulare/formular.html Hinweis: Das Skript auswertung.php wird aus der HTML-Seite aufgerufen. Soll z.B. nur das Programm quadrat.php ausgeführt werden so erfolgt der Aufruf wie folgt: http://localhost/formulare/quadrat.php 1.4. Standardspeicherort (root directory) für MySQL-Datenbanken Der Standardordner für MySQL-Datenbanken beim Aufruf von phpMyAdmin lautet bei einer Standardinstallation: C:\xampplite\mysql\data, in der Schule nur C:\xampplite\mysql Beim Aufruf von phpMyAdmin muss der Apache-Webserver gestartet sein. 1.5. Start Apache-Webserver und MySQL-Server im Schülernetz (ab 23.02.10) Start Apache-Webserver: Programme Programmierung apache_start Im Laufwerk H: wird das Verzeichnis XAMPPLITE mit Unterordner htdocs erstellt, in dem die PHPProgramme gespeichert werden. MySQL-Server: Programme Programmierung mysql_start Im Laufwerk H: wird das Verzeichnis XAMPPLITE mit Unterordner mysql erstellt, in dem die MySQLDatenbanken gespeichert werden. Installationsfenster bitte nicht schließen, sonst wird der MySQL-Server beendet. XAMPP Control Panel: Programme Programmierung XAMPP control Apache-Webserver und MySQL-Server wird gestartet angezeigt. ______________________________________________________________________________________ Tress PHP Seite 2 MySQL phpMyAdmin 22.02.2011 2. Formulare mit PHP auswerten 2.1. Einfaches Formular formular1a.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>einfaches Formular</title> </head> <body> <h3>Anmeldung</h3> <p>Bitte füllen Sie die nachfolgenden Eingabefelder aus: </p> <form action="formular_auswertung-1a.php" method="POST"> <table> <tr><td>Vorname:</td><td><input type="text" name="vorname"></td></tr> <tr><td>Nachname:</td><td><input type="text" name="nachname"></td></tr> <tr><td>Wohnort:</td><td><input type="text" name="ort"></td></tr> <tr><td><input type="submit" value="Abschicken"></td> <td><input type="reset" value="Zur&uuml;cksetzen"></td></tr> </table> </form> </body> </html> formular_auswertung-1a.php Ausgabe entspricht nicht XHTML 1.1 Standard <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Formularauswertung</title> </head> <body> <?php echo "<p>Folgende Daten wurden &uuml;bermittelt:</p>"; echo "Vorname: " .$_POST["vorname"] ."<br />"; echo "Nachname: " .$_POST["nachname"] ."<br />"; echo "Wohnort: " .$_POST["ort"]; ?> </body> </html> formular1a.html Vom PHP-Skript erzeugte HTML-Seite ______________________________________________________________________________________ Tress PHP Seite 3 MySQL phpMyAdmin 22.02.2011 formular_auswertung-1b.php Ausgabe entspricht dem XHTML 1.1 Standard ... <body> <?php $vorname=$_POST["vorname"]; $nachname=$_POST["nachname"]; $ort=$_POST["ort"]; echo "<p>Folgende Daten wurden &uuml;bermittelt:</p>"; echo "<p>Vorname:$vorname</p>"; echo "<p>Nachname:$nachname</p>"; echo "<p>Wohnort:$ort</p>"; ?> </body> </html> formular1b.html Vom PHP-Skript erzeugte HTML-Seite _______________________________________________________________________ formular_auswertung-1c.php Ausgabe entspricht dem XHTML 1.1 Standard ... <body> <?php $vorname=$_POST["vorname"]; $nachname=$_POST["nachname"]; $ort=$_POST["ort"]; echo "<p>Folgende Daten wurden &uuml;bermittelt:<br /> Vorname:$vorname <br /> Nachname:$nachname <br /> Wohnort:$ort</p>"; ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 4 MySQL phpMyAdmin 22.02.2011 formular1c.html Vom PHP-Skript erzeugte HTML-Seite _______________________________________________________________________ formular_auswertung-1d.php Ausgabe entspricht nicht dem XHTML 1.1 Standard Programm dient zum Testen der Übergabedaten! ... <body> <?php echo "<p>Folgende Daten wurden &uuml;bermittelt:</p>"; echo "Vorname: " .$_POST["vorname"] ."<br />"; echo "Nachname: " .$_POST["nachname"] ."<br />"; echo "Wohnort: " .$_POST["ort"]; echo "<hr>Informationen über Variablen mit <b>print_r()</b>:<br> <pre>"; print_r($_POST); echo "</pre> <hr>Informationen über Variablen mit <b>var_dump()</b>:<br><pre>"; var_dump($_POST); echo "</pre>"; ?> </body> </html> formular1c.html Vom PHP-Skript erzeugte HTML-Seite ______________________________________________________________________________________ Tress PHP Seite 5 MySQL phpMyAdmin 22.02.2011 2.2. Formular mit mehreren Absende-Schaltflächen Mit PHP kann festgestellt werden, welche Submit-Schaltfläche in einem Formular gedrückt wurde. Datei: form_multiv1.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Formular mit mehreren Submit-Schaltfl&auml;chen</title> </head> <body> <h3>Berechnungen mit zwei Zahlen</h3> <p>Bitte geben Sie zwei Zahlen ein: </p> <form action="form_multi-auswertungv1.php" method="POST"> <table> <tr><td>Erste Zahl:</td><td><input type="text" name="zahl1"></td></tr> <tr><td>Zweite Zahl:</td><td><input type="text" name="zahl2"></td></tr> <tr><td><input type="submit" name="mal" value="Zahlen multiplizieren"></td> <td><input type="submit" name="plus" value="Zahlen addieren"></td></tr> </table> </form> </body> </html> form_multi-auswertungv1.php Ausgabe entspricht dem XHTML 1.1 Standard <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Rechenergebnis</title> </head> <body> <?php echo "<h3>Rechenergebnis</h3>"; $zahl1=$_POST["zahl1"]; $zahl2=$_POST["zahl2"]; if (isset($_POST["mal"])) { $ergebnis = $zahl1 * $zahl2; echo "<p>$zahl1 mal $zahl2 ist gleich $ergebnis.</p>"; } if (isset($_POST["plus"])) { $ergebnis = $zahl1 + $zahl2; echo "<p>$zahl1 plus $zahl2 ist gleich $ergebnis.</p>"; } ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 6 MySQL phpMyAdmin 22.02.2011 form_multi-auswertungv2.php Ausgabe entspricht nicht dem XHTML 1.1 Standard <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Rechenergebnis</title> </head> <body> <?php echo "<h3>Rechenergebnis</h3>"; if (isset($_POST["mal"])) { $ergebnis = $_POST["zahl1"] * $_POST["zahl2"]; echo $_POST["zahl1"] ." mal " .$_POST["zahl2"] . " ist gleich $ergebnis."; } if (isset($_POST["plus"])) { $ergebnis = $_POST["zahl1"] + $_POST["zahl2"]; echo $_POST["zahl1"] ." plus " .$_POST["zahl2"] . " ist gleich $ergebnis."; } ?> </body> </html> Ausgabe im Browser Vom PHP-Skript erzeugte HTML-Seiten ______________________________________________________________________________________ Tress PHP Seite 7 MySQL phpMyAdmin 22.02.2011 2.3. Formulare mit Checkboxen und Radiobuttons Die Variablen bei den Checkboxen, Radiobuttons und Schaltflächen werden bei der Auswertung mit PHP nur dann übermittelt, wenn sie ausgewählt bzw. angeklickt werden. formular-2a.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>einfaches Formular</title> </head> <body> <h3>Formular mit Checkboxen, Radiobuttons</h3> <form action="formular_auswertung-2a.php" method="POST"> <p>Interessen: <input type="checkbox" name="interesse[]" value="Kultur">Kultur <input type="checkbox" name="interesse[]" value="Musik">Musik <input type="checkbox" name="interesse[]" value="Natur">Natur <input type="checkbox" name="interesse[]" value="Sport">Sport </p> <p>Zahlungsart: <input type="radio" name="zahlung" value="bar">bar <input type="radio" name="zahlung" value="Scheck">Scheck <input type="radio" name="zahlung" value="&Uuml;berweisung">&Uuml;berweisung </p> <p><input type="submit" name="absenden" value="Abschicken"> <input type="reset" value="Zur&uuml;cksetzen"> </p> </form> </body> </html> Programmdatei: formular_auswertung-2a.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Formularauswertung</title> </head> <body> <?php $interesse=$_POST["interesse"]; if (!empty($_POST["interesse"])) { echo "1. Ausgabeform der ausgewählten Interessen:"; echo "<p>$interesse[0],$interesse[1],$interesse[2],$interesse[3]</p>"; echo "2. Ausgabeform der ausgewählten Interessen:<br>"; echo implode(", ", $_POST["interesse"])."<br />"; echo "3. Ausgabeform der ausgewählten Interessen:<br>"; echo implode("<br />", $_POST["interesse"])."<br />"; } echo "Gewünschte Zahlungsart gewählt mit Radiobutton: ".$_POST["zahlung"]; ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 8 MySQL phpMyAdmin 22.02.2011 Ausgabe im Webbrowser Vom PHP-Skript erzeugte HTML-Seite Bemerkungen: Die 1. Ausgabeform bringt Nachteile (zu viele Kommas), wenn nicht alle Checkboxen gewählt werden. Im obigen Beispiel wurden nur 2 Checkboxen aktiviert, also sind in der Bereichsvariablen $Interessen[] nur die ersten beiden Felder wie folgt belegt: Im Feld $Interessen[0] ist Kultur, im Feld $Interessen[1] ist Sport gespeichert aber nicht Musik. In der 2. und 3. Ausgabeform wird die Feldfunktion implode(Trennzeichen,Feld) verwendet. formular-2b.html und das PHP-Programm formular_auswertung-2b.php … <body> <?php echo "<pre>"; print_r($_POST); echo "</pre>"; if (!empty($_POST["interesse"])) { echo "Folgende Interessen wurden angegeben:<br>"; echo implode(", ", $_POST["interesse"]) ."<br>"; } ?> </body> </html> Formular formular-2b.html Vom PHP-Skript erzeugte HTML-Seite ______________________________________________________________________________________ Tress PHP Seite 9 MySQL phpMyAdmin 22.02.2011 2.4. Formular und Programm in einer PHP-Datei Bisher wurden das XHTML-Formular und das PHP-Programm in getrennten Dateien gespeichert. In vielen Fällen erweist es sich als günstiger, sowohl das Formular als auch das Formular ausgebende PHPProgramm innerhalb der gleichen PHP-Datei unterzubringen. Ein Programm kann sich auf diese Weise selbst Daten zusenden. Dieses Verfahren kann auch verwendet werden als Eingabemaske einer Datenbank. Programmstart Version 1: http://localhost/08formulare/selbstverweis_a.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Formular mit Selbstverweis</title> </head> <body bgcolor="<?php echo $_POST["hintergrund"]; ?>"> <h3>Hintergrundfarbe w&auml;hlen</h3> W&auml;hlen Sie eine Hintergrundfarbe f&uuml;r die Datei aus: <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST"> 1 <p><input type="radio" name="hintergrund" value="#FFFF00">gelb <input type="radio" name="hintergrund" value="#8FEC95">hellgr&uuml;n <input type="radio" name="hintergrund" value="#58EBE4">hellblau <input type="radio" name="hintergrund" value="#FFFFFF">wei&szlig; </p> <p><input type="submit" name="absenden" value="Absenden"></p> </form> <?php 2 if(isset($_POST["absenden"]) && isset($_POST["hintergrund"])) { echo "<i>Ihre Auswahl wird als Hintergrundfarbe angezeigt.</i>"; } ?> </body> </html> Programmstart Version 2: Einfachere Version http://localhost/08formulare/selbstverweis_b.php 1 Die Zeile wird mit folgender Zeile ersetzt: <form action="selbstverweis_b.php" method="POST"> 2 Es wird geprüft, ob die Variablen absenden und hintergrund aus dem Formular übermittelt wurden. Die echo-Anweisung zur Farbauswahl wird nur ausgeführt, wenn das Formular abgesendet und eine Farbe ausgewählt wurde. ______________________________________________________________________________________ Tress PHP Seite 10 MySQL phpMyAdmin 22.02.2011 3. Datum und Zeit in PHP und in MySQL-Datenbanken 3.1. Datum und Zeit ermitteln mit der Funktion getdate() PHP verwendet das Datum und die Uhrzeit des Webservers, auf dem das PHP-Programm läuft. Die Funktion getdate() ruft vom Server die Informationen zum Datum und Zeit ab und liefert das Ergebnis in einem assoziativen Feld (Array) zurück. Folgende Datums- und Zeiteinheiten sind in diesem Array abrufbar: Datums/Zeiteinheit seconds minutes hours mday wday mon year yday weekday month 0 Erklärung Sekunden der aktuellen Uhrzeit Minuten der aktuellen Uhrzeit Stunde der aktuellen Uhrzeit Monatstag Numerischer Tag der Woche Monat als Zahl Jahreszahl Numerischer Tag des Jahres Wochentag in Englisch Monat in Englisch Sekunden seit 01.01.1970 Rückgabewerte 0 bis 59 0 bis 59 0 bis 23 1 bis 31 0=Sonntag, 1=Montag, ... , 6=Samstag 1=Januar, 2=Februar, ..., 12=Dezember 1970 bis 2038 0 bis 365 Sunday, Monday, ... , Saturday January, February, ... , December http://localhost/09datum_zeit/aktuell_1.php 1. Testlauf am Montag, 01.03.2010, 21:05:11 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Aktuelles Datum mit Zeit ausgeben</title> </head> <body> <?php $jetzt = getdate(); print_r($jetzt); ?> </body> </html> http://localhost/09datum_zeit/aktuell_2.php 2. Testlauf am Montag, 01.03.2010, 21:46:38 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Aktuelles Datum und Zeit ausgeben</title> </head> <body> <?php $jetzt = getdate(); print_r($jetzt); echo "<p>Stunde: " .$jetzt["hours"]; echo "<br />Minute: " .$jetzt["minutes"]; echo "<br />Sekunde: " .$jetzt["seconds"]; echo "<br />Tag der Woche: " .$jetzt["wday"] ." = " .$jetzt["weekday"]; echo "<br />Tag des Monats: " .$jetzt["mday"]; echo "<br />Tag des Jahres: " .$jetzt["yday"]; echo "<br />Monat: " .$jetzt["mon"] ." = " .$jetzt["month"]; echo "<br />Jahr: " .$jetzt["year"]; echo "<br />Zeitstempel: " .$jetzt["0"] ."</p>"; ?> </body> </html> Ausgabe im Webbrowser Array ( [seconds] => 11 [minutes] => 5 [hours] => 21 [mday] => 1 [wday] => 1 [mon] => 3 [year] => 2010 [yday] => 59 [weekday] => Monday [month] => March [0] => 1267473911 ) Ausgabe im Webbrowser Array ( [seconds] => 38 [minutes] => 46 [hours] => 21 [mday] => 1 [wday] => 1 [mon] => 3 [year] => 2010 [yday] => 59 [weekday] => Monday [month] => March [0] => 1267476398 ) Stunde: 21 Minute: 46 Sekunde: 38 Tag der Woche: 1 = Monday Tag des Monats: 1 Tag des Jahres: 59 Monat: 3 = March Jahr: 2010 Zeitstempel: 1267476398 Hinweis: Die Ausgabe des Arrays wird normalerweise im Browser in einer Zeile ausgegeben. ______________________________________________________________________________________ Tress PHP Seite 11 MySQL phpMyAdmin 22.02.2011 Der Zeitstempel (UNIX-Timestamp) gibt die Sekunden an, die seit dem 01.01.1970 vergangen sind. Am 01.01.1970 begann die UNIX-Epoche. Im obigen Beispiel wird das aktuelle Datum und die Zeit in der Variablen $jetzt als assoziatives Feld (Array) gespeichert: $jetzt = getdate(); Beispielsweise können gemäß 2. Testlauf die Datums- Zeitfunktionen wie folgt abgerufen und gespeichert werden: $Tag $Monat $Jahr $Stunden $Minute $Sekunde = = = = = = $jetzt["mday"]; $jetzt["mon"]; $jetzt["year"]; $jetzt["hours"]; $jetzt["minutes"]; $jetzt["seconds"]; 1 3 2010 21 46 38 Bei einem assoziativen Feld (Array) dürfen als Feldnamen keine Zahlen außer die Ziffer 0 verwendet werden. Z.B. funktioniert die Ausgabe von $jetzt[1] nicht. Englische Monatsbezeichnung an deutsche anpassen http://localhost/09datum_zeit/monat_dt.php Testlauf am Dienstag, 02.03.2010 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Monatsangabe auf deutsch</title> </head> <body> <h3>Monatsangabe in deutscher Sprache</h3> <?php $monat = array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); $datum = getdate(); echo "Heute ist der " .$datum["mday"] .". " .$monat[$datum["mon"]-1] ." " .$datum["year"] ."."; ?> 3 - 1=2 </body> </html> Das Array für deutsche Monate reicht von Speicherstelle 0 bis 11. $monat[0] Januar $monat[2] März $monat[11] Dezember 3.2. Datum und Zeit formatiert ausgeben mit der Funktion date() Hinweis: date() funktioniert nur für Zeiten zwischen 01.01.1970 bis 18.01.2038 Auswahl an Formatanweisungen (vollständig siehe: http://de2.php.net/manual/de/function.date.php) Angabe d (kleines d) D F g (kleines g) G h (kleines h) H i (kleines i) j (kleines j) l (kleines 'L') m (kleines m) M n (kleines n) s (kleines s) t (kleines t) y (kleines y) Y (großes Y) Erläuterung Tag des Monats, 2-stellig mit führender Null Tag der Woche gekürzt auf drei Buchstaben Monat als ganzes Wort, wie January oder March 12-Stunden-Format, ohne führende Nullen 24-Stunden-Format, ohne führende Nullen 12-Stunden-Format, mit führenden Nullen 24-Stunden-Format, mit führenden Nullen Minuten mit führenden Nullen Tag des Monats ohne führende Nullen Ausgeschriebener Tag der Woche Monat als Zahl, mit führenden Nullen Monatsname mit drei Buchstaben Monatszahl, ohne führende Nullen Sekunden, mit führenden Nullen Anzahl der Tage des angegebenen Monats Jahreszahl, zweistellig Jahreszahl, vierstellig Resultat 01 bis 31 Mon bis Sun January bis December 1 bis 12 0 bis 23 01 bis 12 00 bis 23 00 bis 59 1 bis 31 Sunday bis Saturday 01 bis 12 Jan bis Dec 1 bis 12 00 bis 59 28 bis 31 Bsp.: 99 oder 03 Bsp.: 1999 oder 2003 ______________________________________________________________________________________ Tress PHP Seite 12 MySQL phpMyAdmin 22.02.2011 http://localhost/09datum_zeit/date.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Datum formatiert ausgeben</title> </head> <body> <h3>Einige Formatanweisungen der Funktion <i>date()</i></h3> <?php echo date("d.m.y"); echo "<br>" . date("d.m.Y", time() + 86400); echo "<br>Tag: " . date("d.m.Y") .", Uhrzeit: " .date("H:i:s"); echo "<br>" . date("j.n.y"); ?> </body> </html> 86400 Sekunden entsprechen einen Tag , deshalb wird das Datum einen Tag später ausgegeben. Ausgabe im Webbrowser 3.3. Datum und Zeit in der Datenbank MySQL In der Datenbank MySQL wird bei der Wahl des Felddatentyps Date das Datum im amerikanischen Format JJJJ-MM-TT ausgegeben. Mit den folgenden Varianten kann z.B. das Bestelldatum automatisch mit PHP in die Datenbank geschrieben werden: Variante 1: $jetzt = getdate(); $BestellDatum = $jetzt["year"]."-".$jetzt["mon"]."-".$jetzt["mday"]; Variante 2: $BestellDatum = date("Y.m.d"); (Hinweis: y ist hier groß) ______________________________________________________________________________________ Tress PHP Seite 13 MySQL phpMyAdmin 22.02.2011 4. MySQL als Open Source Datenbank mit phpMyAdmin verwalten 4.1. Einleitung Zur Verwaltung von MySQL-Datenbanken wird häufig die Bedienoberfläche phpMyAdmin verwendet. Im XAMPP Control Panel müssen sowohl der Apache Webserver als auch der MySQL-Datenbankserver gestartet sein, damit PHP mit MySQL arbeiten kann. Als Datenbanksprache wird SQL (Structured Query Language) eingesetzt, mit deren Anweisungen Datenbanken, Tabellen und die darin enthaltenen Datensätze verwaltet werden. MySQL speichert Daten in Tabellen. Eine Tabelle ist über Attribute (Datenfeldnamen) organisiert. Ein Datensatz wird eindeutig durch einen Primärschlüssel gekennzeichnet. Mehrere Tabellen werden über Fremdschlüssel untereinander verknüpft. Datenbankbeispiel Firma mit 2 Tabellen und 3 Datensätzen Datenbank Firma Tabelle Personal Personalnr (PK) 1 2 3 Name Ott Erz Böhm Vorname Rudi Bernd Silke Tabelle Ort Ortnr (PK) 1 2 3 Ort Bietigheim-B. Sachsenheim Bönnigheim Strasse Seeweg 1 Turmstr. 5 Hauptstr. 8 Gehalt 5010.34 3444.00 2567.56 Gebtag 1955-10-30 1970-08-24 1988-11-01 Ortnr (FK) 1 1 2 PLZ 74321 74343 74357 PK=Primärschlüssel Jede Datenbanktabelle benötigt ein Attribut, das der eindeutigen Identifikation eines Datensatzes in einer Tabelle dient. Dieses Attribut wird als Primärschlüssel bezeichnet. Der Inhalt des Primärschlüssels darf sich in den anderen Zeilen nicht wiederholen (eindeutiger Schlüssel), z.B. eine bestimmte Personalnr darf nicht zweimal vorkommen. FK=Fremdschlüssel FK ist ein Attribut mit PK in einer anderen Tabelle. Datenbankstruktur Firma Tabelle Personal Tabelle Ort Personalnr INT(5) PK Name Vorname Strasse Gehalt Gebtag Ortnr VARCHAR(20) VARCHAR(15) VARCHAR(30) Double Date INT(10) FK Ortnr INT(10) PK Ort VARCHAR(20) PLZ VARCHAR(10) ______________________________________________________________________________________ Tress PHP Seite 14 MySQL phpMyAdmin 22.02.2011 4.2. Starten der Benutzeroberfläche phpMyAdmin Voraussetzung: Apache- und MySQL-Server sind gestartet 1. Möglichkeit: Browser starten Eingabe localhost Klick auf phpMyAdmin 2. Möglichkeit: http://localhost/phpmyadmin/index.php 3. Möglichkeit: Klick auf Admin bei MySQL 4.3. Anlegen der Datenbank firma in der Oberfläche phpMyAdmin Neue Datenbank anlegen: Datenbank: firma Kollation: latin1_german2_ci Auswahl der Kollation wegen der Sortierreihenfolge: latin1_swedish_ci latin1_german1_ci latin1_german2_ci Muffler MX Systems Müller MySQL Sortierung falsch Muffler Müller MX Systems MySQL Sortierung falsch Müller Muffler MX Systems MySQL Sortierung richtig Hinweis: Bei den Namen von Datenbanken, Tabellen und Feldern sollen keine Umlaute, kein ß, kein Leerzeichen sowie keine Sonderzeichen verwendet werden. 4.4. Anlegen der Tabellen mit der Eingabe der Tabellenstruktur 4.4.1 Anlegen der Tabelle personen ______________________________________________________________________________________ Tress PHP Seite 15 MySQL phpMyAdmin 22.02.2011 Tabellenstruktur personen Wegen der Tabellenbeziehung bzw. dem Fremdschlüssel ist als Tabellenformat InnoDB zu wählen! Hinweis zur Spalte Null: Null aktiviert mit Häkchen bedeutet, dass bei der Dateneingabe z.B. kein Gehalt bzw. kein Geburtsdatum eingegeben werden muss. Die Felder Gehalt und Gebtag dürfen leer bleiben bei der Dateneingabe. Hinweis zur Spalte A_I (auto_increment): Bei Aktivierung wird die Personalnummer bei der Dateneingabe eines neuen Mitarbeiters automatisch um 1 erhöht. Hinweis zur Spalte Index: Jede Tabelle hat nur ein Datenfeld als Primärschlüssel(Primary), hier die PersonalNr. Dieses Feld enthält nur eindeutige Werte (keine Doppeleintragungen) und darf keine Nullwerte haben. Will man in den anderen Datenfelder auch eindeutige Werte erreichen, dann ist als Index Unique zu wählen. In einer Tabelle können für mehrere Datenfelder der Index Unique definiert werden. Beim Fremdschlüssel OrtsNr ist Index zu wählen. Datentypen (Spalte Typ): INT ganze Zahlen Double alle Zahlen, Dezimalzahlen sind mit Punkt einzugeben. VARCHAR() fast alle Leerzeichen benötigen keinen Speicherplatz CHAR() jedes Leerzeichen benötigt Speicherplatz Date amerikanisches Eingabeformat JJJJ-MM-TT (Bsp. 2010-02-28) Speichern wählen (nicht OK, sonst wird eine leere Spalte hinzugefügt) 4.4.2 Anlegen der Tabelle ort Klick auf Datenbankname Firma Tabellenstruktur ort ______________________________________________________________________________________ Tress PHP Seite 16 MySQL phpMyAdmin 22.02.2011 Hinweis zur Spalte Ortsnr: OrtsNr ist hier der Primärschlüssel, Auto_Increment bedeutet, dass die Datenbank automatisch die OrtsNr um 1 erhöht bei jedem neuen Datensatz. Bei der Dateneingabe braucht man dann keine Ortsnummer eingeben. Speichern wählen 4.4.3 (nicht OK, sonst wird eine leere Spalte hinzugefügt) Indizes Indizes der Tabelle personen: Klick auf tabelle personen Details Fremdschlüssel Index der Tabelle ort: Klick auf tabelle ort Details 4.4.4 Beziehungsübersicht Beziehungsübersicht: Klick auf Tabelle personen Beziehungsübersicht beim Fremdschlüssel OrtsNr ist als Bezugstabelle "firma.ort.OrtsNr" zu wählen speichern 4.5. Eingeben (Einfügen) der Daten Tabelle ort Klick links auf Tabelle ort Menü oben Einfügen OrtsNr nicht eingeben, wird automatisch ausgefüllt ______________________________________________________________________________________ Tress PHP Seite 17 MySQL phpMyAdmin 22.02.2011 Tabelle personen Klick links auf Tabelle Personen Menü oben Einfügen PersonalNr nicht eingeben, wird automatisch ausgefüllt Tabelle personen 4.6. Sicherung der Datenbank in einem SQL-Script Exportieren Klick Server localhost! Klick Exportieren im Menü firma wählen im Bereich Exportieren Zeichencodierung: iso-8859-1 Klick OK unten rechts Speichern unter dem Dateinamen firma.sql Vorteil: Datenbank kann an einem anderen Arbeitsplatz importiert werden. Vorteil von iso-8859-1: Umlaute werden in die SQL-Datei übernommen. 4.7. Erzeugen der Datenbank mit einem SQL-Script Importieren Klick Importieren im Menü oben Durchsuchen SQL-Script-Datei wählen und öffnen OK 4.8. Sicherung einzelner Datenbanktabellen in einem SQL-Script Exportieren Klick auf den Datenbankname Firma Klick auf Exportieren im Menü oben Tabelle(n) auswählen im Bereich Exportieren Klick OK unten rechts Speichern unter dem Dateinamen Firma.sql 4.9. Erzeugen einer Datenbanktabelle mit einem SQL-Script Importieren Klick auf den Datenbankname Firma Klick Importieren im Menü oben Durchsuchen SQL-ScriptDatei wählen und öffnen OK ______________________________________________________________________________________ Tress PHP Seite 18 MySQL phpMyAdmin 22.02.2011 5. PHP und MySQL 5.1. Das Grundprinzip der dynamischen Webseiten Client und Server 1. Anfrage z.B. www.google.de 2. XHTML-Datei mit Formular z.B. zur Eingabe des Suchtextes 6. Webserver sendet XHTML-Datei an Webbrowser Client PHP 4. Abfrage und Auswertung der Daten D atenbankserver 3. Daten/Formular W ebserver Webbrowser Datenbank 5. PHP erstellt eine neue XHTML-Seite Webserver z.B. ApacheServer Datenbankserver z.B. MySQLDatenbankserver XAMPP Webserver und Datenbankserver laufen auf dem lokalen Rechner jeweils unter dem Hostnamen localhost Die Begriffe "Client" und "Server" bezeichnen nicht nur die entsprechenden Computer (Hardware), sondern auch die erforderlichen Computerprogramme (Software). 5.2. Das Client-Server-Umgebung Beispiele für Client–Server–Architekturen: Client Browser, z. B. Internetexplorer E-Mailprogramm, z. B. Outlook FTP-Client, z.B. Wise Ftp Datenbank-Frontend - MySQL Query Browser - Eclipse/SQLExplorer - phpMyAdmin : Programm Server Webserver Mailserver Ftp- Server Datenbankserver, z. B. MySQL Als Frontend ist eine Eingabemaske zu verstehen, mit der ein User Daten eingeben und an das für ihn nicht sichtbare "Backend" - in diesem Fall eine Datenbank auf einem Server - zur Weiterverarbeitung weiterleitet. ______________________________________________________________________________________ Tress PHP Seite 19 MySQL phpMyAdmin 22.02.2011 (1) In einer Client–Server–Umgebung nehmen die Clients mit Hilfe geeigneter Software (Client–Software) Serverdienste in Anspruch. (2) Die Serverdienste können im lokalen Netz (LAN) oder im Internet zur Verfügung stehen. (3) Die Kommunikation mit dem Datenbankserver MySQL erfolgt mit Hilfe der Datenbanksprache SQL . Die SQL-Befehle werden mit Hilfe einer geeigneten Clientsoftware wie beispielsweise MySQL Query Browser oder PHP oder phpMyAdmin zum Datenbankserver gesandt und dort bearbeitet. (4) Der Datenbankserver liefert dann dem Client das Ergebnis. (5) Bevor die Clientsoftware zum Arbeiten mit dem Datenbankserver MySQL genutzt werden kann, muss der MySQL-Datenbankserver gestartet sein. ______________________________________________________________________________________ Tress PHP Seite 20 MySQL phpMyAdmin 22.02.2011 5.3. Grundgerüst PHP - Programm zur Ausgabe von Daten in einer Tabelle <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten aus MySQL-Datenbank auswerten</title> </head> <body> 1. PHP-Programm <?php $server = "localhost"; $user = "root"; $pass = ""; Zugangsdaten für Datenbankserver MySQL festlegen $verbindung = mysql_connect($server, $user, $pass); Datenverbindung herstellen PHP MySQL mysql_select_db("datenbankname"); Datenbank auf dem MySQL-Server wählen $sql = "SQL-Abfrage …"; Formulierung der Abfrage wird unter $sql gespeichert. Abfrage wird noch nicht ausgeführt! $ergebnis = mysql_query($sql); Datenbankabfrage wird ausgeführt und als Ergebnistabelle unter $ergebnis gespeichert ?> <table> <tr> <th>Spaltennamen 1</th> <th>Spaltenname 2</th> <th>Spaltenname 3</th> … </tr> <?php while ($zeile = mysql_fetch_array($ergebnis)) { echo "<tr><td> $zeile[Feldname 1] </td>"; echo "<td> $zeile[Feldname 2] </td>"; … echo "</tr>"; } echo "</table>"; mysql_close($verbindung); Ausgabe der Spaltenüberschriften der Tabelle Bei jedem Durchlauf wird aus der Ergebnistabelle eine Zeile (Datensatz) ermittelt und in einer Tabelle zeilenweise ausgegeben Verbindung zum verbundenem MySQLServer beenden ?> </body> </html> 2. PHP-Programm ______________________________________________________________________________________ Tress PHP Seite 21 MySQL phpMyAdmin 22.02.2011 5.4. Ausgabe der MySQL-Tabelle Bestellung in einer XHTML-Tabelle mit PHP Vorbereitung: Kopieren Sie den Ordner obstdaten_lesen nach H:\XAMPPLITE/htdocs Start Webserver Apache über XAMPP Control Panel Start Datenbankserver MySQL über XAMPP Control Panel Importieren im Menü oben Durchsuchen H:\XAMPPLITE/htdocs/10obstdaten_lesen/obstladen.sql obstladen.sql öffnen rechts unten OK http://localhost/obstdaten_lesen/obstdaten_lesen.html obstdaten_lesen.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten aus MySQL-Datenbank lesen</title> </head> <body> <h3>Datenbank Obstladen mit der Tabelle Bestellung</h3> <form action="obstdaten_lesen.php" method="post"> <p><input type="submit" value="Bestelldaten vollst &auml;ndig abrufen"></p> </form> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 22 MySQL phpMyAdmin 22.02.2011 obstdaten_lesen.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten lesen</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <?php //Zugangsdaten für Datenbankserver festlegen $server = "localhost"; $user = "root"; $pass = ""; //Datenbankverbindung zu MySQL herstellen $verbindung = mysql_connect($server, $user, $pass); //Datenbank "obstladen" wählen mysql_select_db("obstladen"); // SQL-Abfrage (gesamte Daten der Tabelle Bestellung) $sql = "SELECT * FROM bestellung"; // Ergebnistabelle mit der Ausführung der Abfrage $sql bilden $ergebnis = mysql_query($sql); //Anzahl der Zeilen (Datensätze) ermitteln und Ausgabe $anzahl=mysql_num_rows($ergebnis); echo "<p>In der Tabelle befinden sich $anzahl Bestellungen.</p>"; //Ausgabe der Spaltenüberschriften der Tabelle ?> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <?php //Zeilenweise Erzeugung der XHTML-Tabelle mit PHP while ($zeile = mysql_fetch_array($ergebnis)) { echo "<tr><td> $zeile[ID] </td>"; echo "<td> $zeile[Vorname] </td>"; echo "<td> $zeile[Nachname] </td>"; echo "<td> $zeile[Ort] </td>"; echo "<td> $zeile[Sorte] </td>"; echo "<td> $zeile[Menge] </td>"; echo "<td> $zeile[BestellDatum] </td>"; echo "</tr>"; } echo "</table>"; //MySQL-Verbindung beenden mysql_close($verbindung); ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 23 MySQL phpMyAdmin 22.02.2011 Von PHP erzeugte XHTML-Seite mit Quelltext <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten lesen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <p>In der Tabelle befinden sich 8 Bestellungen.</p> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <tr> <td> 1 </td><td> Arndt </td><td> Hoffmann </td><td> Stuttgart </td> <td>Elstar </td><td> 15 </td><td> 2010-01-20 </td> <tr> <td> 2 </td><td> Corinna </td><td> Delphi </td><td> Hamburg </td> <td> Jonagold </td><td> 3 </td><td> 2010-01-25 </td> <tr> <td> 3 </td><td> Petra </td><td> Meyer </td><td> Wien </td> <td> Gala </td><td> 5 </td><td> 2010-01-29 </td> <tr> <td> 4 </td><td> Peter </td><td> Schmidt </td><td> Berlin </td> <td> Elstar </td><td> 25 </td><td> 2010-02-01 </td> <tr> <td> 5 </td><td> Oskar </td><td> Weber </td><td> Stuttgart </td> <td> Gala </td><td> 18 </td><td> 2010-02-12 </td> <tr> <td> 6 </td><td> Susanne </td><td> Ahorn </td><td> Bern </td> <td> Jonagold </td><td> 6 </td><td> 2010-02-15 </td> <tr> <td> 7 </td><td> Sila </td><td> Zimmermann </td><td> Köln </td> <td> Elstar </td><td> 10 </td><td> 2010-02-23 </td> <tr> <td> 8 </td><td> Lea </td><td> Bäuerle </td><td> Bissingen </td> <td> Gala </td><td> 20 </td><td> 2010-02-26 </td> </table> </body> </tr> </tr> </tr> </tr> </tr> </tr> </tr> </tr> ______________________________________________________________________________________ Tress PHP Seite 24 MySQL phpMyAdmin 22.02.2011 5.5. Auswahl von Daten über ein Suchformular Vorbereitung: Kopieren Sie den Ordner obstdaten_suchen nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel 1. Lösungsweg:Aufruf des Verzeichnis obstdaten_suchen im Webbrowser http://localhost/11obstdaten_suchen/ Klick auf 2. Lösungsweg: http://localhost/11obstdaten_suchen/obstsorte_suchen.html obstdaten_suchen.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten suchen in der MySQL-Datenbank</title></head> <body> <h3>Bestellungen mit einer bestimmten Obstsorte in der Obstdatenbank suchen</h3> <form action="obstsorte_suchen.php" method="post"> <p><input type="radio" name="sorte" value="Jonagold" />Jonagold<br /> <input type="radio" name="sorte" value="Gala" />Gala<br /> <input type="radio" name="sorte" value="Elstar" />Elstar</p> <p><input type="submit" value="Daten abrufen" /></p> </form> </body> </html> Ausgabe XHTML-Seite im Webbrowser ______________________________________________________________________________________ Tress PHP Seite 25 MySQL phpMyAdmin 22.02.2011 obstsorte_suchen.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten suchen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <?php $server = "localhost"; $user = "root"; $pass = ""; $sorte = $_POST["sorte"]; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen") or die ("Fehler beim Zugriff auf die Datenbank"); $sql = "SELECT * FROM bestellung WHERE SORTE='$sorte'"; $abfrage = mysql_query($sql); if(!$abfrage) { echo "<p>Die SQL-Anweisung ist fehlgeschlagen...</p>"; } $anzahl=mysql_num_rows($abfrage); echo "<p>In der Tabelle befinden sich $anzahl Bestellungen.</p>"; ?> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <?php while ($zeile = mysql_fetch_array($abfrage)) { echo "<tr><td> $zeile[ID] </td>"; echo "<td> $zeile[Vorname] </td>"; echo "<td> $zeile[Nachname] </td>"; echo "<td> $zeile[Ort] </td>"; echo "<td> $zeile[Sorte] </td>"; echo "<td> $zeile[Menge] </td>"; echo "<td> $zeile[BestellDatum] </td>"; echo "</tr>"; } echo "</table>"; mysql_close($verbindung); ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 26 MySQL phpMyAdmin 22.02.2011 Von PHP erzeugte XHTML-Seite mit Quelltext Folgende Bestelldaten sind vorhanden: In der Tabelle befinden sich 3 Bestellungen. Bestell-Nr. 3 5 8 Vorname Petra Oskar Lea Name Meyer Weber Bäuerle Wohnort Wien Stuttgart Bissingen Sorte Gala Gala Gala Menge 5 18 20 Bestelldatum 2010-01-29 2010-02-12 2010-02-26 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten suchen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <p>In der Tabelle befinden sich 3 Bestellungen.</p> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <tr> <td> 3 </td><td> Petra </td><td> Meyer </td><td> Wien </td> <td> Gala </td><td> 5 </td><td> 2010-01-29 </td> </tr> <tr> <td> 5 </td><td> Oskar </td><td> Weber </td><td> Stuttgart </td> <td> Gala </td><td> 18 </td><td> 2010-02-12 </td> </tr> <tr> <td> 8 </td><td> Lea </td><td> Bäuerle </td><td> Bissingen </td> <td> Gala </td><td> 20 </td><td> 2010-02-26 </td></tr> </table> </body> </html> 5.6. Aufnahme eines neuen Datensatzes (Bestellung) über XHTML-Formular Vorbereitung: Kopieren Sie den Ordner obstdaten_speichern nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/12obstdaten_speichern/obstdaten_speichern.html Hinweis zum Bestelldatum: Die Tabelle Bestellung in der Datenbank Obstladen enthält das Datenfeld BestellDatum. Das Bestelldatum wird nicht manuell im XHTML-Formular eingegeben. Im PHP-Programm bestellung.php wird mit Hilfe der Funktion getdate() das aktuelle Systemdatum als Bestelldatum automatisch in der Datenbank gespeichert (weitere Informationen siehe Kapitel 3). ______________________________________________________________________________________ Tress PHP Seite 27 MySQL phpMyAdmin 22.02.2011 obstdaten_speichern.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten in MySQL-Datenbank speichern</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Apfelbestellung im Obstladen</h3> <p>Bitte geben Sie folgende Daten für Ihre Bestellung ein:</p> <form action="obstdaten_speichern.php" method="post"> <table> <tr><td>Vorname:</td><td><input type="text" name="vorname" /></td></tr> <tr><td>Nachname:</td><td><input type="text" name="nachname" /></td></tr> <tr><td>Wohnort:</td><td><input type="text" name="ort" /></td></tr> <tr><td>Menge (in kg): </td><td><input type="text" size="5" name="menge" /></td></tr> <tr><td>Apfelsorte: </td><td> <input type="radio" name="sorte" value="Jonagold" />Jonagold<br /> <input type="radio" name="sorte" value="Gala" />Gala<br /> <input type="radio" name="sorte" value="Elstar" />Elstar</td></tr> <tr><td><input type="submit" value="Abschicken" /></td><td> <input type="reset" value="Zurücksetzen" /></td></tr> </table> </form> </body> </html> XHTML-Seite im Webbrowser ______________________________________________________________________________________ Tress PHP Seite 28 MySQL phpMyAdmin 22.02.2011 obstdaten_speichern.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten speichern</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Daten werden in die Tabelle Bestellung der Datenbank obstladen eingefügt.</h3> <?php $server = "localhost"; Logindaten zur Anmeldung beim Datenbankserver $user = "root"; $pass = ""; $vorname = $_POST["vorname"]; $nachname = $_POST["nachname"]; $ort = $_POST["ort"]; $sorte = $_POST["sorte"]; $menge = $_POST["menge"]; Bestelldaten werden aus dem XHTML-Formular übernommen. $jetzt = getdate(); Abruf Systemdatum $bestelldat = $jetzt["year"]."-".$jetzt["mon"]."-".$jetzt["mday"]; //$bestelldat =date("Y.m.d"); weitere Lösung zum Speichern des Bestelldatums $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen") or die ("Fehler beim Zugriff auf die Datenbank"); $sql = "INSERT INTO bestellung (Vorname,Nachname,Ort,Sorte,Menge,BestellDatum)"; $sql .= " VALUES ('$vorname', '$nachname', '$ort', '$sorte', '$menge', '$bestelldat')"; $abfrage = mysql_query($sql); if($abfrage) { echo "<p>Vielen Dank, Ihre Bestellung wurde gespeichert...</p>"; } else { echo "<p>Die SQL-Anweisung ist fehlgeschlagen...</p>"; } mysql_close($verbindung); ?> </body> </html> Von PHP erzeugte XHTML-Seite mit Quelltext ______________________________________________________________________________________ Tress PHP Seite 29 MySQL phpMyAdmin 22.02.2011 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten speichern</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Daten werden in die Tabelle Bestellung der Datenbank obstladen eingefügt.</h3> <p>Vielen Dank, Ihre Bestellung wurde gespeichert...</p> </body> </html> Tabelle Bestellung in MySQL nach der Bestellung durch den Kunden Otto Hölz ID 26: Programm vergibt die ID 26, weil inzwischen Datensätze aus der Tabelle gelöscht wurden. Diese ID kann aber manuell auf 9 abgeändert werden. 5.7. Änderung eines bestimmten Datensatzes Vorbereitung: Kopieren Sie den Ordner 13obstdaten_anpassen nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/13obstdaten_anpassen/obstdaten_dSatzupdate1.php Vorgehensweise (1) Anzeige aller Datensätze der Tabelle Bestellung und einer zusätzlichen Spalte mit Radiobuttons, in der ein bestimmter Datensatz zur Änderung gewählt werden kann. Übergabe der Kundennummer des ausgewählten Datensatzes: Variable auswahl. obstdaten_dSatzupdate1.php (2) (3) Anzeige des ausgewählten Datensatzes innerhalb eines Formulars. Der Benutzer kann die Inhalte teilweise oder insgesamt ändern. Da auch die Kundennr (ID) geändert werden kann, wird ein verstecktes Formularfeld mit der Originalkundennummer übermittelt. Die Daten des ausgewählten Datensatzes werden nur bei einer Datenänderung gespeichert (Update). Eine Änderung wird nicht durchgeführt, wenn die geänderte Kundennummer schon vorhanden ist bzw. wenn keine Daten geändert wurden. obstdaten_dSatzupdate2.php obstdaten_dSatzupdate3.php ______________________________________________________________________________________ Tress PHP Seite 30 MySQL phpMyAdmin 22.02.2011 (1) Anzeige aller Datensätze mit der Spalte Radiobutton für die Auswahl eines Datensatzes Programm: obstdaten_dSatzupdate1.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten lesen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <p>Wählen Sie aus, welcher Datensatz geändert werden soll:</p> <form action = "obstdaten_dSatzupdate2.php" method = "post"> <?php $server = "localhost"; $user = "root"; $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $ergebnis = mysql_query("select * from bestellung"); // Tabellenbeginn echo "<table>"; // Überschrift echo "<tr> <th>Auswahl</th> <th>Kunden-Nr</th>"; echo "<th>Nachname</th> <th>Vorname</th> "; echo "<th>Ort</th> <th>Sorte</th>"; echo "<th>Menge</th> <th>Bestelldatum</th></tr>"; while ($dsatz = mysql_fetch_array($ergebnis)) { echo "<tr>"; echo "<td class='radio'><input type='radio' name='auswahl'"; echo "value='" . $dsatz["ID"] . "' /></td>"; echo "<td>" . $dsatz["ID"] . "</td>"; echo "<td>" . $dsatz["Nachname"] . "</td>"; echo "<td>" . $dsatz["Vorname"] . "</td>"; echo "<td>" . $dsatz["Ort"] . "</td>"; echo "<td>" . $dsatz["Sorte"] . "</td>"; echo "<td>" . $dsatz["Menge"] . "</td>"; echo "<td>" . $dsatz["BestellDatum"] . "</td>"; echo "</tr>"; } Alle Radiobuttons in der ersten Spalte bilden eine Gruppe, und alle haben den gleichen Namen 'auswahl' . Als Wert für die Radio-Buttons wird die jeweilige Kundennummer (ID) verwendet. Beim Klick auf den Submit-Button wird die Variable auswahl an // Tabellenende das PHP-Programm obstdaden_dSatzupdate2.php übermittelt. echo "</table>"; ?> <p><input type="submit" value="Datensatz anzeigen" /></p> </form> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 31 MySQL phpMyAdmin 22.02.2011 (2) Anzeige und Änderung des Datensatzes in einem Formular Vor der Änderung der Daten Vor dem Speichern in der Datenbank Datenänderung Nach dem Speichern des geänderten Datensatzes mit der Kundennummer 8 Änderung format.css body {font-family: Arial; font-size: 10pt;} form.ds {width:33%;} input {background-color:yellow;} table { border-collapse:collapse; border-color: #FF0000; border-width: 1px; border-style: solid; } td,th {width:100px; border-color: blue; border-width: 1px; border-style: solid; text-align:center;} th {background-color:#53E6EA; } td.radio {background-color:#53E6EA; text-align:center;} } form { border-color: #FF0000; border-width: 3px; border-style: solid; background-color:silver; width:65%; } ______________________________________________________________________________________ Tress PHP Seite 32 MySQL phpMyAdmin 22.02.2011 Programm: obstdaten_dSatzupdate2.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Datenänderung bestimmter Datensatz</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> Es wird in der IF-Bedingung überprüft, ob der <?php Rückgabewert der Funktion isset() den Wert if (isset($_POST["auswahl"])) true besitzt. Nur bei true wird das Programm { in der Verzweigung ausgeführt. Wenn im $server = "localhost"; Formular der Radiobutton nicht angeklickt wird, gibt die Funktion isset() nicht true $user = "root"; zurück. $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); Die SQL-Abfrage führt nur dann zu einem Ergebnis, wenn die ID mit der Kundennummer des ausgewählten Datensatzes (auswahl) übereinstimmt. Das Ergebnis besteht nur aus einem Datensatz. mysql_select_db("obstladen"); $sqlab = "select * from bestellung where ID = " . $_POST["auswahl"]; $ergebnis = mysql_query($sqlab); $dsatz = mysql_fetch_array($ergebnis); echo "<p>Führen Sie die Änderungen durch, betätigen Sie anschließend den Button.</p>"; echo "<form class='ds' action = 'obstdaten_dSatzupdate3.php' method = 'post'>"; echo "<p><input name='nn' value='" . $dsatz["Nachname"] . "' /> Nachname</p>"; echo "<p><input name='vn' value='" . $dsatz["Vorname"] . "' /> Vorname</p>"; echo "<p><input name='kdnr' value='" . $_POST["auswahl"] . "' /> Kundennummer</p>"; echo "<p><input name='ort' value='" . $dsatz["Ort"] . "' /> Ort</p>"; echo "<p><input name='sorte' value='" . $dsatz["Sorte"] . "' /> Sorte</p>"; echo "<p><input name='me' value='" . $dsatz["Menge"] . "' /> Menge</p>"; echo "<p><input name='bestdat' value='" . $dsatz["BestellDatum"] . "' /> Bestelldatum</p>"; echo "<input type='hidden' name='orikdnr' value='" . $_POST["auswahl"] . "' />"; echo "<p><input type='submit' value='Änderungen in der Datenbank speichern' />"; Verstecktes Formularfeld echo " <input type='reset' /></p>"; echo "</form>"; } Wenn kein Radio-Button angeklickt wurde, else dann gibt die Funktion isset() false aus und echo "<p>Es wurde kein Datensatz ausgewählt</p>"; es gilt der else-Fall. Das Programm gibt dann ?> nur die Meldung "Es wurde kein Datensatz ausgewählt" aus. Es können keine Daten </body> geändert werden. </html> Funktion isset(): Die Funktion isset() erkennt, ob die ihr übergebene Variable überhaupt existiert und gibt true oder false zurück. SQL-Abfrage zur Auswahl eines bestimmten Datensatzes über die Kundennummer: Die vorhandene Kundennumer (ID) in der Datenbanktabelle bestellung wird verglichen (WHERE) mit der vom ausgewählten Datensatz über den Radiobutton. * bedeutet, dass alle Datenfelder ausgewählt werden. Das Ergebnis wird in der PHP-Variablen $sqlab gespeichert. $sqlab = "select * from bestellung where ID = " . $_POST["auswahl"]; Hochkommata und Anführungszeichen an einem Beispiel: Nur HTML: HTML in PHP: echo " " value="..." /> Menge</p> <p><input name= me "<p><input name='me' value='" . $dsatz["Menge"] . "' /> Menge</p>"; Verstecktes Formularfeld: echo "<input type='hidden' name='orikdnr' value='" . $_POST["auswahl"] . "' />"; Obwohl dieses Formularfeld mit den Namen orikdnr nicht angezeigt wird (type="hidden"), wird trotzdem beim Absenden der Formulardaten die Original-Kundennummer übermittelt, die zur eindeutigen Identifizierung benötigt wird. Falls der Benutzer die Kundennummer geändert hat, stünde diese Original-Information andernfalls nicht mehr zur Verfügung. ______________________________________________________________________________________ Tress PHP Seite 33 MySQL phpMyAdmin 22.02.2011 (3) Speicherung des ausgewählten und geänderten Datensatzes Programm: obstdaten_dSatzupdate3.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Datenänderung bestimmter Datensatz</title></head> <body> <?php $server = "localhost"; $user = "root"; $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $sqlab = "update bestellung set" . " Nachname = '" . $_POST["nn"] . "'," . " Vorname = '" . $_POST["vn"] . "'," . " ID = " . $_POST["kdnr"] . "," . " Ort = '" . $_POST["ort"] . "'," . " Sorte = '" . $_POST["sorte"] . "'," . " Menge = " . $_POST["me"] . "," . " BestellDatum = '" . $_POST["bestdat"] . "'" . " where ID = " . $_POST["orikdnr"]; mysql_query($sqlab); $num = mysql_affected_rows(); if ($num <= 0) echo "<p>Der Datensatz wurde nicht geändert</p>"; else echo "<p>Der Datensatz wurde geändert</p>"; ?> <p>Zurück zur <a href="obstdaten_dSatzupdate1.php">Datensatzauswahl</a></p> </body> </html> Funktion mysql_affected_rows(): Diese Funktion kann bei Aktionsabfragen (Erzeugen, Ändern und Löschen von Datensätzen) eingesetzt werden. Sie ermittelt die Anzahl der von der Aktionsabfrage betroffenen (affected) Datensätze. SQL-Abfrage zur Änderung eines bestimmten Datensatzes über die Kundennummer: Update ändert die Werte des Datenfeldes unter Berücksichtigung der SET-Option. Ausgewählt werden die Datensätze im WHERE-Teil der SQL-Anweisung. SQL-Anweisung UPDATE mit Speicherung in der PHP-Variable $sqlab : $sqlab = "UPDATE <tabellenname> SET " . "Feldname = '".$_POST["name"]."'," Feld-Stringvariable mit Anführungszeichen und Hochkommata . "Feldname = '".$name."'," Stringvariable mit Anführungszeichen und Hochkommata . "Feldname = ".$_POST["menge"]."," numerische Feldvariable nur mit Anführungszeichen . "Feldname = ".$menge."," numerische Variable nur mit Anführungszeichen ... . " Feldname = '" . $_POST["bestdat"] . "'" kein Komma, da letzter Feldname vor WHERE . " WHERE <indizierter Feldname> = " . <eindeutiger Wert>; Allgemeine Regel für Hochkommata und Anführungszeichen: "Stringvariable" mit Anführungszeichen gibt den Inhalt der Variable aus. 'Stringvariable' mit Hochkommata gibt den Namen der Variable aus. ______________________________________________________________________________________ Tress PHP Seite 34 MySQL phpMyAdmin 22.02.2011 Beispiel 1a mit Anführungszeichen: $Ort = "Bissingen"; $Ausgabe = "$Ort"; In der Variablen $Ausgabe wird das Wort Bissingen gespeichert. $Ausgabe =' $Ort'; In der Variablen $Ausgabe wird der Variablenname $Ort gespeichert. $Ausgabe = $Ort; In der Variablen $Ausgabe wird das Wort Bissingen gespeichert. Beispiel 1b mit Hochkommata: $Ort = 'Bissingen'; Da Bissingen keine Variable ist, wird der Text Bissingen gespeichert. $Ausgabe = "$Ort"; In der Variablen $Ausgabe wird das Wort Bissingen gespeichert. $Ausgabe = '$Ort'; In der Variablen $Ausgabe wird der Variablenname $Ort gespeichert. $Ausgabe = $Ort; In der Variablen $Ausgabe wird das Wort Bissingen gespeichert. 5.8. Löschen eines bestimmten Datensatzes Vorbereitung: Kopieren Sie den Ordner 14obstdaten_loeschenDSatz nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/14obstdaten_loeschenDSatz/obstdaten_dSatzloeschen1.php Programm: obstdaten_dSatzloeschen1.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten lesen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <p>Wählen Sie aus, welcher Datensatz gelöscht werden soll:</p> <form action = "obstdaten_dSatzloeschen2.php" method = "post"> <?php $server = "localhost"; $user = "root"; $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $ergebnis = mysql_query("select * from bestellung"); // Tabellenbeginn echo "<table>"; // Überschrift echo "<tr> <th>Auswahl</th> <th>Kunden-Nr</th>"; echo "<th>Nachname</th> <th>Vorname</th> "; echo "<th>Ort</th> <th>Sorte</th>"; echo "<th>Menge</th> <th>Bestelldatum</th></tr>"; while ($dsatz = mysql_fetch_array($ergebnis)) { echo "<tr>"; echo "<td class='radio'><input type='radio' name='auswahl'"; echo "value='" . $dsatz["ID"] . "' /></td>"; echo "<td>" . $dsatz["ID"] . "</td>"; echo "<td>" . $dsatz["Nachname"] . "</td>"; echo "<td>" . $dsatz["Vorname"] . "</td>"; echo "<td>" . $dsatz["Ort"] . "</td>"; echo "<td>" . $dsatz["Sorte"] . "</td>"; echo "<td>" . $dsatz["Menge"] . "</td>"; echo "<td>" . $dsatz["BestellDatum"] . "</td>"; echo "</tr>"; } // Tabellenende echo "</table>"; ?> <p><input type="submit" value="Datensatz löschen" /></p> </form> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 35 MySQL phpMyAdmin 22.02.2011 Programm: obstdaten_dSatzloeschen2.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Datenänderung bestimmter Datensatz</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <?php if (isset($_POST["auswahl"])) { $server = "localhost"; $user = "root"; $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $sqlab = "delete from bestellung where ID = " . $_POST["auswahl"]; $ergebnis = mysql_query($sqlab); $num = mysql_affected_rows(); if ($num <= 0) echo "<p>Der Datensatz wurde nicht gelöscht</p>"; else echo "<p>Der Datensatz wurde gelöscht</p>"; } else echo "<p>Es wurde kein Datensatz ausgewählt</p>"; ?> <p>Zurück zur <a href="obstdaten_dSatzloeschen1.php">Datensatzauswahl</a></p> </body> </html> $sqlab = "delete from bestellung where ID = " . $_POST["auswahl"]; Diese SQL-Abfrage löscht alle Datensätze, bei denen die Datensatznummer in der Datenbanktabelle Bestellung im Datenfeld ID mit der Datensatznummer des ausgewählten Datensatzes im XHTMLFormular (auswahl) übereinstimmt. Normalerweise wird immer nur ein Datensatz gelöscht, weil jede Datensatznummer (Kundennummer) nur einmal vorkommt. ______________________________________________________________________________________ Tress PHP Seite 36 MySQL phpMyAdmin 22.02.2011 5.9. Löschen mehrerer Datensätze Vorbereitung: Kopieren Sie den Ordner 15obstdaten_loeschenDSaetze nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/15obstdaten_loeschenDSaetze/obstdaten_DSaetzeloeschen1.php Erzeugte Webseite durch das Programm obstdaten_DSaetzeloeschen1.php Erzeugte Webseite durch das Programm obstdaten_DSaetzeloeschen2.php Erzeugte Webseite nach dem Löschen durch das Programm obstdaten_DSaetzeloeschen1.php ______________________________________________________________________________________ Tress PHP Seite 37 MySQL phpMyAdmin 22.02.2011 Programm: obstdaten_DSaetzeloeschen1.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten lesen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <p>Wählen Sie aus, welche Datensätze gelöscht werden sollen:</p> <form action = "obstdaten_DSaetzeloeschen2.php" method = "post"> <?php $server = "localhost"; $user = "root"; $pass = ""; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $ergebnis = mysql_query("select * from bestellung"); // Tabellenbeginn echo "<table>"; // Überschrift echo "<tr> <th>Auswahl</th> <th>Kunden-Nr</th>"; echo "<th>Nachname</th> <th>Vorname</th> "; echo "<th>Ort</th> <th>Sorte</th>"; echo "<th>Menge</th> <th>Bestelldatum</th></tr>"; while ($dsatz = mysql_fetch_array($ergebnis)) { echo "<tr>"; echo "<td class='radio'><input type='checkbox' name='auswahl[]'"; echo "value='" . $dsatz["ID"] . "' /></td>"; echo "<td>" . $dsatz["ID"] . "</td>"; echo "<td>" . $dsatz["Nachname"] . "</td>"; echo "<td>" . $dsatz["Vorname"] . "</td>"; echo "<td>" . $dsatz["Ort"] . "</td>"; echo "<td>" . $dsatz["Sorte"] . "</td>"; echo "<td>" . $dsatz["Menge"] . "</td>"; echo "<td>" . $dsatz["BestellDatum"] . "</td>"; echo "</tr>"; } // Tabellenende echo "</table>"; ?> <p><input type="submit" value="Datensätze löschen" /></p> </form> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 38 MySQL phpMyAdmin 22.02.2011 Programm: obstdaten_DSaetzeloeschen2.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Datenänderung bestimmter Datensatz</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <?php if (isset($_POST["auswahl"])) { $server = "localhost"; $user = "root"; $pass = ""; $auswahl = $_POST["auswahl"]; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen"); $numloesch=0; foreach ($auswahl as $loeschnr) { $sqlab = "delete from bestellung where ID=".$loeschnr; $ergebnis = mysql_query($sqlab); $num = mysql_affected_rows(); $numloesch=$numloesch+$num; } $num = mysql_affected_rows(); if ($num <= 0) echo "<p>Der Datensatz wurde nicht gelöscht</p>"; else echo "<p>$numloesch Datensätze wurden gelöscht</p>"; } else echo "<p>Es wurde kein Datensatz ausgewählt</p>"; ?> <p>Zurück zur <a href="obstdaten_DSaetzeloeschen1.php">Datensatzauswahl</a></p> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 39 MySQL phpMyAdmin 22.02.2011 5.10. Auswahl von Daten über ein Suchformular mit genauer Sucheingabe Vorbereitung: Kopieren Sie den Ordner 16kunden_suchen nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/16kunden_suchen/kunde_suchen.html Suchformular: kunde_suchen.html Webseite: kunde_suchen.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten suchen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Bestellungen eines bestimmten Kunden suchen (exakter Nachname)</h3> <form action="kunde_suchen.php" method="post"> <p>Kundenname&nbsp;&nbsp;<input type="text" name="kdname" value="" /></p> <p><input class="button" type="submit" value="Kundendaten abrufen" /></p> </form> </body> </html> Von PHP erzeugte XHTML-Seite mit Quelltext ______________________________________________________________________________________ Tress PHP Seite 40 MySQL phpMyAdmin 22.02.2011 Programm: kunde_suchen.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten suchen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <?php $server = "localhost"; $user = "root"; $pass = ""; $kdname = $_POST["kdname"]; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen") or die ("Fehler beim Zugriff auf die Datenbank"); $sql = "SELECT * FROM bestellung WHERE Nachname='$kdname'"; $abfrage = mysql_query($sql); if(!$abfrage) { echo "<p>Die SQL-Anweisung ist fehlgeschlagen...</p>"; } $anzahl=mysql_num_rows($abfrage); echo "<p>In der Tabelle befinden sich $anzahl Bestellungen.</p>"; ?> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <?php while ($zeile = mysql_fetch_array($abfrage)) { echo "<tr><td> $zeile[ID] </td>"; echo "<td> $zeile[Vorname] </td>"; echo "<td> $zeile[Nachname] </td>"; echo "<td> $zeile[Ort] </td>"; echo "<td> $zeile[Sorte] </td>"; echo "<td> $zeile[Menge] </td>"; echo "<td> $zeile[BestellDatum] </td>"; echo "</tr>"; } echo "</table>"; mysql_close($verbindung); ?> </body> </html> CSS-Datei: format.css table { border-color: #FF0000; border-width: 3px; border-style: outset; background-color:#99FFFF; font-family: Arial; font-size: 10pt; } td {width:100px;} th { text-align: left;} form {background-color:#FFFFAE; border:3px solid red; width:70%;} input {background-color:#DBB7FF; font-size:20px; font-familiy:tahoma;} input.button {background-color:red; color:white;} ______________________________________________________________________________________ Tress PHP Seite 41 MySQL phpMyAdmin 22.02.2011 5.11. Auswahl von Daten über ein Suchformular mit beliebiger Sucheingabe Vorbereitung: Kopieren Sie den Ordner 17kunden_beliebigsuchen nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/17kunden_beliebigsuchen/kunde_beliebigsuchen.html Suchformular: kunde_beliebigsuchen.html Webseite: kunde_beliebigsuchen.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten suchen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Bestellungen eines bestimmten Kunden mit beliebiger Sucheingabe suchen</h3> <form action="kunde_beliebigsuchen.php" method="post"> <p>Kundenname&nbsp;&nbsp;<input type="text" name="kdname" value="" /></p> <p><input type="submit" value="Kundendaten abrufen" /></p> </form> </body> </html> Vom PHP-Programm kunde_beliebigsuchen.php erzeugtes Suchergebnis ______________________________________________________________________________________ Tress PHP Seite 42 MySQL phpMyAdmin 22.02.2011 PHP-Programm: kunden_beliebigsuchen.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten suchen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <?php $server = "localhost"; $user = "root"; $pass = ""; $kdname = $_POST["kdname"]; $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen") or die ("Fehler beim Zugriff auf die Datenbank"); //sucht eingegebene Zeichen/Zeichenkette groß/klein an jeder Stelle – ist hier aktiviert $sql = "SELECT * FROM bestellung WHERE Nachname like '%$kdname%'"; //sucht Nachnamen mit h oder H als Anfangsbuchstabe – ist hier nicht aktiviert //$sql = "SELECT * FROM bestellung WHERE Nachname like 'h%'"; //sucht Nachnamen mit eingegebenen Anfangsbuchstaben – ist hier nicht aktiviert //$sql = "SELECT * FROM bestellung WHERE Nachname like '$kdname%'"; //sucht Nachnamen mit eingegebenen Endbuchstaben – ist hier nicht aktiviert //$sql = "SELECT * FROM bestellung WHERE Nachname like '%$kdname'"; //sucht Nachnamen mit eingegebenen Endbuchstaben – ist hier nicht aktiviert //$sql = "SELECT * FROM bestellung WHERE Nachname like '$kdname'"; $abfrage = mysql_query($sql); if(!$abfrage) { echo "<p>Die SQL-Anweisung ist fehlgeschlagen...</p>"; } $anzahl=mysql_num_rows($abfrage); echo "<p>In der Tabelle befinden sich $anzahl Bestellungen.</p>"; ?> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <?php while ($zeile = mysql_fetch_array($abfrage)) { echo "<tr><td> $zeile[ID] </td>"; echo "<td> $zeile[Vorname] </td>"; echo "<td> $zeile[Nachname] </td>"; echo "<td> $zeile[Ort] </td>"; echo "<td> $zeile[Sorte] </td>"; echo "<td> $zeile[Menge] </td>"; echo "<td> $zeile[BestellDatum] </td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html> mysql_close($verbindung); ______________________________________________________________________________________ Tress PHP Seite 43 MySQL phpMyAdmin 22.02.2011 5.12. Auswahl von Daten über ein Suchformular nach verschiedenen Suchverfahren Vorbereitung: Kopieren Sie den Ordner 18kunden_suchverfahren nach H:\XAMPPLITE/htdocs Start Webserver Apache und MySQL über XAMPP Control Panel http://localhost/18kunden_suchverfahren/kunde_suchverfahren.html Suchformular: kunde_suchverfahren.html Webseite: kunde_suchverfahren.html <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head><title>Daten suchen in der MySQL-Datenbank</title> <link rel="stylesheet" href="format.css" type="text/css" /> </head> <body> <h3>Bestellungen bei bestimmten Kunden suchen </h3> <form action="kunde_suchverfahren.php" method="post"> <p>Wählen Sie das Suchverfahren (Keine Unterscheidung Groß- und Kleinschreibung)</p> <p><input type="radio" name="suche" value="genaue_suche" /> genauer Suchbegriff (vollständige Zeichenkette)<br /> <input type="radio" name="suche" value="genaue_linkssuche" /> Suchbegriff (Teilzeichenkette) links beginnend<br /> <input type="radio" name="suche" value="genaue_rechtssuche" /> Suchbegriff (Teilzeichenkette) rechts beginnend<br /> <input type="radio" name="suche" value="beliebige_suche" /> Zeichenkette (1 oder mehrere Zeichen) an beliebiger Stelle suchen<br /> </p> <h3>Bei Wahl der letzten drei Suchverfahren ohne jegliche Eingabe werden alle Daten ausgegeben! </h3> <p>Kundenname&nbsp;&nbsp;<input class="farbe1" type="text" name="kdname" value="" /></p> <p><input class="farbe2" type="submit" value="Kundenbestelldaten abrufen" /></p> </form> </body> </html> Vom PHP-Programm kunde_suchverfahren.php erzeugtes Suchergebnis ______________________________________________________________________________________ Tress PHP Seite 44 MySQL phpMyAdmin 22.02.2011 PHP-Programm: kunden_suchverfahren.php <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" > <head> <title>Daten suchen</title> <link rel="stylesheet" href="Format.css" type="text/css" /> </head> <body> <h3>Folgende Bestelldaten sind vorhanden:</h3> <?php $server = "localhost"; $user = "root"; $pass = ""; $kdname = $_POST["kdname"]; //if ($_POST["suche"]==='genaue_suche') ist nicht notwendig // { // $kdname = $_POST["kdname"]; // } if ($_POST["suche"]==='genaue_linkssuche') { $kdname = "$kdname%"; } if ($_POST["suche"]==='genaue_rechtssuche') { $kdname = "%$kdname"; } if ($_POST["suche"]==='beliebige_suche') { $kdname = "%$kdname%"; } $verbindung = mysql_connect($server, $user, $pass) or die ("Keine Verbindung zum Server... Abbruch des Skripts."); mysql_select_db("obstladen") or die ("Fehler beim Zugriff auf die Datenbank"); $sql = "SELECT * FROM bestellung WHERE Nachname like '$kdname'"; $abfrage = mysql_query($sql); if(!$abfrage) { echo "<p>Die SQL-Anweisung ist fehlgeschlagen...</p>"; } $anzahl=mysql_num_rows($abfrage); echo "<p>In der Tabelle befinden sich $anzahl Bestellungen.</p>"; ?> <table> <tr> <th>Bestell-Nr.</th> <th>Vorname</th> <th>Name</th> <th>Wohnort</th> <th>Sorte</th> <th>Menge</th> <th>Bestelldatum</th> </tr> <?php while ($zeile = mysql_fetch_array($abfrage)) { echo "<tr><td> $zeile[ID] </td>"; echo "<td> $zeile[Vorname] </td>"; echo "<td> $zeile[Nachname] </td>"; echo "<td> $zeile[Ort] </td>"; echo "<td> $zeile[Sorte] </td>"; echo "<td> $zeile[Menge] </td>"; echo "<td> $zeile[BestellDatum] </td>"; echo "</tr>"; } echo "</table>"; mysql_close($verbindung); ?> </body> </html> ______________________________________________________________________________________ Tress PHP Seite 45 MySQL phpMyAdmin 22.02.2011