Tutorials von Thomas Frei-Herrmann

[Start] [MySQL] [Connector] [Iterator] [Navigator] [Beschriftung] [Datum] [Bild] [Link] [IF] [Hinzugefügt] [Hinzufügen] [Geändert] [Ändern] [Gelöscht] [Löschen] [Mail] [Suchen] [Ergebnis]
[Drucken]

Datenbank NOF-PHP

Bild -
Foto hinzufügen

  • Das Objekt "Bild" ist ein Datenausgabeobjekt, das verwendet wird, um auf Abfrageergebnissen beruhende Bild-Datenfelder anzuzeigen. Geben Sie alternativen Text ein und legen Sie die gewünschten Abmessungen für Rahmen, Höhe und Breite fest.

     


Während der unendlichen Tests mussten wir feststellen, dass jeglicher Upload einer Datei ein
großes Sicherheitsrisiko sein kann, selbst wenn man das Upload von Dateien, wie z.B. .exe oder .php,  unterbindet.

Daher war Klaus2 so nett und hat mir ein tolles Script hierfür geschrieben, das den Upload ausschließlich für das Bild-Format JPG zulässt, welches dann auch überprüft wird und nochmals mittels .htaccess gegen Manipulationen geschützt ist. Weiter unten beschreibe ich das noch genauer.

Man sollte dennoch den Upload-Bereich für Fotos, genau wie den gesamten Administrator-Bereich, in einen durch  .htaccess geschützten Bereich unterbringen.


Ihr könnt dieses Datenbank-Feld ja z.B. "foto" nennen (so wie ich hier). Gebt diesem Feld eine ausreichende Länge, damit längere URL's auch rein passen (ich habe hier 100 Zeichen gewählt).

Ich zeige hier mal meine Seite “Ändern”. Das gleiche Feld “Formulardatei-Auswahl” fügt Ihr mit den gleichen Einstellungen auf der Seite “Hinzufügen” ein.

Ihr zieht Euch ein Feld “Formulardatei-Auswahl” für den Upload Eurer Fotos auf und nennt dieses bitte “DateiName”, wie in dem Bild unten zu erkennen, da wir diesen Namen für den “Post” Befehl im
Upload-Script angeben werden.

... weiterhin wollen wir auf der Seite “Ändern” auch bestimmen, ob ein bereits zugefügtes Foto
beibehalten, gelöscht oder geändert werden soll.

Dazu verwenden wir ein Feld “Kontrollkästchen”. Dieses Feld benennt Ihr nun bitte “behalten” und gebt unter “Wert:” > on ein, da wir diese beiden Variablen in einer “IF-Bedingung (später) ansprechen werden.

Wir ziehen vor dem Objekt “Aktualisieren” ein Objekt “IF-Bedingung” auf und gründen eine neue Variable unter “Form”, die wir “behalten” nennen, eben wie den Feldnamen unseres Formular-Feldes (oben).

Nun wählen wir die gerade gegründete Variable “Form.behalten” und fügen hinzu “ist nicht gleich” und schreiben dazu “on”. Also wenn der Wert “on” im Formularfeld nicht gewählt (angehakt) wurde...

... soll folgendes passieren: Das Foto soll angezeigt werden, da es noch vorhanden ist (“on” ist angehakt).

... ansonsten (“Else” Bedingung) ...

... soll das Foto nicht angezeigt werden (nicht markieren), da es nicht mehr vorhanden ist und abgehakt wurde. Beim Abhaken werden vorhandene Foto-Einträge in der Datenbank gelöscht und dementsprechend kann auch kein Foto angezeigt werden, daher das Datenank-Feld “foto” nicht mit markieren (auswählen).

Nun wird unsere “IF-Bedingung” noch mit einem “EndIf” (Ende dieser Bedingung) abgeschlossen.

 

