Seite 1 von 2

Bildupload funktioniert nicht richtig

Verfasst: Do 09.Jun, 2011 10:51
von Holger
Nachdem ich das Problem lösen konnte (vielen Dank für alle Hinweise!)
http://www.oxpus.de/viewtopic.php?f=14&t=9791
habe ich noch ein kleineres Problem:
Ich gebe die Daten hier ein
foerslag.php
Die Daten werden an
lagra.php
übergeben und in der DB gespeichert und nochmal zur Bestätigung angezeigt.

Code: Alles auswählen

   mysql_query("INSERT INTO mat_restaurant (`name`, `type`, `ort`, `telefon`, `adress`, `speciality`, `mattider`, `createdby`, `hemsida`, `parkering`, `kommentar`) VALUES
    ('$name', '$type', '$ort', '$telefon', '$adress', '$speciality', '$mattider', 'Holger', '$hemsida', '$parkering', '$kommentar')
    ") || die(mysql_error());

    $mat_id = mysql_insert_id();
Danach übergebe ich per Link die ID an upload.php, z.B.
upload.php?mat_id=24

Code: Alles auswählen

echo('<a href="upload.php?mat_id='.$mat_id.'">Klicka här</a> för att ladda upp bilder.');
In upload.php habe ich ein Script, mit dem ich Ordner anlegen und Dateien hochladen kann.
Ich möchte einen Ordnernamen = ID anlegen und dort die Bilder reinladen.
Das geht, wenn ich die ID statisch eingebe, aber nicht per $mat_id
Irgendwo habe ich einen kleinen Fehler und finde ihn nicht.

Code: Alles auswählen

<?php
    error_reporting(E_ALL);

    // Funktionen definieren
    // -----------------------------------------------
    function checkUpload($myFILE, $file_extensions, $mime_types, $maxsize)
    {
        $errors = array();
        // Uploadfehler prüfen
        switch ($myFILE['error']){
            case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".ini_get('upload_max_filesize')."</b> ist.";
                    break;
            case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
                    break;
            case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
                    break;
            case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
                    return $errors;
                    break;
            default : break;
        }
        // MIME-Type prüfen
        if(count($mime_types)!=0 AND !in_array(strtolower($myFILE['type']), $mime_types)){
            $fehler = "Falscher MIME-Type (".$myFILE['type'].").<br />".
                      "Erlaubte Typen sind:<br />\n";
            foreach($mime_types as $type)
                $fehler .= " - ".$type."\n<br />";
            $errors[] = $fehler;
        }
        // Dateiendung prüfen
        if($myFILE['name']=='' OR (count($file_extensions)!=0 AND !in_array(strtolower(getExtension($myFILE['name'])), $file_extensions))){
            $fehler = "Falsche Dateiendung (".getExtension($myFILE['name']).").<br />".
                      "Erlaubte Endungen sind:<br />\n";
            foreach($file_extensions as $extension)
                $fehler .= " - ".$extension."\n<br />";
            $errors[] = $fehler;
        }
        // Dateigröße prüfen
        if($myFILE['size'] > $maxsize){
            $errors[] = "Datei zu groß (".sprintf('%.2f',$myFILE['size']/(1024*1024))." MB).<br />".
                        "Erlaubte Größe: ".$maxsize/(1024*1024)." MB\n";
        }
        return $errors;
    }

    // gibt die Dateiendung einer Datei zurück
    function getExtension ($filename)
    {
        if(strrpos($filename, '.'))
             return substr($filename, strrpos($filename, '.')+1);
        return false;
    }

    // erzeugt einen Zufallswert
    function getRandomValue()
    {
        return substr(md5(rand(1, 9999)),0,8).substr(time(),-6);
    }

    // erzeugt einen neuen Dateinamen aus Zufallswert und
    // Dateiendung
    function renameFile ($filename)
    {
        return  getRandomValue().".".getExtension($filename);
    }

    // Werte zur Dateiprüfung initialisieren
    // -----------------------------------------------
    $maxsize = 2*1024*1024;
    $file_extensions = array('jpg', 'jpeg', 'jpe', 'gif', 'png');
    $mime_types = array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/x-png');

    // Upload-Ordner definieren
    // -----------------------------------------------
    $mat_id = $_POST['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "/$pfad/$mat_id/";

    // Anzahl Dateifelder festlegen
    // -----------------------------------------------
	$anzahl_dateifelder = 5;

    // Beginn des Skriptes
    // -----------------------------------------------

    // Falls der Benutzer auf "Upload" gedrückt hat,
    // werden die Dateien überprüft
    if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){

		mkdir("$pfad/$mat_id",0777);

        // jede Datei einzeln testen
        for($i=0; $i<$anzahl_dateifelder; $i++){
            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];

            // Fehlerarray erzeugen
            $errors = array();

            $errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
            if(count($errors)){
                echo "<p>\n".
                     "Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n";
                foreach($errors as $error)
                    echo $error."<br />\n";
                echo "</p>\n";
            }
            else {
                do {
                    $neuer_name = renameFile($myFILE['name']);
                } while(file_exists($ordner.$neuer_name));
                if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
                     echo "<p>\n".
                          "Die ".($i+1).". Datei (".$myFILE['name'].") wurde erfolgreich gespeichert.<br />\n".
                          "</p>\n";
                }
                else{
                     echo "<p>\n".
                          "Die Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n".
                          "Es ist ein Upload-Fehler aufgetreten.<br />\n".
                          "Bitte versuchen Sie es später erneut.<br />\n".
                          "<br />\n".
                          "Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
                          "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
                          "</p>\n";
                }
            }
        }
        echo "<p>\n".
             "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
             "</p>\n";
    }
    // Beim ersten Aufruf des Skriptes wird das
    // Upload-Formular angezeigt
    else{
        echo "<h1>Laden Sie mehrere Bilder hoch!</h1>\n";
        echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
        foreach($file_extensions as $extension)
            echo " - ".$extension."\n<br />";
        echo "<h2>Erlaubte Dateigröße:</h2>\n";
        echo " - maximal ".($maxsize/(1024*1024))." MB\n<br />";
        echo " <form ".
             "action=\"".$_SERVER['PHP_SELF']."\" ".
             "method=\"post\" ".
             "enctype=\"multipart/form-data\">\n";
        echo "  <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
        for($i=0; $i<$anzahl_dateifelder; $i++){
            echo "  <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
            echo "  <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
            echo "  <br />\n";
        }
        echo "  <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
        echo " </form>\n";
    }
