IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Uploadfile Problème nom de fichier (espace devient tiret, mais pas dans la variable.)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Uploadfile Problème nom de fichier (espace devient tiret, mais pas dans la variable.)
    Bonjour,
    J'ai problème concernant le nom d'ecriture de mon fichier après traitement par le formulaire... (avant ca marchait... je n'ai rien modifié à part... installé Office2007 je vois pas le rapport mais ca marche plus...).

    Mon problème est celui la:
    Je veux charger un fichier qui s'appele par ex mon texte (avec un espace donc)
    Ce fichier est bien traité dans le formulaire... mais mon gros probleme est que celui ci est enregistré sous la forme mon-texte (noté le - qui ny etait pas...)
    j'ai l'impression que le %20 (qui correspônd à lespace) est analyser par mon systeme par un - alors qu'il n'apparait pas dans mes variables, cela reste un espace... HELP

    le chemin de mon fichier c'est enregistré dans
    $chemin = "upload/".$mon_champ."/".$fichier (nom du fichier mon texte)

    Et lorsque je veux avoir un lien a la fin je fais echo "<a href='$chemin'>télécharger</a> et j'ai bien mon texte en recherche , alors qu'il s'est enregistré dans mon repertoire sous mon-texte, d'ou vient cette saleté de tiret alors qu'il n'é même pas présent dans mon nom de variable $fichier.......
    Si quelq'un a la réponse... Merci bcp ! D'ou cela vient t'il ?




    Comment pallier ce cas sinon, en remplacant automatiquement les espace entres les noms de fichier par un underscore _ (comme ca je n'aurais plus le problème, solution alternative......)





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans nom</title>
    </head>
     
    <body>
     
    <form method="POST" action="upload.php" enctype="multipart/form-data">
         <p>
         <!-- On limite le fichier à 100Ko -->
         <input type="hidden" name="MAX_FILE_SIZE" value="100000">
      </p>
      <table width="695" border="1">
        <tr>
          <td width="166" height="31">Fichier :</td>
          <td width="258"><input type="file" name="avatar" /></td>
          <td width="153">&nbsp;</td>
          <td width="90">&nbsp;</td>
        </tr>
        <tr>
          <td>Description : </td>
          <td><input name="desc" type="text" value="" /></td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>Mati&egrave;re : </td>
          <td><select name="mon_champ">
            <option>Anafi</option>
            <option>Matfi</option>
            <option>Financement de l'entreprise et économie</option>
        </select>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="envoyer" value="Envoyer le fichier" /></td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table>  
    <p>&nbsp;</p></td>  </form>
    </body>
    </html>
    et upload.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
     
    $mon_champ = isset($_POST['mon_champ']) ? $_POST['mon_champ'] : '';      //type de cours pour selection du fichier
    $desc = isset($_POST['desc']) ? $_POST['desc'] : '';                     //description du fichier
     
     
    $dossier = "upload/".$mon_champ."/";
    $fichier = basename($_FILES['avatar']['name']);
    $taille_maxi = 100000;
    $taille = filesize($_FILES['avatar']['tmp_name']);
    $extensions = array('.txt', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['avatar']['name'], '.'); 
     
    //début enregistrement dans la base de donnée
     
    $chemin = "upload/".$mon_champ."/".$fichier;          //chemin complet de stockage de du chemin du fichier..
     
    //ici je mettrais la requete sql complete pr l'enregistrement dans la base de $desc (description du cours) $mon_champ (type de matiere)  $chemin (chemin stockage cours)
     
     
     
    //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 ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    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);
         if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
    		  echo $mon_champ;
    		  echo $desc;
    		  echo $chemin;
    		  echo "<a href='$chemin'>télécharger</a><br> ";         //voila comment récuperer le lien !! j'ai compris, ca va aller alors !
     
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
     
         }
    }
    else
    {
         echo $erreur;
    }
    ?>

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Le remplacement de l'espace par le tiret vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    Si vous tenez à remplacer l'espace par un underscore (dans le code actuel), il vous suffit de modifier cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy_');
    Tout a une explication


    Julp.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par julp
    Le remplacement de l'espace par le tiret vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    Julp.
    merci, une question : que signifie le /i dans le preg_replace ??

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par noobspower
    merci, une question : que signifie le /i dans le preg_replace ??
    Insensible à la casse, tout simplement


    Julp.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] fopen créé un fichier sur le serveur mais pas dans mes dossiers
    Par Poly_Helene dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2013, 18h40
  2. Réponses: 2
    Dernier message: 23/01/2009, 20h00
  3. problème nom de fichier
    Par grrrkewel dans le forum VB.NET
    Réponses: 7
    Dernier message: 07/08/2008, 10h47
  4. Problème nom de fichier généré avec une variable
    Par matlabeginer dans le forum MATLAB
    Réponses: 3
    Dernier message: 09/04/2008, 12h03
  5. Wget : problème # nom de fichier
    Par HurSG dans le forum Windows
    Réponses: 1
    Dernier message: 09/10/2007, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo