Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Coder Welten
 
 

 

 

CSV: Ein erweitertes Upload-Script für Bilder

Beschreibung eines erweiterten Upload-Scripts

Übersicht » Einführung CSV

Tutorial mit Beispielen für eine Bildergalerie:

  1. Kleines Upload-Script (ein einfaches PHP-Upload-Script für Images)
  2. Kleines Galerie-Script (Bespiel für ein einfaches PHP-Galerie-Script)
  3. Demo kleine Galerie (Demo einer kleinen Bildergalerie)
  4. Erweitertes Upload-Script (Erzeugung von Vorschaubildern inklusive)
  5. Thumbnails Klasse (eine Klasse für die Erzeugung von Thumbnails)
  6. Erweitertes Galerie-Script (Bespiel für ein erweitertes PHP-Galerie-Script)
  7. Demo erweiterte Galerie (Demo einer erweiterten Bildergalerie)

Einsatz und Verwendung

Das auf dieser Seite vorgestellte Upload-Script besitzt gegenüber dem ersten kleinen und noch recht ein­fachen Upload-Script eine Reihe von nützlichen Er­weite­rungen. Zu diesen Erweiterungen gehört die automatische Generierung von Vorschaubildern, so­genannten Thumbnails.

Die Passwortabfrage entspricht nicht mehr einem neueren Stand, da selbiges nur noch verschlüsselt gespeichert werden sollte.


Erweitertes Upload-Script (upload.php):

<?php
ini_set("session.use_trans_sid", "0");
session_start();                // Session starten
error_reporting(E_ALL);         // Sollte nach der Erprobung auf 0 gesetzt werden.

$file   = "galerie.csv";        // Name (und Pfad) der CSV
$usernm = "admin";              // Sollte geändert werden
$passwd = "admin";              // hier ein sicheres Passwort wählen
$sessin = "Rosen";              // Sollte geändert werden
$sessiw = "Dornen";             // Sollte geändert werden
$klasse = "thumbs-klasse.php";  // Name (und Pfad) des Scripts mit der Klasse

if (file_exists($klasse)) require_once($klasse);        // die Klasse einbinden

/*-- Bekanntmachung von Variablen --------------------------------------------*/

$bildupl = false;
$nochnet = true;
$fehlerf = true;
$fehlerm = true;
$fehlerg = true;

/*-- Formatierung von Datum und Zeit -----------------------------------------*/

date_default_timezone_set("Europe/Berlin");
$amundum = date("Y-m-d H:i:s");

/*-- Filter für die vom Formular übermittelten Daten und deren Auswertung ----*/

function Filter($filter) {

    $filter = preg_replace("/[^a-z0-9\s._-]/i", "", $filter);
    return $filter;
}

if (isset($_POST["vermerk"]) and !empty($_POST["vermerk"])) {
    $vermerk = Filter(trim($_POST["vermerk"]));
}
else {$vermerk = false;}

if (isset($_POST["bemerke"]) and !empty($_POST["bemerke"])) {
    $bemerke = Filter(trim($_POST["bemerke"]));
}
else {$bemerke = false;}

/*-- Prüfung der eingehenden Daten auf Vollständigkeit -----------------------*/

if (isset($_POST["upload"]) and $_FILES["images"]["error"] == 0)  {

    if ($vermerk !== false and $bemerke !== false) {

        $imagef = $_FILES["images"];
        $imsize = $imagef["size"];
        $uplimg = getimagesize($imagef["tmp_name"]);
        $lfdnr  = count(scandir("images/")) -1;

        /*---------------------------------------------------------------------
         Überprüfung des Formats der übermittelten File und Überprüfung auf
         unerlaubte Zeichen sowie auf Überschreitung der Größe der Datei in
         Bytes. 102400 Byte entsprechen 100 kB.
         ----------------------------------------------------------------------
        */
        if ($uplimg["mime"] == "image/jpeg" or $uplimg["mime"] == "image/png") {

            $imagen = trim($imagef["name"]);
            $eingan = array("Ä","ä","Ö","ö","Ü","ü","ß"," ");
            $ausgan = array("ae","ae","oe","oe","ue","ue","ss","-");
            $imagen = strtolower(str_replace($eingan, $ausgan, $imagen));
            $pruefe = preg_replace("/[a-z0-9_-]+?\.(jpg|png)/i", "", $imagen);

            if (strlen($pruefe) === 0 and $imsize < 102400) {

                $imagen = preg_replace("/\./", "-0".$lfdnr.".", $imagen);
                move_uploaded_file($imagef["tmp_name"], "images/".$imagen);

                /*-------------------------------------------------------------
                 Erzeugen und Instanziieren eines Objektes KleineBilder für die
                 Generierung von Vorschaubildern, Zuweisung der Höhe und Breite
                 des hochgeladenen Bildes, Pfade von Bildern und Thumbnails.
                 --------------------------------------------------------------
                */
                $generiere = new KleineBilder();
                $generiere->oldw   = $uplimg[0];
                $generiere->oldh   = $uplimg[1];
                $generiere->mime   = $uplimg["mime"];
                $generiere->bilder = "images/".$imagen;
                $generiere->thumbs = "thumbs/".$imagen;
                $generiere->generiereThumbs();

                /*-- Daten für CSV aufbereiten -------------------------------*/

                $daten = "\"".$lfdnr.            "\";".
                         "\"".$vermerk.          "\";".
                         "\"".$amundum.          "\";".
                         "\"".$generiere->bilder."\";".
                         "\"".$generiere->oldw.  "\";".
                         "\"".$generiere->oldh.  "\";".
                         "\"".$generiere->thumbs."\";".
                         "\"".$generiere->neuw.  "\";".
                         "\"".$generiere->neuh.  "\";".
                         "\"".$bemerke."\"\n";

                /*-- Daten in CSV schreiben ----------------------------------*/

                file_put_contents($file, $daten, FILE_APPEND|LOCK_EX);

                /*-- Formular leere Werte zuweisen ---------------------------*/

                $vermerk = "";
                $bemerke = "";
                $bildupl = true;

            /*-- Für die Ausgabe von eigenen Fehlermitteilungen --------------*/
            }
            else {$fehlerg = false;}
        }
        else {$fehlerm = false;}
    }
    else {$fehlerf = false;}
}
else {$nochnet = false;}

?>
<!DOCTYPE html>
<html>

<head>
<title>Formular für den Upload von Bildern</title>
<link rel="stylesheet" type="text/css" href="galerie.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex,nofollow">
</head>

<body style="text-align:center">
<h1>Formular für den Upload von Bildern</h1>
<p class="ctext">Ein kleines Script mit einem Formular</p>
<div class="forml">
<?php

/*-----------------------------------------------------------------------------
 Setzen von Sessionvariablen und Zuweisung Werten, falls Username und Passwort
 korrekt übermittelt wurden. Einblendung des eigentlichen Formulars.
 ------------------------------------------------------------------------------
*/
if (isset($_POST["galerie"]) and $_POST["username"] == $usernm and $_POST["password"] == $passwd) {

    $_SESSION["sessiname"] = $sessin;
    $_SESSION["sessiword"] = $sessiw;
}
if (isset($_SESSION["sessiname"]) and $_SESSION["sessiname"] == $sessin and $_SESSION["sessiword"] == $sessiw) {

    echo "\t<form action=\"upload.php\" method=\"post\" enctype=\"multipart/form-data\" accept-charset=\"utf-8\">\n".
    "\t<p class=\"fontg magti ctext\">Vermerke eintragen und Image auswählen:</p>\n".
    "\t<p class=\"wi289 ctext fontg paddl padmb\">Quelle und/oder Urheber:<br>\n".
    "\t<input type=\"text\" name=\"vermerk\" value=\"".$vermerk."\" size=\"30\"></p>\n".
    "\t<p class=\"wi289 ctext fontg paddl padmb\">Bildtitel:<br>\n".
    "\t<input type=\"text\" name=\"bemerke\" value=\"".$bemerke."\" size=\"30\"></p>\n".
    "\t<p class=\"wi292 ctext fontg padmb\">Image auswählen:<br>\n".
    "\t<input type=\"file\" name=\"images\" accept=\"image/*\"></p>\n".
    "\t<p class=\"wi292 ctext padmb\"><input type=\"reset\" value=\" Reset \">\n".
    "\t<input type=\"submit\" name=\"upload\" value=\"Hochladen\"></p>\n".
    "\t</form>\n";
}
else {
    /*-- Formular für Einwahl wird nur bis zu < x-mal angezeigt --------------*/

    if (isset($_SESSION["szaehler"]) and  $_SESSION["szaehler"] < 10){

        echo "\t<form action=\"".basename($_SERVER["PHP_SELF"])."\" method=\"post\" accept-charset=\"utf-8\">\n".
        "\t<p class=\"ctext\"><input type=\"text\" name=\"username\" size=\"28\"></p>\n".
        "\t<p class=\"ctext\"><input type=\"password\" name=\"password\" size=\"28\"></p>\n".
        "\t<p class=\"ctext\"><input type=\"submit\" name=\"galerie\" value=\"Senden\"></p>\n".
        "\t</form>\n";
    }
    /*-- Ausgabe einer Mitteilung bei mehr als x-Fehlversuchen ---------------*/

    elseif (isset($_SESSION["szaehler"]) and  $_SESSION["szaehler"] >= 10) {

        echo "<p class=\"ctext\">Das war bereits der ".$_SESSION["szaehler"].". erfolglose Versuch!<br>\n".
             "Beehren Sie uns zu einem späteren <br>\nZeitpunkt erneut mit einem Besuch.</p>\n";
    }
    /*-- Formular für Einwahl beim ersten Besuch der Seite aufrufen ----------*/
    else {
        echo "<p class=\"ctext\"><a href=\"".basename($_SERVER["PHP_SELF"])."\">Formular aufrufen</a></p>\n";
        $_SESSION["szaehler"] = 0;
    }
}
$_SESSION["szaehler"]++;

?>
</div>
<div class="seite">
<?php
if ($bildupl === true)     echo "Das hat wohl geklappt.<br>\n";
if ($nochnet === false)    echo "Es wurde noch nichts eingegen oder ausgewählt.<br>\n";
if ($fehlerf === false)    echo "Es wurde keine Quelle und/oder kein Titel für das Bild angegeben.<br>\n";
if ($fehlerm === false)    echo "Es scheint sich um kein JPG oder PNG zu handeln.<br>\n";
if ($fehlerg === false)    echo "Es handelt sich um kein JPG oder PNG oder das Bild ist zu groß.<br>\n";
?>
</div>
</body>
</html>

Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen