upload mit progressanzeige

rernanded

Erfahrenes Mitglied
Hi,
ich setze folgendes Script (s.u.) zum upload von images ein. Dazu fehlen mir zwei Dinge: 1) Wo baue ich die Fehlermeldung ein, daß es sich um einen zu große Datei handelt, wenn diese größer als 666000 ist und 2.) wie baue ich einen Fortschrittsbalken ein?

MONI

PHP:
<?php
  $dir = 'uploads';
  echo '<form action="" method="post" enctype="multipart/form-data">
  <input type="hidden" name="MAX_FILE_SIZE" value="666000" />
  <input name="datei" type="file" />&nbsp;
  <input name="upload" type="submit" value="hochladen" />
  </form>';
  if(isset($_POST['upload']))
  { 
   // festgelegter Dateiname 
   $word = "123wow";
 
  // Dateifeld definieren
  $datei  = $_FILES['datei']['name'];

  // Dateiformat erfassen
  $info  = pathinfo($datei);
  $format = $info["extension"];
 
  // der endgültige Dateiname
  $dateiname  = $word.'.'.$format;
 
  // erlaubte Dateitypen (Extensionen)
  // $allowed_types = "(zip|rar|ZIP|RAR|png|jpg|jpeg|gif)";
$allowed_types = "(jpg)";
 
  if(preg_match("/\." . $allowed_types . "$/i", $_FILES["datei"]["name"]))
  {
  $dateiupload = move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
  } else {
  echo 'Dies ist ein ungültiger Dateityp.';
  }
  }
  ?>
 
Wenn du dir viel Arbeit ersparen willst, empfehle ich dir Dropzone.js:

http://www.dropzonejs.com/

Das hast du direkt verschiedenste Funktionalitäten dabei. Von der Progress-Bar über Multiple-Upload bis hin zu verschiedenen Fehler-Abfragen. Und alles abwärtskompatibel und ohne Flash.

Lg
Michael
 
@MsvP@habdichliebhasi

Weiß ich, kenn ich, danke für den Tipp. Aber ich wills nicht mit dropzone. Mir würde auch ein kurzer Lösungsansatz für die Frage nach dem Einbau der Fehlermeldung bei zu großer Datei reichen.
MONI
 
@MsvP@habdichliebhasi
Danke Dir. Jedoch fehlt mir die Idee vllt. ein else if oder elseif an der richtigen Stelle zu setzen.
Bekomme jetzt (mit dem Script unten) bei falscher Extension angezeigt: Dies ist ein ungültiger Dateityp.Die Datei ist zu groß.
Und bei falscher Größe: Die Datei ist zu groß.
Letzteres ist ja okay.
Ersteres müsste nur lauten: Dies ist ein ungültiger Dateityp.
MONI
PHP:
<?php
  $dir = 'uploads';
  echo '<form action="" method="post" enctype="multipart/form-data">
  <!--input type="hidden" name="MAX_FILE_SIZE" value="666000" /-->
  <input name="datei" type="file" />&nbsp;
  <input name="upload" type="submit" value="hochladen" />
  </form>';
  if(isset($_POST['upload']))
  {   
   // festgelegter Dateiname   
   $word = "123wow";
   
  // Dateifeld definieren
  $datei  = $_FILES['datei']['name'];

  // Dateiformat erfassen
  $info  = pathinfo($datei);
  $format = $info["extension"];
   
  // der endgültige Dateiname
  $dateiname  = $word.'.'.$format;
   
  // erlaubte Dateitypen (Extensionen)
  // $allowed_types = "(zip|rar|ZIP|RAR|png|jpg|jpeg|gif)";
$allowed_types = "(jpg)";
   
  if(preg_match("/\." . $allowed_types . "$/i", $_FILES["datei"]["name"]))  
  {
  $dateiupload = move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
  } else {
  echo 'Dies ist ein ungültiger Dateityp.';
}

if ($_FILES["datei"]["size"] > 666000) {
$dateiupload = move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
  } else {
  echo "Die Datei ist zu groß.";
  
  }
}
  ?>
 
Ich würde die If-Abfragen entweder verschachteln, oder du setzt eine Variable die am Ende abgefragt wird.

Also z.B. so wenns verschachtelt sein soll (dann wird aber auch immer nur eine Fehlermeldung ausgegeben):

PHP:
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["datei"]["name"])) 
  {
     
   if ($_FILES["datei"]["size"] > 666000) {
    $dateiupload = move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
    } else {
     echo "Die Datei ist zu groß.";
   }

  } else {
  echo 'Dies ist ein ungültiger Dateityp.';
}

oder so, dann sauber mit einem Array aufgebaut und alle Fehler als Liste:


PHP:
      $upload_error = array();

       if(!preg_match("/\." . $allowed_types . "$/i", $_FILES["datei"]["name"]))
       {
         array_push($upload_error,'Dies ist ein ungültiger Dateityp.');
       }
       if ( $_FILES["datei"]["size"] > 666000 )
       {
         array_push($upload_error,'Die Datei ist zu groß.');
       }
       
       if (count($upload_error) > 0) {
         echo 'Beim Upload sind folgende Fehler aufgetreten: <ul>';
         
         foreach (  $upload_error AS $key => $value ) {
           echo '<li>'.$value.'</li>';
         }
         echo '</ul>';
       } else {
         $dateiupload = move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");   
       }
 

Neue Beiträge

Zurück