Da wir ja bei den “Schaltflächen” unserer Formulare “Hinzufügen” und “Ändern” jeweils die Zielseite
angegeben haben (hier “added.php” und “changed.php”), fügen wir nun den “Upload-Code” in jede dieser
beiden Seite ein. Dazu klicken wir auf den Layout-Bereich jeder Seite und fügen den unten stehenden Code
in die Layout-HTML “Beginn der Seite” (also ganz oben) ein. Siehe unten den scrollbaren Code mit
Erklärungen.

Achtet dabei auf die korrekte relative Pfadangabe zu den Verzeichnissen. Hier (auf meiner Seite) ist MySQL das Stammverzeichnis dieses Projektes.

../../MySQL/sicher/bilder/
../../MySQL/sicher/temp/

Da ich hier aus einem anderen (geschützten Verzeichnis) uploade, sieht meine relative Pfadangabe zu dem Ordner (bilder) mit den Fotos wie oben aus (../../). Da ist dann natürlich eine individuelle Einstellung, entsprechend Eurer Verzeichnis-Struktur, nötig.

Die Verzeichnisse

./sicher/bilder/ sowie ./sicher/temp/ müsst Ihr natürlich vorher mit einem FTP-Programm händisch auf
dem Server anlegen.

Um nun noch eine Manipulation an den bereits hochgeladenen Bildern auszuschließen könnt und solltet Ihr noch folgende .htaccess (Code unten) erstellen und in das Verzeichnis:

./sicher/

hochladen.

# Letzte Änderung am 09.12.2009

# Diese .htaccess kommt nach  ./sicher/

# Abschalten der Schreibfehlerkorrektur
CheckSpelling Off

# Abschalten von CGI Includes Verzeichnislisten alternativer Inhalte
Options -ExecCGI -Includes -Indexes -MultiViews

# Grundsaetzlich nichts aus dem Verzeichnis anzeigen.
order deny,allow
deny from all

# Nur Dateien mit den unten aufgefuehrten Eigenschaften anzeigen.
# D.h. nur Dateien mit genau 14 Stellen der Zahlen 0 bis 9 plus .jpg
# Z.B. 12345678901234.jpg
# also die ersten 10 Stellen sind der Timestamp plus 4 Zufallszahlen plus .jpg

<Files ~ "^[0-9]{14}\.jpg$">
  allow from all
</Files>

Anmerkungen zu dem Script:

Ihr müsst darauf achten, dass die Verzeichnisse “bilder” und “temp” keinen Schreibschutz haben.

Voraussetzung für das Skript ist PHP ab Version 4.3.0 mit GDlib ab 2.0.28 und ausreichend Hauptspeicher (memory_limit) für die Bilder.

Was Euer PHP kann, könnt Ihr sehr einfach mit dem Befehl

phpinfo();

abfragen. Hierzu erstellt Ihr Euch eine kleine .php Datei mit folgendem Inhalt, die Ihr dann auf Euren
Web-Space kopiert...

<?php
 phpinfo();
?>

... wie das dann aussehen kann, zeigt dieses Beispiel meines Providers “1und1”.

Um Eure Fotos nun mittels des Objektes “Bild” einzubinden, zieht Ihr Euch zwischen den Iteratorten das Objekt “Bild” auf. Ihr wählt wieder Eure Datensatzgruppe und eben das Feld “foto”. Ich habe hier noch die Bild-Größe festgelegt (mit 90 x 90 Pixeln) und einen alternativen Text “Foto”.

Da dieses Datenfeld “foto” nun bei jedem Datensatz erscheinen würde (auch wenn manchen gar kein Foto zugeordnet wurde), würden alle Datenfelder ohne Foto ein rotes Kreuz (fehlendes Foto) anzeigen. Um dies zu verhindern, habe ich das Objekt “Foto” wieder in eine “IF-Bedingung” gelegt (“Wenn” Bedingung). Dadurch werden dann nur Fotos in den Datensätzen angezeigt, bei denen auch tatsächlich welche existieren.

nach oben

<< zurück zu “Datum”

weiter zu “Link” >>

diese Seite weiter empfehlen



Counter Statistik