upload für - Wie kann ich mehrere Dateien mit HTML und PHP mit HTTP POST auswählen und hochladen?




galerie website (10)

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!


Answers

Wenn Sie mehrere Eingabefelder verwenden, können Sie name = "file []" (oder einen anderen Namen) eingeben. $_FILES['file'] = array ({file_array},{file_array]..) werden sie beim Hochladen in ein Array $_FILES['file'] = array ({file_array},{file_array]..) ( $_FILES['file'] = array ({file_array},{file_array]..) )


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>

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!



<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}.";                               
      }                 

    }               
  }
?>

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


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.


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));
    }
    ?>

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


Ich würde empfehlen, PDO (PHP Data Objects) zu verwenden, um parametrisierte SQL-Abfragen auszuführen.

Dies schützt nicht nur vor SQL-Injection, sondern beschleunigt auch Abfragen.

Durch die Verwendung von mysql_ anstelle von mysql_ , mysqli_ und pgsql_ Funktionen machen Sie Ihre App etwas mehr von der Datenbank abstrahiert, in dem seltenen mysqli_ , dass Sie den Datenbankanbieter wechseln müssen.





php html http post upload