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 :

Problème de format dans formulaire d'upload [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut Problème de format dans formulaire d'upload
    Bonjour,

    J'ai un formulaire avec lequelle je souhaite faire que des upload de fichier text mais losque je fais un tes j'ai un message d'erreur concernant le format du fichier "Le fichier n'est pas du texte".

    Ci-dessous mon code

    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
     
     
    <?php
    session_start ();
     
    ?>
     
    <form method="post" enctype="multipart/form-data" action="admin_upload.php">
    <p>
    <input type="file" name="fichier" size="30">
    <input type="submit" name="upload" value="Valider">
    </p>
    </form>
     
    <?php
     
    if( isset($_POST['upload']) ) // si formulaire soumis
    {
        $content_dir = '../import/'; // dossier où sera déplacé le fichier
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        // on vérifie maintenant l'extension
        $type_file = $_FILES['fichier']['type'];
     
        if( !strstr($type_file, 'txt') )
        {
            exit("Le fichier n'est pas du texte");
        }
     
        // on copie le fichier dans le dossier de destination
        $name_file = $_FILES['fichier']['name'];
     
        if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
    {
        exit("Nom de fichier non valide");
    }
    else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }
     
    }
     
    ?>
    Je vous remercie de votre aide

    Runcafre91

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Quelle est la fonction qui retourne ce message d'erreur, ça doit être précisé, non ?

    Fait des var_dump() (ou print_r, echo) sur certaines variables/tableaux, celles qui te paraissent douteuses plus particulièrement.
    C'est le moyen le plus simple et quasi infaillible de savoir ce qui se passe, quand ça pas.


    Petit truc en passant.
    Remonte tes codes, tous les traitements Php ici, ils n'ont pas grand choses à faire en plein milieu du HTML.
    Fait tout ça avant le doctype, en somme, sépare au maximum les traitements pure, et l'interface.
    Place les juste après le session_start().
    Leur déroulement n'ont aucun rapport : tout le Php sera exécuté avant le renvoie du moindre contenu, que ce soit un echo ou une balise HTML.
    En faite, tu procède en quelque sorte à l'inverse de se qui devrait se faire.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    Bonsoir,

    Merci de votre réponse, j'ai revu mon code mais voila toujour le même soucis, le formulaire n'accepte pas l'extension du fichier

    code rectifié

    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
     
     
    <?php
    session_start ();
     
    ?>
     
    <?php
     
    if( isset($_POST['upload']) ) // si formulaire soumis
    {
        $content_dir = '../import/'; // dossier où sera déplacé le fichier
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        // on vérifie maintenant l'extension
        $type_file = $_FILES['fichier']['type'];
     
        if( !strstr($type_file, 'txt'))
        {
            exit("Le fichier n'est pas de texte");
        }
        // on copie le fichier dans le dossier de destination
        $name_file = $_FILES['fichier']['name'];
     
    if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
    	{
        exit("Nom de fichier non valide");
    	}
    else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    	{
        exit("Impossible de copier le fichier dans $content_dir");
    	}
        echo "Le fichier a bien été uploadé";
    }
     
    ?>
     
    <a href='../index.php'>Retour index</a><br>
    <form method="post" enctype="multipart/form-data" action="admin_upload.php">
    <p>
    <input type="file" name="fichier" size="30">
    <input type="submit" name="upload" value="Valider">
    </p>
    </form>
    Je vous remercie de votre aide

    Runcafre91

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    session_start ();
     
    ?>
     
    <?php
    Ceci ne va pas (et même pas du tout).
    Supprime cet espace qui risque de provoquer une erreur bien connue (... allready send by ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    session_start ();
     
    if( isset($_POST['upload']) )
    ... etc ...
    // On ne ferme QUE au moment du 1er élément HTML, soit le <doctype ...>
    ?>
    Tu ne répond pas aux questions, ni même faire un retour sur les var_dump(), etc ...
    Tu ne mets même pas le message d'erreur retourné, juste un court résumé. Pourtant, les messages d'erreurs indiquent l'élément qui provoque l'erreur, le nom du fichier, et la ligne.
    Il y rien de tout ça.

    Comment veux tu qu'on t'aide ?

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    Bonsoir,
    J'ai essaye de voir d'ou vient le problème en renommant la variable récupéré via le formulaire

    A priori il ne veux pas le test sur l'extension su dichier si je le retire j'arrive a uploader le fichier

    Ci-dessous mon code

    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
    58
    59
    60
    61
    62
    63
     
     
    <?php
    session_start ();
     
    if(isset($_FILES['importation'])) // si formulaire soumis
    {
    $content_dir = "../import/"; // dossier où sera déplacé le fichier 
    $tmp_file = $_FILES['importation']['tmp_name']; 
    $name_file = $_FILES['importation']['name'];
    $taille_file = filesize($tmp_file);
    $fichiername= $name_file;
    $fichiersize = $taille_file;
     
     echo $tmp_file;
    	echo "</br>";
     
     echo $fichiername;
    	echo "</br>";
     
     // on vérifie maintenant l'extension 
    $type_file = $_FILES['importation']['type']; 
     
    //************************************************************
    //if( !strstr($type_file, 'txt') && !strstr($type_file, 'csv')) 
    //{ 
    //exit("Le fichier n'est pas du texte"); 
    //}
    //************************************************************
     
    // on copie le fichier dans le dossier de destination
        $fichiername = $_FILES['importation']['name'];
     
    if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $fichiername) )
    	{
        exit("Nom de fichier non valide");
    	}
    else if( !move_uploaded_file($tmp_file, $content_dir .$fichiername) )
    	{
        exit("Impossible de copier le fichier dans $content_dir");
    	}
        echo "Le fichier a bien été uploadé";
    }
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Gestion des dus !</title>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	   <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="#" />
    	</head>
    <html>
    <body>
    <a href='../index.php'>Retour index</a><br>
    <form method="post" enctype="multipart/form-data" action="admin_upload.php">
    <p>
    <input type="file" name="importation" size="30">
    <input type="submit" value="Valider">
    </p>
    </form>
    </body>
    </html>
    Message d'erreur issus du If lors du test de l'extension

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    E:\wamp\tmp\php93.tmp
    audrey.txt
    Le fichier n'est pas du texte
    Merci de votre aide

    Runcafre91

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Disons qu'il va falloir que je songe à mettre des lunettes un des ces 4.
    J'avais pas vu que ce message se trouvait dans un exit()


    C'est bizzare, mais en faisant un essai avec le preg_match() et le regex, avec le nom du fichier "audrey.txt", et bien ça ne passe pas, ça retourne 0.
    Du coup la condition ne passe pas.

    Pour ta condition précédente, le $_FILES['importation']['type'] ne retourne pas simplement "txt" ou "csv", mais une chaine du type :
    application/txt
    application/csv
    application/pdf
    etc ...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Disons qu'il va falloir que je songe à mettre des lunettes un des ces 4.
    J'avais pas vu que ce message se trouvait dans un exit()


    C'est bizzare, mais en faisant un essai avec le preg_match() et le regex, avec le nom du fichier "audrey.txt", et bien ça ne passe pas, ça retourne 0.
    Du coup la condition ne passe pas.

    Pour ta condition précédente, le $_FILES['importation']['type'] ne retourne pas simplement "txt" ou "csv", mais une chaine du type :
    application/txt
    application/csv
    application/pdf
    etc ...
    Bonsoir,

    J'ai résolu mon problème en fait il y avais une erreur dans ma condition en la modifiant cela fonction (j'ai mi type au lieu de name)

    ci-dessous le bout de code correcte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     // on vérifie maintenant l'extension 
    $type_file = $_FILES['importation']['name']; 
     
    //************************************************************
    if( !strstr($type_file, 'txt') && !strstr($type_file, 'csv')) 
    { 
    exit("Le fichier n'est pas du texte"); 
    }
    Merci de votre aide

    Runcafre91

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'ai résolu mon problème en fait il y avais une erreur dans ma condition en la modifiant cela fonction (j'ai mi type au lieu de name)
    Il valait mieux pas, fallait justement conserver le "type" et juste remplacer par "application/txt" et "application/csv" au lieu de "txt" et "csv".

    Vérifier par le nom n'est pas du tout fiable, mais franchement pas du tout.
    Si le nom du fichier contient la séquence "txt" ou "csv", la condition sera VRAI, peu importe le type de fichier, et même s'il n'a pas d'extension.
    Ceci passera : un_txt_essai.zarbi
    Et même ceci un_csv (sans extension)


    Bref ... Pour vérifier un type de fichier, php fourni le type : $_FILES['fichier']['type']
    Sous la forme : application/txt
    Et si le fichier n'a pas d'extension ou d'un type inconnu : "application/octet_stream" sera retourné comme type de fichier.

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

Discussions similaires

  1. Problème de format dans une cellule excel
    Par Nodoso dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/12/2009, 18h26
  2. Problème de format dans une liste SharePoint
    Par tipierre76 dans le forum SharePoint
    Réponses: 1
    Dernier message: 05/06/2008, 20h21
  3. Problème de tri dans formulaire
    Par antoine1504 dans le forum IHM
    Réponses: 1
    Dernier message: 23/07/2007, 12h15
  4. Problème d'alignement dans formulaire en css
    Par hartecel dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 07/03/2007, 19h11
  5. problème de variable dans formulaire
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 06h53

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