Upload multiple en... un peu plus que 36 lignes: 82, en fait. J'ai rajouté un contrôle du type Mime et de la taille du fichier.
J'ai fait dans le simple. C'est la première source que je poste. Il existe déjà plein de solutions pour l'upload multiple, mais toutes celles que j'ai vues me prenaient la tête... Celle-ci fait tout ce qu'il faut en 36 (ou 37) lignes, et sans prendre la tête ! Testée sur IE8, FF, NN9.
Source / Exemple :
<head><title>Upload multiple en (36) 82 lignes de code</title>
<script type="text/javascript"><!--
function ajouter()
{ var br = document.createElement('br'); // je crée une balise <br />
var neo = document.createElement('input'); // je crée un élément <input>
neo.setAttribute('name','srcfic[]'); // je donne à mon INPUT le nom du tableau
neo.setAttribute('type','file'); // je précise qu'il est de type FILE
neo.setAttribute('size','95'); // je précise sa taille
var sortie = document.getElementById("aufront"); // je précise où placer mon INPUT
sortie.appendChild(neo); // je le mets en place, ainsi qu'un retour à la ligne
sortie.appendChild(br); }
//--></script>
</head>
<body>
<form enctype="multipart/form-data" action="#VersServeur" method="post" name="uplo">
<input type="hidden" name="drapeau" id="drapeau" value="oui" />
<div id="aufront"><label>Fichier(s) à envoyer vers le serveur :</label><br /><br />
<input name="srcfic[]" type="file" size="95"><br> <!-- j'ai créé un tableau de fichiers à envoyer -->
</div> <!-- script de Richard BACH http://www.valneandre.eu -->
Vous pouvez ajouter des fichiers avant d'envoyer : <input type="button" value="Encore un ?" onclick="ajouter()" /><br />
<input type="submit" value="Envoyer"></form>
<div name="VersServeur" id="VersServeur">
<?php
$destin = "downloads"; // changer ceci par le nom du dossier destinataire souhaité
if (isset($_POST["drapeau"]))
{ echo '<h2>Envoi des fichiers ...</h2>';
//=====================================================================================================================
for($x=0;$x<sizeof($_FILES["srcfic"]["name"]);$x++)
{ $nom = $_FILES['srcfic']['name'][$x];
if ($_FILES['srcfic']['error'][$x] >0)
{
echo 'Erreur sur le fichier : ' . $_FILES['srcfic']['error'][$x] . "<br /><br />";
}
else
{
if (file_exists("$destin/$nom")) // si le fichier existe déjà, renommer l'ancien
{
$ancienfic = $nom . microtime() . ".old" ; // certitude de n'avoir pas 2 noms pareils
rename("$destin/$nom","$destin/$ancienfic");
echo "<br />Le fichier " . $nom . " existe déjà<br />L'ancien " . $nom . " sera renommé " . $ancienfic . "<br />";
}
$siz = round($_FILES['srcfic']['size'][$x] / 1024,2); // calcul de la taille en Ko
$typ = $_FILES['srcfic']['type'][$x]; // examen du type MIME
echo "Type : $typ<br />Taille : $siz Ko<br />";
if($siz > 256) // si la taille du fichier est supérieure à 256 Ko
{
echo "Fichier "$nom" trop volumineux pour l'upload<br /><br />";
}
else // sinon, filtrer les types MIME admis avant d'uploader
{
switch ($typ)
{
case "image/gif":
case "image/pjpeg":
case "image/jpeg":
case "image/x-png":
case "image/png":
case "image/tiff":
case "image/bmp":
if(move_uploaded_file($_FILES['srcfic']['tmp_name'][$x],"$destin/$nom")) // si tout s'est bien passé
{
echo "<strong>Le fichier "" . $_FILES['srcfic']['name'][$x] . "" a été correctement envoyé ";
echo "dans le dossier "$destin/"</strong><br><br />";
chmod("$destin/$nom",0644);
}
else // sinon (case restée vide, ou fichier pas passé...)
{ if ($nom=="") $nom = "Fichier_Inconnu";
{ echo "Désolé, je n'ai pas pu envoyer le fichier "$nom" dans le dossier "$destin/" !<br /><br />"; }
}
break;
// par défaut: rejeter les fichiers autres qu'images
default:echo "<br />Fichier "$nom" d'un type incorrect<br /><br />";break;
} // fermeture de switch(type)
} // fermeture de if(size>256) else...
} // fermeture de if(error) else...
} // fermeture de for(x=0;...)
//=====================================================================================================================
} // fermeture de if(isset...)
?>
</div></body>
Conclusion :
Un petit upload simple, sans prétention.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.