Bildupload funktioniert nicht richtig

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Bildupload funktioniert nicht richtig

Beitrag 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?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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".
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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.

;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag von Holger »

Danke! Werde ich testen!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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 ...
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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'];
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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?!?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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";
    }
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag von oxpus »

Äh, wie kann der Ordner korrekt angelegt werden, wenn $mat_id nicht gesetzt ist?!?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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.[*]
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag von Holger »

Ne, das letzte klappt nicht, ich bekomme eine weisse Seite.
Sind die Klammern so richtig?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag von oxpus »

Doch, die Klammern sind korrekt, aber das "if" muss da weg... :pfff
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Bildupload funktioniert nicht richtig

Beitrag 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
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Bildupload funktioniert nicht richtig

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten