php - script - web galerie




Wie kann ich mehrere Dateien mit HTML und PHP mit HTTP POST auswählen und hochladen? (8)

Ich habe Erfahrung mit dem Hochladen einzelner Dateien mit <input type="file"> . Allerdings habe ich Probleme, mehr als eins auf einmal hochzuladen.

Zum Beispiel möchte ich in der Lage sein, eine Reihe von Bildern auszuwählen und sie dann auf einmal auf den Server hochzuladen.

Es wäre großartig, wenn möglich ein einziges Eingabesteuerelement zu verwenden.

Weiß jemand, wie man das erreicht? Vielen Dank!


Dies ist in HTML5 möglich. Beispiel (PHP 5.4):

<!doctype html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="my_file[]" multiple>
            <input type="submit" value="Upload">
        </form>
        <?php
            if (isset($_FILES['my_file'])) {
                $myFile = $_FILES['my_file'];
                $fileCount = count($myFile["name"]);

                for ($i = 0; $i < $fileCount; $i++) {
                    ?>
                        <p>File #<?= $i+1 ?>:</p>
                        <p>
                            Name: <?= $myFile["name"][$i] ?><br>
                            Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
                            Type: <?= $myFile["type"][$i] ?><br>
                            Size: <?= $myFile["size"][$i] ?><br>
                            Error: <?= $myFile["error"][$i] ?><br>
                        </p>
                    <?php
                }
            }
        ?>
    </body>
</html>

So sieht es in Chrome aus, nachdem Sie 2 Einträge im Dateidialog ausgewählt haben:

Und so sieht es aus, nachdem Sie auf die Schaltfläche "Hochladen" geklickt haben.

Dies ist nur eine Skizze einer voll funktionsfähigen Antwort. Weitere Informationen zur korrekten, sicheren Handhabung von Datei-Uploads in PHP finden Sie im PHP-Handbuch: Handhabung von Datei-Uploads.


Es gibt ein paar Dinge, die Sie tun müssen, um einen Upload mit mehreren Dateien zu erstellen, es ist eigentlich ziemlich einfach. Sie müssen nicht Java, Ajax, Flash verwenden. Erstellen Sie einfach ein normales Datei-Upload-Formular, beginnend mit:

<form enctype="multipart/form-data" action="post_upload.php" method="POST">

Dann der Schlüssel zum Erfolg;

<input type="file" name="file[]" multiple />

vergiss diese Klammern nicht! In der post_upload.php versuche folgendes:

<?php print_r($_FILES['file']['tmp_name']); ?>

Beachten Sie, dass Sie ein Array mit den Daten tmp_name erhalten, was bedeutet, dass Sie auf jede Datei mit einem dritten Klammerpaar mit dem Beispiel "file 'number" zugreifen können:

$_FILES['file']['tmp_name'][0]

Sie können php count () verwenden, um die Anzahl der ausgewählten Dateien zu zählen. Goodluck widdit!


Ich habe eine PHP-Funktion erstellt, die zum Hochladen mehrerer Bilder verwendet wird, diese Funktion kann mehrere Bilder in einen bestimmten Ordner hochladen und speichert die Datensätze in der Datenbank im folgenden Code $ arrayimage ist das Array von Bildern, die durch Formularnotiz gesendet wird Es ist nicht möglich, mehrere Dateien gleichzeitig zu laden. Sie müssen jedoch ein anderes Eingabefeld mit dem gleichen Namen erstellen.

$ dir ist das Verzeichnis, in dem Sie das Bild speichern möchten $ fields ist der Name des Feldes, das Sie in der Datenbank speichern wollen

Datenbank-Feld muss in Array-Format Beispiel sein, wenn Sie Datenbank-Image-Store und Felder Name wie ID, Name, Adresse dann müssen Sie Daten wie

$fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);

und dann dieses Feld in Felder der Funktion $ übergeben

$ table ist der Name der Tabelle, in der die Daten gespeichert werden sollen.

function multipleImageUpload($arrayimage,$dir,$fields,$table)
{
    //extracting extension of uploaded file
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $arrayimage["name"]);
    $extension = end($temp);

    //validating image
    if ((($arrayimage["type"] == "image/gif")
    || ($arrayimage["type"] == "image/jpeg")
    || ($arrayimage["type"] == "image/jpg")
    || ($arrayimage["type"] == "image/pjpeg")
    || ($arrayimage["type"] == "image/x-png")
    || ($arrayimage["type"] == "image/png"))

    //check image size

    && ($arrayimage["size"] < 20000000)

    //check iamge extension in above created extension array
    && in_array($extension, $allowedExts)) 
    {
        if ($arrayimage["error"] > 0) 
        {
            echo "Error: " . $arrayimage["error"] . "<br>";
        } 
        else 
        {
            echo "Upload: " . $arrayimage["name"] . "<br>";
            echo "Type: " . $arrayimage["type"] . "<br>";
            echo "Size: " . ($arrayimage["size"] / 1024) . " kB<br>";
            echo "Stored in: ".$arrayimage['tmp_name']."<br>";

            //check if file is exist in folder of not
            if (file_exists($dir."/".$arrayimage["name"])) 
            {
                echo $arrayimage['name'] . " already exists. ";
            } 
            else 
            {
                //extracting database fields and value
                foreach($fields as $key=>$val)
                {
                    $f[]=$key;
                    $v[]=$val;
                    $fi=implode(",",$f);
                    $value=implode("','",$v);
                }
                //dynamic sql for inserting data into any table
                $sql="INSERT INTO " . $table ."(".$fi.") VALUES ('".$value."')";
                //echo $sql;
                $imginsquery=mysql_query($sql);
                move_uploaded_file($arrayimage["tmp_name"],$dir."/".$arrayimage['name']);
                echo "<br> Stored in: " .$dir ."/ Folder <br>";

            }
        }
    } 
    //if file not match with extension
    else 
    {
        echo "Invalid file";
    }
}
//function imageUpload ends here
}

// imageFunctions-Klasse endet hier

Sie können diesen Code zum Einfügen mehrerer Bilder mit seiner Erweiterung versuchen. Diese Funktion wurde zum Überprüfen von Bilddateien erstellt. Sie können die Erweiterungsliste für bestimmte Dateien im Code ersetzen


Im ersten solltest du folgendes machen:

<form method="post" enctype="multipart/form-data" >
   <input type="file" name="file[]" multiple id="file"/>
   <input type="submit" name="ok"  />
</form> 

das ist richtig . Fügen Sie diesen Code jetzt unter Ihrem Formularcode oder auf einer beliebigen Seite hinzu

<?php
if(isset($_POST['ok']))
   foreach ($_FILES['file']['name'] as $filename) {
    echo $filename.'<br/>';
}
?>

es ist einfach ... fertig


Vollständige Lösung in Firefox 5:

<html>
<head>
</head>
<body>
 <form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
  <input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input> 
 </form>

<?php
echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>"; 


$uploadDir = "images/";
for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {

 echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
 $ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1); 

 // generate a random new file name to avoid name conflict
 $fPath = md5(rand() * time()) . ".$ext";

 echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
 $result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);

 if (strlen($ext) > 0){
  echo "Uploaded ". $fPath ." succefully. <br>";
 }
}
echo "Upload complete.<br>";
?>

</body>
</html>

Wenn Sie mehrere Dateien aus dem Dateiauswahldialog auswählen möchten, der beim Auswählen von Durchsuchen angezeigt wird, haben Sie meistens kein Glück. Sie müssen ein Java-Applet oder etwas Ähnliches verwenden (ich denke, es gibt eines, das eine kleine Flash-Datei verwendet, ich werde aktualisieren, wenn ich es finde). Derzeit ermöglicht eine einzige Dateieingabe nur die Auswahl einer einzelnen Datei.

Wenn Sie über die Verwendung mehrerer Dateieingaben sprechen, sollte es keinen großen Unterschied zur Verwendung eines geben. Poste etwas Code und ich werde versuchen weiter zu helfen.

Update: Es gibt eine Methode, um eine einzelne Schaltfläche zum Durchsuchen zu verwenden, die Flash verwendet. Ich habe das nie persönlich benutzt, aber ich habe eine Menge darüber gelesen. Ich denke, es ist dein bester Schuss.

http://swfupload.org/


Ich habe das ein bisschen einfacher

<?php

    $image1=$_FILES["file"] ["name"][0];
    $image2=$_FILES["file"] ["name"][1];
    $image3=$_FILES["file"] ["name"][2];

    $temp1=$_FILES["file"] ["tmp_name"][0];
    $temp2=$_FILES["file"] ["tmp_name"][1];
    $temp3=$_FILES["file"] ["tmp_name"][2];

    $image4=$_FILES["file_ot"] ["name"][0];
    $image5=$_FILES["file_ot"] ["name"][1];


    $temp4=$_FILES["file_ot"] ["tmp_name"][0];
    $temp5=$_FILES["file_ot"] ["tmp_name"][1];




    $query="INSERT INTO `vendordata`( `details`, `phone`, `email`, `driverpic`, `licensepic`, `adharcardpic`, `pancard`, `policeverification`)
    VALUES ('$details','$phone','$email','$image1','$image2','$image3','$image4','$image5')";



    move_uploaded_file($temp1,'uploads/'.$image1);
    move_uploaded_file($temp2,'uploads/'.$image2);
    move_uploaded_file($temp3,'uploads/'.$image3);
    move_uploaded_file($temp4,'uploads/'.$image4);
    move_uploaded_file($temp5,'uploads/'.$image5);
    $run=$db->query($query);
    if ($run) {
      echo "inserted";
    }
    else {
       echo("Error description: " . mysqli_error($db));
    }
    ?>

<form action="" method="POST" enctype="multipart/form-data">
  Select image to upload:
  <input type="file"   name="file[]" multiple/>
  <input type="submit" name="submit" value="Upload Image" />
</form>

FOR Schleife benutzen

<?php    
  $file_dir  = "uploads";    
  if (isset($_POST["submit"])) {

    for ($x = 0; $x < count($_FILES['file']['name']); $x++) {               

      $file_name   = $_FILES['file']['name'][$x];
      $file_tmp    = $_FILES['file']['tmp_name'][$x];

      /* location file save */
      $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */

      if (move_uploaded_file($file_tmp, $file_target)) {                        
        echo "{$file_name} has been uploaded. <br />";                      
      } else {                      
        echo "Sorry, there was an error uploading {$file_name}.";                               
      }                 

    }               
  }    
?>

FOREACH-Schleife verwenden

<?php
  $file_dir  = "uploads";    
  if (isset($_POST["submit"])) {

    foreach ($_FILES['file']['name'] as $key => $value) {                   

      $file_name   = $_FILES['file']['name'][$key];
      $file_tmp    = $_FILES['file']['tmp_name'][$key];

      /* location file save */
      $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */

      if (move_uploaded_file($file_tmp, $file_target)) {                        
        echo "{$file_name} has been uploaded. <br />";                      
      } else {                      
        echo "Sorry, there was an error uploading {$file_name}.";                               
      }                 

    }               
  }
?>






upload