PHP Übungsaufgabe 3

Werbung
PHP Übungsaufgabe 3
1/5
Doing Web Apps
PHP Übungsaufgabe 3
Werkzeuge
●
●
Text-Editor, beispielsweise Notepad++
Webserver mit aktiviertem PHP Modul + MySQL-Datenbank
Unterlagen
●
●
●
SelfHTML
PHP API Handbuch
Alle Dokumente des Seminars
Ziele
●
●
●
Umgang mit Formular-Daten
Grundlegender Umgang mit dem MySQLi Klassen
Erstellen einer kleinen datenbankbasierten Anwendung
Hinweis: Lösen Sie Probleme stets bewusst selbst. Nur so bauen Sie ein Selbstverständnis
für die Sprache, deren Eigenheiten und den damit interagierenden Medien auf.
© 2012 Rüdiger Marwein
1
PHP Übungsaufgabe 3
2/5
1.Vorbereitung
1. Vorbereitung
1. Laden Sie die Übungsdateien (http://keinerweiss.de/php-seminar/ubungen)
herunter und entpacken Sie sie in Ihr „htdocs“ Verzeichnis.
2. Importieren Sie die Datenbank zum Übungsblatt (gallery.sql in ZIP) über
phpMyAdmin in eine neue Datenbank „uebung3“. Achten Sie auf die Kollation
„utf8_general_ci“.
3. Übertragen Sie Ihre eigenen Datenbank-Verbindungsdaten in die Datei
„config.php“
Etwas HTML und PHP-Code ist schon vorgegeben.
Wichtige Hinweise:
config.php:
classes/GalleryHelper.php:
index.php:
upload.php:
admin.php:
Datenbank-Variable:
Beispiel-Nutzung:
Datenbank-Verbindungsdaten und Verbindungsaufbau.
Klasse für eigene Funktionen
Anzeige der Galerie
Neues Bild hochladen
Bilder freischalten oder löschen
$GLOBALS['DB']
$GLOBALS['DB']->query( … );
2. Bildergalerie
Datenbank:
gallery
•
•
•
•
•
•
•
id
filename
mimetype
upload_date
title
description
status (pending / accepted)
3. Upload-Formular
Bearbeiten Sie die Datei „upload.php“
Beachten Sie das Attribut „enctype“ am <form> Tag. Das ist für Uploads zwingend
notwendig.
Bild, Titel und Beschreibung sind Pflichtfelder. Sind sie nicht ausgefüllt, muss eine
Fehlermeldung ausgegeben werden und die vom Benutzer eingegebenen Werte müssen
wieder in den Feldern zu sehen sein. Das Bild muss im Fehlerfall erneut zugewiesen
© 2012 Rüdiger Marwein
2
3.Upload-Formular
PHP Übungsaufgabe 3
3/5
werden.
4. Bild speichern
Bearbeiten Sie die Datei „upload.php“ und „classes/GalleryHelper.php“.
Sind alle Daten vorhanden wird zunächst die Methode „storeUploadedImage“ der Klasse
GalleryHelper verwendet um das Bild abzuspeichern.
Das Bild muss in den Ordner „uploads“ gespeichert werden. Übergeben Sie den
vollständigen Pfad.
Hinweis: dirname(__FILE__) liefert den Pfad zum Verzeichnis der aktuellen Datei.
Hinweis: nutzen Sie die PHP-Funktion „move_uploaded_file“.
Das Abspeichern darf nicht durchgeführt werden falls
•
das „Bildformat“ nicht angezeigt werden kann (bspw TIFF, BMP, XLSX, … )
•
eine Upload-Fehler vorliegt
•
keine Datei hochgeladen wurde
•
die Dateigröße 0 Byte ist
Geben Sie der Datei einen eindeutigen Namen (damit nicht evtl existierende Dateien
überschrieben werden).
Hinweis: nutzen Sie die PHP-Funktion „tempnam“. Beachten Sie den Rückgabewert.
Falls die Datei nicht gespeichert wurde, muss eine leere Zeichenkette zurückgegeben
werden, ansonsten der neue Dateiname (ohne Pfad).
Hinweis: nutzen Sie die PHP-Funktion „basename“ um an den reinen Dateinamen aus
einem Pfad zu gelangen.
Einsatz wie: $filename = $galleryHelper->storeUploadedImage( … );
5. Datensatz speichern
Bearbeiten Sie die Datei „upload.php“ und „classes/GalleryHelper.php“.
Hat der Upload geklappt, wird die Methode „saveNewEntry“ der Klasse GalleryHelper
verwendet, um einen neuen Datensatz in die Datenbanktabelle „gallery“ zu speichern.
Schreiben Sie in das Feld „status“ den Wert „pending“.
Schreiben Sie in das Feld „mimetype“ den vom Browser in $_FILES['image'] gesendeten
Mimetype. Bspw. „image/jpeg“.
© 2012 Rüdiger Marwein
3
5.Datensatz speichern
PHP Übungsaufgabe 3
4/5
Schreiben Sie in das Feld „upload_date“ den aktuellen Unix-Timestamp.
Hinweis: verwenden Sie die Funktion „time“ für den aktuellen Unix-Timestamp.
War auch der Speicher-Vorgang erfolgreich, wird die Variable „$success“ auf TRUE
gesetzt und dem Nutzer somit eine Erfolgsmeldung ausgeben.
Notiz: Speichern Sie den Dateinamen ohne den Pfad „uploads/“ o.ä.
6. Die Galerie anzeigen
Bearbeiten Sie die Datei „index.php“ und „classes/GalleryHelper.php“.
Es dürfen nur freigegebene Datensätze angezeigt werden. Dafür wird die Methode
„getAcceptedEntries“ der Klasse GalleryHelper verwendet.
Rückgabe ist ein Array aller freigegebenen Bilder-Datensätze.
Geben Sie das Upload-Datum in gut lesbarem Format aus (16.11.2012 – 17:00).
Hinweis: Verwende Sie die Funktion „date“.
Hinweis: Denken Sie bei der Ausgabe des Bild-Pfades daran, dass der Dateiname ohne
Verzeichnispfad in der Datenbank steht.
7. Bilder freigeben
Damit niemand Bilder von LOLcats oder schlimmeres hochlädt, müssen die hochgeladen
Bilder erstmal geprüft werden.
Bearbeiten Sie die Datei „admin.php“ und „classes/GalleryHelper.php“.
Es wird eine Liste der Bilder angezeigt, die den Status „pending“ haben.
Dafür wird die Methode „getPendingEntries“ der Klasse GalleryHelper verwendet.
Rückgabe ist ein Array aller freigegebenen Bilder-Datensätze.
Jedes Bild ist in ein Formular eingeschlossen, so dass es ermöglicht ist, jedes Bild einzeln
freizuschalten oder zu löschen.
Wird der Button „Freigeben“ gedrückt (action=accepted) wird das Bild mit der
entsprechenden ID in der Datenbank-Tabelle „gallery“ aktualisiert (UPDATE), so dass
„status“ des Bildes fortan „accepted“ lautet.
Wird der Button „Ablehnen“ gedrückt (action=delete) wird das Bild mit der
entsprechenden ID in der Datenbank-Tabelle „gallery“ gelöscht (DELETE).
Das Bild im Ordner „uploads“ muss bei dieser Aktion ebenfalls gelöscht werden.
© 2012 Rüdiger Marwein
4
7.Bilder freigeben
PHP Übungsaufgabe 3
5/5
Vervollständigen Sie die Methoden „acceptEntry“ und „deleteEntry“ der Klasse
„GalleryHelper“.
8. Bilder sortieren
Bearbeiten Sie die Datei „index.php“ und „classes/GalleryHelper.php“.
Erweitern sie die Methode „getAcceptedEntries“ der Klasse GalleryHelper um einen
optionalen ersten Parameter $sorting (standardmäßig leere Zeichenkette).
Ist der erste Parameter gesetzt (Zeichenkette länger als 0 Zeichen) wird er zur Sortierung
in der SQL-Anweisung verwendet.
SELECT … FROM … WHERE … ORDER BY [sorting-Feld]
Die Liste der Bilder ist nach Titel und Datum sortierbar.
9. Frage
•
Hat Ihre Anwendung noch Sicherheitslücken?
10. Wer es sich zutraut ...
Erzeugen Sie bereits beim Upload ein Miniatur-Bild (Thumbnail) des Orginals und
speichern es separat ab.
Dafür werden Sie u.a. folgende Funktionen benötigen
•
imagecopyresampled
•
imagecreatefromjpeg / gif / png
•
imagecopyresampled
Der Algorithmus zur Skalierung mit gleichbleibendem Seitenverhältnis ist:
neue maxminale breite gegeben
neue maximale höhe gegeben
aspect ratio = orginal breite / orginal höhe
wenn landscape-format:
thumb breite = neue maxminale breite
thumb höhe = neue maxminale breite / aspect ratio
wenn portrait-format:
thumb höhe = neue maximale höhe
thumb breite = neue maximale höhe * aspect ratio
Verwenden Sie das Miniatur-Bild für eine Übersicht aller Bilder.
© 2012 Rüdiger Marwein
5
Herunterladen