Upload HTML et PHP

Bonjour,

Voila, j'ai comme un petit problème, j'essaye de faire un formulaire d'upload avec HTML et PHP, mais le souci, enfin ce que je voudrais, c'est que dans mon formulaire HTML, on puisse choisir le nom de la photo qui va être uploader (je sais pas si cela s'écris comme ceci), exemple :

Nom : [toto] Sur mon site : toto.jpg

Par : [bob] Info fichier toto.jpg : bob // sur mon site :
../actus/bob/toto.jpg

Catégorie : [actu's] Sur mon site : ../actus/

Date : [06/12/2013] Info fichier toto.jpg : 06/12/2013

J'accepte toute réponse, merci de m'aider, c'est assez urgent :)

8 réponses

  1. Dans le formulaire tu rajoutes un champ texte pour le nom du fichier :

    <input type="text" name="nomfichier" value="" />


    Et dans le PHP tu modifies la ligne 54 :

     // On renomme le fichier
                $nomImage =  md5(uniqid()) .'.'. $extension;


    Par :
    // On renomme le fichier par le nom voulu par l'utilisateur (si renseigné)
    if(!empty($_POST['nomfichier'])) $nomImage = $_POST['nomfichier'] .'.'. $extension;
    else $nomImage = md5(uniqid()) .'.'. $extension;
    


    Mais attention, ce code récupère le nom choisi sans effectuer aucune opération dessus (suppression des accents, espaces, caractères spéciaux..). Je te laisse le faire.
    Et il n'oblige pas l'utilisateur à saisir un nom.

    Voilà !
    1
    1. Super merci, et dernière question, peut on choisir l'emplacement de l'upload entre plusieurs catégories avec ce type de code ?

      <select name="select">
        <option>Commune</option>
        <option>Région</option>
        <option>Pays</option>
      </select>
      0
    2. Absolument. Je te fais le code en fin de soirée ou demain matin.
      0
  2. Sois plus clair, j'ai pas compris -_-
    0
    1. Ce que je souhaite faire, c'est de renommer un image avant l'upload.
      0
      1. Le nom du fichier ? Tu veux que ton toto.jpg devienne bob.jpg ?
        0
        1. Non, je m'explique :

          Fichier origine de l'utilisateur : 0212145513.jpg
          Nom que l'utilisateur souhaite le remplacer : toto (ce qui donne toto.jpg)

          Puis upload
          0
          1. Ok, donne-moi ton bout de code actuel et je le modifie
            0
            1. Formulaire :

              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
                <head>
                  <title>Upload d'une image sur le serveur !</title>
                </head>
                <body>
               <?php
                    if( !empty($message) ) 
                    {
                      echo '<p>',"\n";
                      echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n";
                      echo "\t</p>\n\n";
                    }
                  ?>
                  <!-- Debut du formulaire -->
                 <form enctype="multipart/form-data" action="upload_1.php" method="post">
                  <fieldset>
                      <legend>Formulaire</legend>
                        <p>
                          <label for="fichier_a_uploader" title="Recherchez le fichier à uploader !">Envoyer le fichier :</label>
                          <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" />
                          <input name="fichier" type="file" id="fichier_a_uploader" />
                          <input type="submit" name="submit" value="Uploader" />
                        </p>
                    </fieldset>
                  </form>
                  <!-- Fin du formulaire -->
                </body>
              </html>


              Code PHP

              <?php
               
              // Constantes
              define('TARGET', '../upload/');    // Repertoire cible
              define('MAX_SIZE', 100000);    // Taille max en octets du fichier
              define('WIDTH_MAX', 800);    // Largeur max de l'image en pixels
              define('HEIGHT_MAX', 800);    // Hauteur max de l'image en pixels
               
              // Tableaux de donnees
              $tabExt = array('jpg','gif','png','jpeg');    // Extensions autorisees
              $infosImg = array();
               
              // Variables
              $extension = '';
              $message = '';
              $nomImage = '';
               
              /************************************************************
               * Creation du repertoire cible si inexistant
               *************************************************************/
              if( !is_dir(TARGET) ) {
                if( !mkdir(TARGET, 0755) ) {
                  exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
                }
              }
               
              /************************************************************
               * Script d'upload
               *************************************************************/
              if(!empty($_POST))
              {
                // On verifie si le champ est rempli
                if( !empty($_FILES['fichier']['name']) )
                {
                  // Recuperation de l'extension du fichier
                  $extension  = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
               
                  // On verifie l'extension du fichier
                  if(in_array(strtolower($extension),$tabExt))
                  {
                    // On recupere les dimensions du fichier
                    $infosImg = getimagesize($_FILES['fichier']['tmp_name']);
               
                    // On verifie le type de l'image
                    if($infosImg[2] >= 1 && $infosImg[2] <= 14)
                    {
                      // On verifie les dimensions et taille de l'image
                      if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
                      {
                        // Parcours du tableau d'erreurs
                        if(isset($_FILES['fichier']['error']) 
                          && UPLOAD_ERR_OK === $_FILES['fichier']['error'])
                        {
                          // On renomme le fichier
                          $nomImage = md5(uniqid()) .'.'. $extension;
               
                          // Si c'est OK, on teste l'upload
                          if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage))
                          {
                            $message = 'Upload réussi !';
                          }
                          else
                          {
                            // Sinon on affiche une erreur systeme
                            $message = 'Problème lors de l\'upload !';
                          }
                        }
                        else
                        {
                          $message = 'Une erreur interne a empêché l\'uplaod de l\'image';
                        }
                      }
                      else
                      {
                        // Sinon erreur sur les dimensions et taille de l'image
                        $message = 'Erreur dans les dimensions de l\'image !';
                      }
                    }
                    else
                    {
                      // Sinon erreur sur le type de l'image
                      $message = 'Le fichier à uploader n\'est pas une image !';
                    }
                  }
                  else
                  {
                    // Sinon on affiche une erreur pour l'extension
                    $message = 'L\'extension du fichier est incorrecte !';
                  }
                }
                else
                {
                  // Sinon on affiche une erreur pour le champ vide
                  $message = 'Veuillez remplir le formulaire svp !';
                }
              }
              ?>
              0
              1. Salut,

                Voici les petits bouts de code te permettant de choisir l'emplacement où sera uploadé le fichier..

                Tu ajoutes ton select dans le formulaire :
                <select name="categorie">
                  <option value="dossier1">Valeur 1</option> 
                  <option value="dossier2">Valeur 2</option>
                  <option value="dossier3">Valeur 3</option>
                </select>


                Tu supprimes le code présent de la ligne 18 à 25 et tu mets celui-ci après la ligne 31 (dans le if empty post) :
                $chemin_final = TARGET.$_POST['categorie'].'/';
                // Création du répertoire cible si inexistant
                if( !is_dir($chemin_final) ) {
                  if( !mkdir($chemin_final, 0755) ) {
                    exit('Erreur : le répertoire cible ne peut être créé ! Vérifiez que vous disposez des droits suffisants pour le faire ou créez-le manuellement.');
                  }
                }


                Et enfin, tu remplaces la ligne 58 par celle-ci :
                // Si c'est OK, on teste l'upload
                if(move_uploaded_file($_FILES['fichier']['tmp_name'], $chemin_final.$nomImage))
                0
                1. J'essaye sa ce soir, et je te dit quoi, merci
                  0
                2. So ?
                  0
                3. Désoler de ne pas avoir répondu avant, mais ton code ne fonctionne pas, peut tu me le faire près a copier coller stp ?
                  0