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 :

Probleme multi upload


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut Probleme multi upload
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		<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 :
    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
    <?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 de votre aide

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Un exemple t'aidera sûrement à y voir plus clair:

    Coté HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form enctype="multipart/form-data" method="post" action="/axiom/fr/admin/upload" class="ui-widget">
    	<input type="file" name="files[]">
    	<input type="file" name="files[]">
    	<input type="file" name="files[]">
    	<input type="file" name="files[]">
    	<input type="file" name="files[]">
    	<input type="submit" value="Envoyer" class="ui-button ui-widget ui-state-default ui-corner-all" role="button" aria-disabled="false">
    	<input type="button" id="btnadd" value="Ajouter" class="ui-button ui-widget ui-state-default ui-corner-all" role="button" aria-disabled="false">
    </form>
    Coté 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
     
            if (isset($_FILES["files"])) {
                foreach ($_FILES["files"]["error"] as $key => $error) {
                    if ($error == UPLOAD_ERR_OK) {
                        $tmp_name = $_FILES["files"]["tmp_name"][$key];
                        $name = $_FILES["files"]["name"][$key];
                        $path = APPLICATION_PATH . "/webroot/upload/$name";
                        if (move_uploaded_file($tmp_name, $path)) {
                            self::$_response->addMessage(i18n('admin.files.upload.ok', $name), MESSAGE_WARNING);
                        }
                        else {
                            self::$_response->addMessage(i18n('admin.files.upload.nok', $name), MESSAGE_ALERT);
                        }
                    }
                }
            }

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Pour info, avec les navigateurs récents et mis à jour (excepté IE 9) tu peux utiliser l'attribut "multiple" pour permettre le téléchargement multiple avec un seul champ. Avec cette option on peut sélectionner plusieurs fichiers en maintenant la touche Ctrl appuyée (il faut que les fichiers soient dans le même répertoire).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="file" name="files[]" multiple="multiple" />
    Pour le traitement c'est identique à ce qu'à indiqué Benjamin Delespierre

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Merci de votre aide mais je viens de tester et ça ne marche toujours pas..

    Nouveau 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
    <html>
    	<head>
    		<title>upload</title>
    	</head>
    <body>
    <?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
    if (isset($_FILES["fichier"])) {
                foreach ($_FILES["fichier"]["error"] as $key => $error) {
    //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 = 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;
    }
    }
    }
    ?>
    </body>
    </html>
    Lorsque je clique sur le bouton "submit" 3 erreurs apparaissent :
    Warning: basename() expects parameter 1 to be string, array given in C:\wamp\www\Barre de progression\upload.php on line 8
    Warning: filesize() expects parameter 1 to be string, array given in C:\wamp\www\Barre de progression\upload.php on line 10
    Warning: strrchr() expects parameter 1 to be string, array given in C:\wamp\www\Barre de progression\upload.php on line 12
    ainsi que le message :
    Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore aviVous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore aviVous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore aviVous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi
    Pouvez-vous me dire a quoi elles correspondent ? Merci

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Excusez-moi je suis nouveau..

    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
     
    <html>
    	<head>
    		<title>upload</title>
    	</head>
    <body>
    <?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
    if (isset($_FILES["fichier"])) {
                foreach ($_FILES["fichier"]["error"] as $key => $error) {
    //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 = 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;
    }
    }
    }
    ?>
    </body>
    </html>

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    On dirait que tu n'as pas tenu compte de mon exemple: il ne suffit pas de boucler sur $_FILES pour que ton code marche miraculeusement.

    Pour accéder au nième fichier dans la liste, il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tmp_name = $_FILES["files"]["tmp_name"][$key];
    Donc ta boucle est mal formée. Refais là en partant de mon exemple.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Désolé mais je viens de débuter en php c'est pour cela que je fais des erreurs je pense de débutant encore..

    Code modifié :
    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
     
    //Début de la boucle des inputs
    if (isset($_FILES["fichier"])) {
                foreach ($_FILES["fichier"]["error"] as $key => $error) {   
    $dossier = 'upload/';
    $fichier = basename($_FILES['fichier']['name'][$key]);
    $taille_maxi = 20971520;
    $taille = filesize($_FILES['fichier']['tmp_name'][$key]);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt');
    $extension = strrchr($_FILES['fichier']['name'], '.');
    //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 = uniqId().$extension;
    $tmp_name = $_FILES["fichier"]["tmp_name"][$key];
    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 bien

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    On s'approche.

    Quelques erreurs:
    Ligne 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension = strrchr($_FILES['fichier']['name'][$key], '.');
    Ligne 29
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(move_uploaded_file($_FILES['fichier']['tmp_name'][$key], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
    Et pense à indenter correctement qu'on puisse te relire

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Je vous remercie de votre aide cela marche parfaitement ! Par contre j'ai encore deux petites questions si vous pouvez encore m'aider, cela concerne l'envoie multiple de mail (je dois faire comme pour les type="file" c'est-à-dire mettre name=email[] ?) et ma deuxième question et le multi upload marche parfaitement sauf que lorsque je ne remplie pas les parcourir, quand je fais submit il me renvoie : Upload effectué avec succès !Upload effectué avec succès !Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore aviVous devez uploader un fichier de type png, gif, jpg, jpeg, txt, doc, mp3 ou encore avi

    Merci de votre aide et désolé du dérangement encore

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tu as oublié de mettre une sécurité sur $_FILE.

    De cette façon:
    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
     
    <?php
    //Début de la boucle des inputs
    if (isset($_FILES["fichier"])) {
     
        foreach ($_FILES["fichier"]["error"] as $key => $error) {
            if ($error == UPLOAD_ERR_OK) { // *********** ICI ************* //
                $dossier = 'upload/';
                $fichier = basename($_FILES['fichier']['name'][$key]);
                $taille_maxi = 20971520;
                $taille = filesize($_FILES['fichier']['tmp_name'][$key]);
                $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt');
                $extension = strrchr($_FILES['fichier']['name'], '.');
     
                //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 = uniqId().$extension;
                    $tmp_name = $_FILES["fichier"]["tmp_name"][$key];
                    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;
                }
            }
            else {
                echo "Error lors de l'upload du fichier";
            }
        }
    }
    ?>
    Pour l'envoi multiple d'emails, tu peux utiliser la même forme pour le nom du champ input (par exemple name="destinations[]"). Coté PHP tu réccupère un tableau tout simple.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Merci de votre aide encore. Je n'ai pas compris la sécurité pour $FILES et pour l'envoi de mails je pense que j'ai saisi le raisonnement avec le array.

    Cordialement

  13. #13
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $error == UPLOAD_ERR_OK
    Permet de vérifier que l'envoi du fichier à bien été effectué et que le champ n'a pas été laissé vide

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    D'accord c'est ce que je cherchais merci beaucoup. Une dernière question comment faire pour que le message : "Upload effectué avec succès !" n'apparaisse pas 4 fois si l'utilisateur upload 4 fois des fichiers.

    Cordialement

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est quelque chose que tu devrais savoir faire par toi même.

    On pourrait faire ça avec un compteur tout simple, ça ressemblerait à:
    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
     
    <?php
    //Début de la boucle des inputs
    if (isset($_FILES["fichier"])) {
     
        $upload_results = array();
        foreach ($_FILES["fichier"]["error"] as $key => $error) {
            if ($error == UPLOAD_ERR_OK) {
                $dossier = 'upload/';
                $fichier = basename($_FILES['fichier']['name'][$key]);
                $taille_maxi = 20971520;
                $taille = filesize($_FILES['fichier']['tmp_name'][$key]);
                $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.mp3', '.doc', '.docx', '.avi', '.txt');
                $extension = strrchr($_FILES['fichier']['name'], '.');
     
                //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 = uniqId().$extension;
                    $tmp_name = $_FILES["fichier"]["tmp_name"][$key];
                    $upload_results[$fichier] = move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier);
                }
                else {
                    echo $erreur;
                }
            }
            else {
                echo "Error lors de l'upload du fichier";
            }
        }
     
        echo count(array_keys($upload_results[$fichier], true, true)) . " fichiers envoyés avec succès";
        echo count(array_keys($upload_results[$fichier], false, true)) . " fichiers n'ont pas été envoyés";
    }
    ?>
    Je te laisse peaufiner tout ça.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Je n'ai pas compris la fonction array_keys.. et ni pourquoi vous avez créé un array désolé. Je pensais qui fallait faire un if

    Cordialement

  17. #17
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,

    Utilise strtolower pour l'extension sinon les fichiers avec les extensions en Majuscule ne passe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in_array(strtolower($extension), $extensions)
    Je n'ai pas compris la fonction array_keys.. et ni pourquoi vous avez créé un array désolé.
    array est un tableau pour stocker plusieurs valeurs.

    A+.

  18. #18
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    comme décrit dans la doc de array_keys, cette fonction sert deux buts: déterminer si un élément est présent dans un tableau et obtenir les clés des éléments d'un tableau. Dans notre cas, on s'en sert pour trouver les retours true et false renvoyés par move_uploaded_file afin de les compter et n'afficher un message qu'une seule fois.

  19. #19
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Quand on comprend pas, la meilleure méthode est encore de commencer par regarder sur le manuel

    Donc array_keys retourne les clés d'un tableau avec éventuellement en deuxième paramètre une fonction de tri, et en troisième paramètre le mode de comparaison de la fonction de tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $upload_results[$fichier] = move_uploaded_file(...);
    $upload_results stocke le résultat de move_uploaded_file qui retourne soit true soit false.

    en faisant array_keys($upload_results[$fichier], true, true) on retourne donc le tableau des fichiers qui ont été téléchargés, et avec array_keys($upload_results[$fichier], false, true) le tableau des fichiers qui ne l'ont pas été.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 124
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup de votre aide vous m'avez beaucoup aidé et désolé de la gène encore !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [1.3.5] Probleme multi upload
    Par hellipse dans le forum Struts 1
    Réponses: 0
    Dernier message: 21/08/2008, 15h32
  2. Probleme d'upload
    Par FreshVic dans le forum Struts 1
    Réponses: 10
    Dernier message: 22/05/2006, 17h15
  3. [JSP] Problème d'upload de fichiers
    Par Ludo_xml dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/09/2005, 11h20
  4. [uploadfile] - Probleme pour upload
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/07/2005, 12h28
  5. [Upload] probleme d upload de fichier
    Par Stef784ever dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2005, 17h45

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