PHP + MySQL Die MySQL-Datenbank Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Zusammenspiel Apache, PHP, PHPMyAdmin und MySQL PHPMyAdmin Verwaltungstool Nutzer Datei.php oder Datei.pl PHP Scriptsprache MySQL Datenbank Apache HTTP-Server Hochschule Karlsruhe Technik & Wirtschaft Perl Scriptsprache Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Warum eine Datenbank? • Unabhängigkeit von Anwendung und Datenbank • Standardisierte Abfragesprache (SQL = Structured Query Language) • Sehr hohe Performance auch bei komplizierten Datenbank-Abfragen • Möglichkeit Beziehungen und Abhängigkeiten zwischen Daten herzustellen • Wahrung der Datenkonsistenz: Vermeidung doppelter Datensätze, Vermeidung widersprüchlicher Datensätze • Leichte Sortierung der Daten möglich • Vielfältige Backupstrategien verfügbar/möglich • Leichter Abgleich mehrerer Datenbanken möglich Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Die MySQL-Datenbank Ein System zur Strukturierung, Speicherung und Wiedergewinnung von Daten. MySQL ist ein sehr kompaktes und leistungsfähiges relationales Datenbanksystem. Wichtige Leiszungsmerkmale von MySQL sind: - SQL-92-Konformität, - Transaktionen, - Fremdschlüssel, - Volltextsuche, - Unterabfragen, - gespeicherte Prozeduren und Funktionen. MySQL stellt fünf Tabellentypen für unterschiedliche Anwendungsbereiche zur Verfügung: - MyISAM - InnoDB, - BDB, - MERGE - HEAP Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Technische Funktionalität MySQL ist ein RDBMS (Relational-Database-Management-System). In einem einer relationalen Datenbank werden Daten in Tabellen und Spalten abgelegt. Relationales DB-System: RDBS Wenn einzelne Tabellen einer Datenbank in Verbindung zueinander stehen. Primärschlüssel Primärschlüssel Id vorname Nachname 1 Tobias Hauser 2 Christian Wenz 3 Melville Herman id Titel autor 1 Das Website-Handuch 1 2 Javascript & AJAX 2 3 Moby Dick 3 Tabelle autor Hochschule Karlsruhe Technik & Wirtschaft Fremdschlüssel Tabelle title Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Begrifflichkeiten Datenbank Ansammlung von strukturierten Daten, ähnlich eines Blatts in Excel (Sheet) Tabellen Eine Datenbank besteht aus mehreren Tabellen. Primärschlüssel Spalte einer Tabelle die eindeutig ist (id, Kundennummer, E-Mail-Adresse). Ergebnisliste Ergebnis einer Datenbankabfrage, in der z.B. einzelne Zeilen aus der DB herausgelesen werden. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Wie funktioniert MySQL • MySQL verwendet als Sprache zur Abfrage/Manipulation von Daten SQL (Structured Query Language). • Auch zur Manipulation der Datenbankstrukturen (z. B. Tabellen-Definitionen) wird SQL verwendet. MySQL stellt Grundsätzlich zwei Möglichkeiten zur Verfügung SQL Befehle an die Datenbank zu abzusetzen: • Über das Kommandozeilenprogramm "mysql" • Über die Schnittstelle der jeweiligen Programmiersprache (mysql_-Befehle) in PHP (mysql_query(), mysql_connect(), mysql_select_db(), mysql_close(), mysql_fetch_array(), ) MySQL speichert die Daten in einem binären Format in Dateien auf dem Datenträger (meistens Festplatte) ab. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Einführung in SQL (Structured Query Language) SQL ist eine sehr mächtige Sprache, da SQL viele Befehle enthält, modular aufgebaut ist und dadurch sehr komplexe Abfragen möglich macht. Es gibt drei Gruppen von Befehlen: DDL (Data-Definition-Language) Befehle zum definieren/manipulieren von Datenbankstrukturen (z.B. Tabellen anlegen, löschen, ändern) CREATE, DELETE, DML (Data-Manipulation-Language) Befehle zum manipulieren von Daten (z.B. Zeile einfügen, löschen, ändern) DCL (Data-Control-Language) Befehle zum Administrieren der Zugangskontrollen der Datenbank (z.B. Benutzer anlegen, Passwörter ändern) Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Legitimation am Datenbanksystem <?php $Server = "localhost"; $Benutzer = "Stud"; $Passwort = "Sesam"; mysql_connect($Server,$Benutzer,$Passwort); $result = mysql_query('CREATE DATABASE test_db3'); // Neue DB anlegen if (!$result) { die('Fehler!'); } else { print "Datenbank wurde eingerichtet!"; } ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Tabelle erstellen <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); mysql_query("CREATE TABLE adressen8 ( id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(15), VorName VARCHAR(15), Strasse VARCHAR(20), Hausnummer INT(3), Postleitzahl INT(5), Stadt VARCHAR(20))"); mysql_close(); ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Die wichtigsten Datentypen CHAR(10): Zeichenkette. In den runden Klammern steht die Länge des Strings. VARCHAR(5): Zeichenkette mit variabler Länge. INTEGER: Numerischer Wert DOUBLE: Fließkommazahl DATETIME: Datumswert Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Spezifikationen NOT NULL: Wert darf nie leer sein PRIMARY KEY: Primärschlüssel (id, Kundennummer oder E-Mail-Adresse) AUTO_INCREMENT: Eine id wird automatisch weitergezählt. mysql_query("CREATE TABLE adressen8 ( id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(15), VorName VARCHAR(15), Strasse VARCHAR(20), Hausnummer INT(3), Postleitzahl INT(5), Stadt VARCHAR(20))"); Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Tabelle löschen <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); mysql_query("DROP TABLE adressen8 "); mysql_close(); print "Tabelle adressen8 wurde geloescht"; ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Aus einer Datenbanktabelle Daten auslesen <?php $a="localhost"; $b=„Stud"; $c=„Sesam"; $d=„ex"; mysql_connect($a,$b,$c); mysql_select_db($d); $zeiger = mysql_query("SELECT * FROM adressen8"); $werte = mysql_fetch_array($zeiger); print "Nummer: $werte[0] <br />"; print "Name: $werte[1] <br />"; print "Vorname: $werte[2] <br />"; print "Strasse: $werte[3] $werte[4] <br />"; print "Postleitzahl: $werte[5] <br />"; print "Stadt: $werte[6] <br />"; mysql_close(); ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Datensatz in Tabelle einlesen <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); mysql_query("INSERT INTO adressen8 (Name, VorName, Strasse, Hausnummer, Postleitzahl, Stadt) values('Müller','Fritz','Hauptstr.',102,78125,'Pforzheim')"); mysql_close(); ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Mehrere Datensätze in eine Tabelle einfügen <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); $namen=array("name1"=>array("1","Maier","Fritz","Moltkestr","23","76133","Karlsruhe"), "name2"=>array("2","Kunz","Ute","Karlstr","104","76136","Karlsruhe"), "name3"=>array("3","Gans","Gustav","Ottostr","12","77116","Leonberg"), "name4"=>array("4","Kasper","Lena","Kantstr","122","78378","Kurberg")); foreach ($namen as $wert) { $check = mysql_query("INSERT INTO Adressen (id,Name,VorName,Strasse,Hausnummer,Postleitzahl, Stadt) values ('$wert[0]','$wert[1]','$wert[2]','$wert[3]','$wert[4]','$wert[5]','$wert[6]')"); } mysql_close(); if ($check) { print "Daten wurden eingespeist"; } else { print "Fehler!!!"; } ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Alle Datensätze aus einer Tabelle auslesen $zeiger=mysql_query("SELECT * FROM MitarbeiterAdressen"); while($werte = mysql_fetch_array($zeiger)) { print "Zähler: $werte[0] <br>"; print "Name: $werte[1] <br>"; print "Vorname: $werte[2] <br>"; print "Strasse: $werte[3] $werte[4]<br>"; print "Postleitzahl: $werte[5] <br>"; print "Stadt: $werte[6] <br>"; } Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Spalte aus Tabelle auslesen <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); $zeiger = mysql_query("SELECT Name FROM MitarbeiterAdressen"); while($werte = mysql_fetch_array($zeiger)) { print "Name: $werte[0] <br>"; } mysql_close(); ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Die WHERE-Klausel Die WHERE-Klausel dient dazu Bedingungen für einen DML- oder SELECT-Befehl zu bestimmen. <?php $a="localhost"; $b="Stud"; $c="Sesam"; $d="ex"; mysql_connect($a,$b,$c); mysql_select_db($d); $zeiger=mysql_query("SELECT Name FROM Adressen8 WHERE Stadt='Karlsruhe'"); while($werte=mysql_fetch_array($zeiger)) { print "Name: $werte[0] <br>"; } mysql_close(); ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober PHP/SQL-Übung 1. Erstellen Sie eine Tabelle zur Speicherung der folgenden Daten in der Datenbank „ex“ mit Phpmyadmin. 1. id (Primärschlüssel) 2. Vorname 3. Nachname 4. Alter (Alter ist ein SQL-Befehl. Zeichenfolge „Alter“ im SQL-Teil vermeiden!) 5. Stadt 6. Nationalität 2. Erstellen Sie ein PHP-Programm das über ein Formular die Personendaten entgegennehmen kann. 3. Erstellen Sie die entsprechenden PHP- und SQL-Anweisungen, damit die Eingabedaten in die unter Punkt 1 angelegte Tabelle, durch einen Klick auf eine Schaltfläche, eingetragen werden. 4. Erstellen Sie ein weiteres PHP-Programm, mit dem Sie die vorhandenen Einträge in Ihrer Tabelle auslesen und visualisieren können. Das zweite PHP-Programm soll durch einen Link unter dem Eingabeformular gestartet werden können. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Dateien hochladen HTML-Seite: <form enctype="multipart/form-data" action="upload.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober Dateien hochladen PHP-Programm upload.php: <?php $uploadDir = '/var/www/web1/html/upload_aufgabe/'; $uploadFile = $uploadDir . $_FILES['userfile']['name']; echo "<pre>"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile)) { echo "Datei ist in Ordnung und Sie wurde erfolgreich hochgeladen."; echo "\n"; print_r($_FILES); } else { echo "Es wurde ein Fehler gemeldet!\nHier sind die Fehler informationen:\n"; print_r($_FILES); } echo "</pre>"; ?> Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. Martin Schober