?>
Ich vermute, der Fehler liegt hier:

Code: Alles auswählen

    // Upload-Ordner definieren
    // -----------------------------------------------
    $mat_id = $_POST['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "/$pfad/$mat_id/";
und/oder hier:

Code: Alles auswählen

    if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){

		mkdir("$pfad/$mat_id",0777);
Sieht jemand hier einen offensichtichen Fehler?

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 09.Jun, 2011 10:55
von Holger
Eine weitere Info: so wie es jetzt ist, werden die Bilder hochgeladen, aber es wird kein Ordner angelegt und die hochgelandenen Bilder liegen direkt im Ordner "bilder".

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 09.Jun, 2011 12:04
von Holger
Mit

Code: Alles auswählen

    $mat_id = $_GET['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "bilder/$mat_id/";
    $ordner2 = "/$pfad/$mat_id/";
    mkdir($ordner2);
    chmod($ordner2, 0777);
konnte ich den Ordner anlegen und CHMOD777 einstellen. Soweit so gut.
Aber die Datei wird nicht in den Ordner geladen.

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 09.Jun, 2011 19:38
von oxpus
Hi,

du bist sicher, dass

Code: Alles auswählen

$_FILES['Datei']['name'][$i]
so korrekt ist, wo du im HTML-Formular den Namen des Input-Feldes mit

Code: Alles auswählen

Datei[".$i."]
benannt hast?

Wäre dann nicht eher

Code: Alles auswählen

$_FILES['Datei'][$i]['name']
richtig?

Im Zweifel einfach mal $_FILES mit

Code: Alles auswählen

echo print_r($_FILES);
anzeigen lassen, dann siehst du, wie das Array aufgebaut ist.

;)

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 09.Jun, 2011 20:21
von Holger
Danke! Werde ich testen!

Re: Bildupload funktioniert nicht richtig

Verfasst: Mi 15.Jun, 2011 13:03
von Holger
Hm, gilt das oben nicht für alle hier?

Code: Alles auswählen

            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];
^2

Re: Bildupload funktioniert nicht richtig

Verfasst: Mi 15.Jun, 2011 13:19
von Holger
Mit

Code: Alles auswählen

                $myFILE['name'] = $_FILES['Datei'][$i]['name'];
                $myFILE['type'] = $_FILES['Datei']['type'][$i];
                $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
                $myFILE['error'] = $_FILES['Datei']['error'][$i];
                $myFILE['size'] = $_FILES['Datei']['size'][$i];
bekomme ich
Die 1. Datei () konnte nicht gespeichert werden.
Falsche Dateiendung ().
Erlaubte Endungen sind:
- jpg
- jpeg
- jpe
- gif
- png
Der Ordner wird aber angelegt.


Und mit

Code: Alles auswählen

            $myFILE['name'] = $_FILES['Datei'][$i]['name'];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];
            echo print_r($_FILES);
bekomme ich:
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1

Die 1. Datei () konnte nicht gespeichert werden.
Falsche Dateiendung ().
Erlaubte Endungen sind:
- jpg
- jpeg
- jpe
- gif
- png

Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1

Die 2. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1

Die 3. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1

Die 4. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1

Die 5. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.

Re: Bildupload funktioniert nicht richtig

Verfasst: Mi 15.Jun, 2011 13:52
von Holger
Mit

Code: Alles auswählen

            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];
            echo print_r($_FILES);
wir der Ordner angelegt, und die Datei eine Ebene höher gespeichert, also nicht im Ordner. Das ist das einzige jetzt ...

Re: Bildupload funktioniert nicht richtig

Verfasst: Mi 15.Jun, 2011 16:31
von oxpus
Holger hat geschrieben:Hm, gilt das oben nicht für alle hier?

Code: Alles auswählen

            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];
^2
Ja natürlich! Die erste Zeile hatte ich nur als Beispiel genannt ;)
Also so ist das korrekt:

Code: Alles auswählen

            $myFILE['name'] = $_FILES['Datei'][$i]['name'];
            $myFILE['type'] = $_FILES['Datei'][$i]['type'];
            $myFILE['tmp_name'] = $_FILES['Datei'][$i]['tmp_name'];
            $myFILE['error'] = $_FILES['Datei'][$i]['error'];
            $myFILE['size'] = $_FILES['Datei'][$i]['size'];

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 16.Jun, 2011 08:47
von Holger
Wenn ich das ändere dann bekomme ich Falscher MIME-Type (). beim Upload.
Mit der alten version hat der Upload geklappt, nur wird der Pfad zum Ordner nicht berücksichtigt.

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 16.Jun, 2011 16:48
von oxpus
Deine Version wäre aber unlogisch.
Hast du denn immer eine feste Anzahl Bilder, die du auf einmal hochladen willst?
Wenn ja, wäre es besser, du würdest im HTML-Formular kein Array als Feldnamen verwenden, sondern feste Nummern.
Also z. B. Datei_1, Datei_2, Datei_3...
Dann könntest du in einer Schleife von x bis y die Werte aus $_FILES auslesen mit

Code: Alles auswählen

$_FILES['Datei_' . $i]['name']
um nur ein Beispiel zu nennen (gilt dann natürlich für alle Werte von $_FILES).
Dann wäre das Prpblem mit einer sauberen Zuordnung schon einmal Geschichte.

Warum verwendest du beim Ordnernamen allerdings den absoluten Pfad und nicht den relativen vom Script aus?
Nur mal so in den Raum geworfen...

Mach doch mal ein

Code: Alles auswählen

echo $order.neuer_name;
vor der Zeile

Code: Alles auswählen

                    if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
Da müsste wenn dann der korrekte Pfad enthalten sein.
Wenn dort noch eine Verzeichnisebene fehlt, dann ist vielleicht $mat_id leer?!?

Re: Bildupload funktioniert nicht richtig

Verfasst: Do 16.Jun, 2011 19:59
von Holger
Aber mit $mat_id wird korrekt ein Ordner angelegt, mit der korrekten Nummer:

Code: Alles auswählen

    $mat_id = $_GET['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "bilder/$mat_id/";
    $ordner2 = "/$pfad/$mat_id/";
    mkdir($ordner2);
    chmod($ordner2, 0777);
Ich will ja mit der ID später den Ordner auslesen um auf der Index-Seite ein Bild und auf der Detail-Seite alle Bilder anzuzeigen, das klappt auch schon.
Nur das Bild-im-Ordner-Speichern funktionert nicht.
Das Bild wird also hier abgelegt:
var/www/vhosts/maskinisten.net/httpdocs/mat/bilder
und nicht hier
var/www/vhosts/maskinisten.net/httpdocs/mat/bilder/$mat_id

Re: Bildupload funktioniert nicht richtig

Verfasst: Fr 17.Jun, 2011 11:38
von oxpus
Deswegen solltest du ja das echo ausführen, ob der Pfad dann noch vorhanden ist (und vollständig ist), wenn die Pfadangabe für das verschieben der Bilddatei verwendet wird.
Nicht, dass $mat_id dann leer ist und damit das Bild wie du bereits nun schon mehrfach erwähntest im falschen Ordner landet...

Re: Bildupload funktioniert nicht richtig

Verfasst: Fr 17.Jun, 2011 13:31
von Holger
Ok, mit

Code: Alles auswählen

echo $order.$neuer_name;
bekomme ich
08e6bea8309952.jpg

Die 1. Datei (609710_0428756.jpg) wurde erfolgreich gespeichert.
Da fehlt also der Ordnername


Aber mit

Code: Alles auswählen

    $mat_id = $_GET['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "bilder/$mat_id/";
    $ordner2 = "/$pfad/$mat_id/";
echo"$ordner<br />";
echo"$ordner2<br />";
Bekomme ich beim Aufrufen des Skriptes angezeigt:
bilder/28/
/var/www/vhosts/maskinisten.net/httpdocs/mat/bilder/28/
Kann der Fehler sein, dass die $mat_id beim Klicken auf Upload nicht weitergegeben wird?

Code: Alles auswählen

    // Upload-Ordner definieren
    // -----------------------------------------------
    $mat_id = $_GET['mat_id'];
    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
    $ordner = "bilder/$mat_id/";
    $ordner2 = "/$pfad/$mat_id/";
echo"$ordner<br />";
echo"$ordner2<br />";
mkdir($ordner2);
chmod($ordner2, 0777);

    // Anzahl Dateifelder festlegen
    // -----------------------------------------------
	$anzahl_dateifelder = 5;

    // Beginn des Skriptes
    // -----------------------------------------------

    // Falls der Benutzer auf "Upload" gedrückt hat,
    // werden die Dateien überprüft
    if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){

        // jede Datei einzeln testen
        for($i=0; $i<$anzahl_dateifelder; $i++){
            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];
            // echo print_r($_FILES);

            // Fehlerarray erzeugen
            $errors = array();

            $errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
            if(count($errors)){
                echo "<p>\n".
                     "Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n";
                foreach($errors as $error)
                    echo $error."<br />\n";
                echo "</p>\n";
            }
            else {
                do {
                    $neuer_name = renameFile($myFILE['name']);
                } while(file_exists($ordner.$neuer_name));
                echo $order.$neuer_name;
                if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
                     echo "<p>\n".
                          "Die ".($i+1).". Datei (".$myFILE['name'].") wurde erfolgreich gespeichert.<br />\n".
                          "</p>\n";
                }
                else{
                     echo "<p>\n".
                          "Die Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n".
                          "Es ist ein Upload-Fehler aufgetreten.<br />\n".
                          "Bitte versuchen Sie es später erneut.<br />\n".
                          "<br />\n".
                          "Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
                          "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
                          "</p>\n";
                }
            }
        }
        echo "<p>\n".
             "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
             "</p>\n";
    }
    // Beim ersten Aufruf des Skriptes wird das
    // Upload-Formular angezeigt
    else{
        echo "<h1>Laden Sie mehrere Bilder hoch!</h1>\n";
        echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
        foreach($file_extensions as $extension)
            echo " - ".$extension."\n<br />";
        echo "<h2>Erlaubte Dateigröße:</h2>\n";
        echo " - maximal ".($maxsize/(1024*1024))." MB\n<br />";
        echo " <form ".
             "action=\"".$_SERVER['PHP_SELF']."\" ".
             "method=\"post\" ".
             "enctype=\"multipart/form-data\">\n";
        echo "  <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
        for($i=0; $i<$anzahl_dateifelder; $i++){
            echo "  <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
            echo "  <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
            echo "  <br />\n";
        }
        echo "  <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
        echo " </form>\n";
    }

Re: Bildupload funktioniert nicht richtig

Verfasst: Fr 17.Jun, 2011 17:49
von oxpus
Wo kommt denn der Input für die Zeile

Code: Alles auswählen

$mat_id = $_GET['mat_id'];
her?
Soll das aus dem Upload-Formular kommen oder aus einer URL, mit der das Formular aufgerufen wird?

Re: Bildupload funktioniert nicht richtig

Verfasst: Sa 18.Jun, 2011 19:32
von Holger
Das kommt aus der vorhergehenden Seite, die per URL das Upload-Skript mit dem mat_id versieht.
Also a href= ... .php&mat_id=27 nur als Beispiel.
Das klappt auch, der Ordner wird z.B. korrekt angelegt.
Und auch

Code: Alles auswählen

echo"$ordner<br />";
echo"$ordner2<br />";
gibt das Gewünschte aus.

Re: Bildupload funktioniert nicht richtig

Verfasst: Sa 18.Jun, 2011 22:19
von oxpus
Äh, wie kann der Ordner korrekt angelegt werden, wenn $mat_id nicht gesetzt ist?!?

Re: Bildupload funktioniert nicht richtig

Verfasst: So 19.Jun, 2011 11:52
von Holger
Jute Frage ...
Aber wenn ich ein Bild hochlade wird der Ordner mit der korrekten Nummer und CHMOD777 angelegt (im Ordner /bilder/).
Leider wird das Bild auch direkt in /bilder/ abgelegt und nicht in dem Nummern-Ordner.
Das ist der einzige Punkt der noch hakt.

Was ich schon überlegt habe: der Ordner wird ja vor dem Bildupload angelegt, oder.
Sobald ich ein Bild hochlade, ruft upload.php sich selber wieder auf, mit

Code: Alles auswählen

if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
Dann ist $mat_id nicht mehr gesetzt, oder?

Re: Bildupload funktioniert nicht richtig

Verfasst: So 19.Jun, 2011 13:52
von oxpus
Richtig. Deshalb muss $mat_id auch als hidden Input dem Formular hinzugefügt werden und mit $_POST dann ausgewertet werden.
Nur dann liegt der richtige Ordnername beim ablegen des Bildes auch vor.

Die "kleinen" Hürden eben, die einem beim programmieren verrückt machen können ;)

Und daher fragte ich dich ja bewusst, woher $mal_id kommt, um dich auf genau diesen Punkt zu "schupsen".
Der Aha-Effekt ist dann nämlich am grössten, wie ich finde...

Re: Bildupload funktioniert nicht richtig

Verfasst: So 19.Jun, 2011 18:46
von Holger
:!:
Das Problem ist nur: ich habe diesen hidden-Trick schon versucht, und ich habe auch versucht den mat_id abzugreifen ... so wie vor dem IF aber nach dem IF halt.
Hat aber nicht geklappt.
Ich werde es morgen nochmal versuchen!

Danke Karsten!

Re: Bildupload funktioniert nicht richtig

Verfasst: So 19.Jun, 2011 20:30
von oxpus
Du findest die richtige Stelle schon.

Bedenke aber auf jeden Fall, dass du $mat_id auch mit $_POST ausliest, sonst ist der Wert weiterhin nicht verfügbar.
Am besten ersetzt du die Zeile

Code: Alles auswählen

$mat_id = $_GET['mat_id'];
durch

Code: Alles auswählen

        $mat_id = if (isset($_GET['mat_id'])) ? intval($_GET['mat_id']) : intval($_POST['mat_id']);
Das sollte reichen, um die Variable auch aus dem Formular heraus zu erhalten.[*]

Re: Bildupload funktioniert nicht richtig

Verfasst: Mo 20.Jun, 2011 08:49
von Holger
Ne, das letzte klappt nicht, ich bekomme eine weisse Seite.
Sind die Klammern so richtig?

Re: Bildupload funktioniert nicht richtig

Verfasst: Mo 20.Jun, 2011 11:51
von oxpus
Doch, die Klammern sind korrekt, aber das "if" muss da weg... :pfff

Re: Bildupload funktioniert nicht richtig

Verfasst: Mo 20.Jun, 2011 12:04
von Holger
Ja, jetzt wird was mitgeschickt, aber leider nur eine 0 (null)

Die FORM sieht nun so aus:

Code: Alles auswählen

        echo " <form ".
             "action=\"".$_SERVER['PHP_SELF']."\" ".
             "method=\"post\" ".
             "enctype=\"multipart/form-data\">\n";
        echo "  <input type=\"hidden\" name=\"MAT_ID\" value=\"".$mat_id."\" />\n";
        echo "  <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
        for($i=0; $i<$anzahl_dateifelder; $i++){
            echo "  <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
            echo "  <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
            echo "  <br />\n";
        }
        echo "  <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
        echo " </form>\n";
Es wird nun also ein Ordner 31 (Beispiel) und ein Ordner 0 angelegt ...
Im Ordner 0 wird die Datei auch abgelegt.

Code: Alles auswählen

    // Falls der Benutzer auf "Upload" gedrückt hat,
    // werden die Dateien überprüft
    if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
   		$mat_id = (isset($_GET['mat_id'])) ? intval($_GET['mat_id']) : intval($_POST['mat_id']);
	    $pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
	    $ordner = "bilder/$mat_id/";
    	$ordner2 = "/$pfad/$mat_id/";
    	echo"$ordner<br />";
		echo"$ordner2<br />";
		mkdir($ordner2);
		chmod($ordner2, 0777);
        // jede Datei einzeln testen

Re: Bildupload funktioniert nicht richtig

Verfasst: Mo 20.Jun, 2011 12:13
von oxpus
Dieser Part war ja auch nur das Auslesen aus dem Formular.
$mat_id muss aber noch als "hidden"-input im Formular hinterlegt werden ;)