Web-basierte Anwendungssysteme PHP Teil 3 Prof. Dr. Armin Lehmann ([email protected]) Fachbereich 2 Informatik und Ingenieurwissenschaften Wissen durch Praxis stärkt Seite 1 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen In PHP kann auf das Dateisystem des Servers zugegriffen werden, um + Ordner, Dateien zu erstellen oder zu löschen + Ordner, Dateien zu manipulieren + Dateien auszulesen Seite 2 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen Informative Funktionen für Dateien und Ordner + filemtime(string $filename) – Datum der letzten Änderung der Datei + fileatime(string $filename) – Datum des letzten Zugriffs + filesize(string $filename) – Größe in Bytes + opendir(string $path) – Ordner öffnen + readdir() – gibt den Namen der nächsten Datei im geöffneten Ordner an + closedir(string $path) – schließt den Ordner Seite 3 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen Dateien lesen, schreiben und anfügen + fopen(string $filename, string $mode) – Die drei Modi r,w und a werden hierfür verwendet + fopen() gibt einen Zeiger auf die Datei zurück Datei schließen + fclose($fopenPointer) Seite 4 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen fgets($fopenPointer) – liest eine Zeile feof($fopenPointer) – gibt TRUE zurück, falls das Ende der Datei erreicht wurde fread($fopenPointer, int $length) – gibt den Inhalt entsprechend der angegebenen Länge in Bytes zurück Seite 5 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen Beispiel: <?php $f = fopen("php.txt", "r") or die("Unable to open file!"); // Liest Zeile für Zeile bis zum Ende der Datei while(!feof($f)) { echo fgets($f) . "<br />"; } fclose($f); # Oder $myfile = fopen("php.txt", "r") or die("Unable to open file!"); echo fread($myfile,filesize("php.txt")); fclose($myfile); ?> Seite 6 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen In eine Datei wird mit fopen() geschrieben Achtung: die Dateiberechtigungen müssen stimmen!!! fopen("php.txt", "w") erstellt die Datei immer neu (leere Datei wird erzeugt) fwrite($fopenPointer, "Hallo Welt!") – erzeugt einen Eintrag in der Datei Seite 7 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen Beispiel: <?php $f = fopen("php.txt", "w") or die("Unable to open file!"); $txt = "PHP ist doof!\n"; fwrite($f, $txt); $txt = "Besonders am Dienstag\n"; fwrite($f, $txt); fclose($f); ?> Seite 8 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Dateisystemfunktionen Datei-Upload mittels $_FILES und bool move_uploaded_file ( string $filename , string $destination ) <form action="upload.php" method="post" enctype="multipart/form-data"> Datei zum Upload wählen: <input type="file" name="fileToUpload"> <input type="submit" value="Upload" name="submit"> </form> <?php $upload_dir = "uploads/"; // fügt Pfad und Datei zusammen $upload_file = $upload_dir . basename($_FILES["fileToUpload"]["name"]); if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $upload_file)) { echo "Datei hochgeladen.\n"; } else { echo "Fehler beim Hochladen!\n"; } ?> Seite 9 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 Datenbank Ist sicherer und besser zum speicher von Daten geeignet als Dateien Hierzu wird z.B. ein MySQL-Server benötigt PHP mit MySQL verbinden (MySQLi oder PDO (PHP Data Objects)) Beispiele immer nur MySQLi Prozedural im Kurs Seite 10 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Datenbank Mit Datenbank verbinden - mysqli_connect() <?php $servername = "localhost"; $uname = "username"; $pword = "password"; // Create connection $conn = mysqli_connect($servername, $uname, $pword); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?> Seite 11 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Datenbank Befehle auf Datenbank ausführen - mysqli_query($conn, $befehl) <?php $servername = "localhost"; $uname = "username"; $pword = "password"; $conn = mysqli_connect($servername, $uname, $pword); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // Create database $sql = "CREATE DATABASE nameDerDB"; if (mysqli_query($conn, $sql)) { echo "Database created successfully"; } else { echo "Error creating database: " . mysqli_error($conn); } mysqli_close($conn); ?> Seite 12 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Datenbank Erstellen eine Tabelle z.B. Für Gäste CREATE TABLE Guests ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP ) Für jedes Feld in der Tabelle muss ein Datentyp definiert werden (http://www.w3schools.com/sql/sql_datatypes.asp) Seite 13 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Datentypen Ein kleiner Auszug: CHAR(size) Holds a fixed length string (can contain letters, numbers, and special characters). The fixed size is specified in parenthesis. Can store up to 255 characters VARCHAR(size) Holds a variable length string (can contain letters, numbers, and special characters). The maximum size is specified in parenthesis. Can store up to 255 characters. TEXT Holds a string with a maximum length of 65,535 characters BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data INT(size) -2147483648 to 2147483647 normal. 0 to 4294967295 UNSIGNED*. The maximum number of digits may be specified in parenthesis FLOAT(size,d) A small number with a floating decimal point. The maximum number of digits may be specified in the size parameter. The maximum number of digits to the right of the decimal point is specified in the d parameter DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The maximum number of digits may be specified in the size parameter. The maximum number of digits to the right of the decimal point is specified in the d parameter Seite 14 Web-basierte Anwendungssysteme WS 2016/17 Prof. Dr. Armin Lehmann MySQL-Attribute NOT NULL - Each row must contain a value for that column, null values are not allowed DEFAULT value - Set a default value that is added when no other value is passed UNSIGNED - Used for number types, limits the stored data to positive numbers and zero AUTO INCREMENT - MySQL automatically increases the value of the field by 1 each time a new record is added PRIMARY KEY - Used to uniquely identify the rows in a table. The column with PRIMARY KEY setting is often an ID number, and is often used with AUTO_INCREMENT Seite 15 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Befehle Daten in die Datenbank schreiben INSERT INTO table_name (spalte1, spalte2, spallte3,...) <?php … if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } $sql = "INSERT INTO nameDerDB (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]')"; if (mysqli_query($conn, $sql)) { … ?> Seite 16 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Befehle Daten aus Datenbank lessen SELECT column_name(s) FROM table_name ... $sql = "SELECT id, firstname, lastname FROM nameDerDB "; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // output data of each row while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } Seite 17 mysqli_close($conn); Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Befehle Daten aus Datenbank löschen DELETE FROM table_name WHERE some_column = some_value ... // sql to delete a record $sql = "DELETE FROM nameDerDB WHERE id=3"; if (mysqli_query($conn, $sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . mysqli_error($conn); } mysqli_close($conn); Seite 18 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17 MySQL-Befehle Daten in Datenbank aktualisieren UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value ... $sql = "UPDATE nameDerDB SET lastname='Doe' WHERE id=2"; if (mysqli_query($conn, $sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . mysqli_error($conn); } mysqli_close($conn); Seite 19 Prof. Dr. Armin Lehmann Web-basierte Anwendungssysteme WS 2016/17