8796 sujets

Développement web côté serveur, CMS

Bonjour, je suis actuellement bloqué sur le multi upload. Je m'explique, j'ai réussi a uploader un fichier dans le répertoire que j'ai voulu mais avec plusieurs fichiers on m'a dit qu'il fallait que je présente ma balise sous la forme : <input type="file" name="fichier[]"> mais je n'arrive pas récupérer ces données dans mon script après. J'ai utilisé un foreach.

Partie formulaire.php :
<input type="hidden" name="MAX_FILE_SIZE" value="20971520" />
		<br><input type="file" name="fichier" size="30"><br>
		<br><input type="file" name="fichier2" size="30"><br>
		<br><input type="file" name="fichier3" size="30"><br>
		<br><input type="file" name="fichier4" size="30"><br>
		<br><input type="reset" value="Tout annuler"><br>


Partie upload.php :
<?php
$dossier = 'upload/';
$fichier = basename($_FILES['fichier']['name']);
$taille_maxi = 20971520;
$taille = filesize($_FILES['fichier']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt');
$extension = strrchr($_FILES['fichier']['name'], '.');
//Début de la boucle des inputs
 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop volumineux';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
$fichier = date('Y-m-d-H-i-s').uniqId().$extension;
if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>


Merci beaucoup de votre aide
Modifié par Ercan76 (25 May 2011 - 12:04)
Je ne sais pas vraiment pourquoi ton script ne fonctionne pas , je suis un noob en programmation, mais d'après ce que j'ai pu voir dans mes scripts upload et dans les autres , je pense qu'il te faut déclarer la référence MIME dans ton script :
Du style :
image/jpeg
image/png
image/gif


Voir ici : http://www.w3schools.com/media/media_mimeref.asp
Voici mon script d'upload :
function upload($id) {

if (isset($_FILES)) {
// initialisation des chemins et des noms
$chemin = "../media/";
$nom_temporaire = $_FILES["file"]["tmp_name"];
//$nom_final = strtolower($_FILES["file"]["name"]);
$nom_final = "agenda_".$id.".jpg";
// ----------------------------------------
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Code d'erreur : " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    //echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    //echo "Type: " . $_FILES["file"]["type"] . "<br />";
    //echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    //echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists($chemin . $nom_final))
      {
      //echo $_FILES["file"]["name"] . " existe déjà. ";
	  unlink($chemin.$nom_final);
	  move_uploaded_file($nom_temporaire,
      $chemin . $nom_final);
      //echo "Fichier enregistré : " . $chemin . $nom_final;
      }
    else
      {
      move_uploaded_file($nom_temporaire,
      $chemin . $nom_final);
      echo "Fichier enregistré : " . $chemin . $nom_final;
      }
    }
  }
else
  {
  //echo "Fichier non valide.";
  }
 }

}


Je fait ceci pour l'upload d'une seule image , maintenant ce n'est pas ta solution mais bon, je pense que ça peux y contribuer.
Modifié par Rastahigh (25 May 2011 - 12:14)