1. #1
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juillet 2004
    Messages : 509
    Points : 176
    Points
    176

    Par défaut vérifier si un input file multiple est rempli

    Salut à tous,
    j'ai un petit script pour envoyé un mail avec plusieurs pièces jointes, mais je n'arrive pas a vérifier si mon input file contient au moins un fichier.
    je tout tient sur une page qui vérifie les autres champs également
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
     
    <?php
    if(!empty($_POST)){
    	extract($_POST);
    	$valid =true;
     
    	if ($ville=="---"){
    		$valid=false;
    		$erreurville = "Veuillez selectionner une ville";
    	}	
     
    	if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$mail_expediteur)){
    		$valid= false;
    		$erreurmail = "Votre email n'est pas valide";
    	}
    	if (empty($mail_expediteur)){
    		$valid=false;
    		$erreurmail = "Veuillez saisir votre email";
    	}
    	if (empty($nom_expediteur)){
    		$valid=false;
    		$erreurnom = "Veuillez saisir votre nom";
    	}
    	if (empty($prenom_expediteur)){
    		$valid=false;
    		$erreurprenom = "Veuillez saisir votre prénom";
    	}
    	if (empty($sujet)){
    		$valid=false;
    		$erreurtitre = "Veuillez saisir un titre";
    	}	
     
    	if (empty($texte_message)){
    		$valid=false;
    		$erreurmessage = "Veuillez saisir un message";
    	}	
     
    // Cela ne fonctionne pas
    if ($_FILES['attach']['tmp_name']==""){
    		$valid=false;
    		$erreurpj= "Veuillez saisir une PJ";
    	}
     
    	if($valid){
     
     
        if(isset($_FILES) && (bool) $_FILES) {
            $AllowedExtensions = ["pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt"];
            $files = [];
            $server_file = [];
            foreach($_FILES as $name => $file) {
                $file_name = $file["name"];
                $file_temp = $file["tmp_name"];			
     
                foreach($file_name as $key) {
                    $path_parts = pathinfo($key);
                    $extension = strtolower($path_parts["extension"]);
                    if(!in_array($extension, $AllowedExtensions)) { die("Extension de fichier non valide"); }
                    $server_file[] = "./{$path_parts["basename"]}";
                }
                for($i = 0; $i<count($file_temp); $i++) { move_uploaded_file($file_temp[$i], $server_file[$i]); }
            }
     
     
     
            $to = "123@gmail.com";
    		$nom_expediteur = mb_strtoupper($_POST["nom_expediteur"]);
            $from = "456@free.fr";
            $subject = stripslashes($_POST["sujet"]);
            //$message = $_POST["texte_message"];
    	$message = "Mail de l'expéditeur : ".$mail_expediteur."\r\n
    	Nom de l'expéditeur : ".$radiociv." ".$nom_expediteur." ".$prenom_expediteur."\r\n\r\n
    	La personne ci-dessus vous a contacté(e) à partir de votre site.\r\n
    	Si vous désirez lui répondre, il vous suffit de répondre à ce message.\r\n
    	Demande concernant un poste à ".$ville." \r\n\r\n
    	Voici le contenu de son message :\r\n
    	Message : ".$_POST["texte_message"]."";
            $headers = "From: $from";
     
     
     
            $semi_rand = md5(time());
            $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
            $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
            $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
            $message .= "--{$mime_boundary}\n";
            $FfilenameCount = 0;
            for($i = 0; $i<count($server_file); $i++) {
                $afile = fopen($server_file[$i],"rb");
                $data = fread($afile,filesize($server_file[$i]));
                fclose($afile);
                $data = chunk_split(base64_encode($data));
                $name = $file_name[$i];
                $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
                    "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
                    "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                $message .= "--{$mime_boundary}\n";
            }
            if(mail($to, $subject, $message, $headers)) {
                echo "<p>mail envoyé à $to!</p>";
            } else {
                echo "<p>le mail n'a pas pu etre envoyé !</p>";
            }
        }
    ?>
    <form method="post" action="recru.php" enctype="multipart/form-data">
    				<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
    				<div class="form-group">
    					<h4 class="color5"><i class="icon-arrow-right6"> </i>  Votre Nom<span class="text-danger">*</span> :</h4>
    					<div class="input-group col-sm-12">
    					<input class="form-control" type="text" placeholder="Nom" name="nom_expediteur" id="nom_expediteur" value="<?php
    					if (!empty($_POST["nom_expediteur"])){echo htmlspecialchars($_POST["nom_expediteur"],ENT_QUOTES);}
    					?>" style="text-transform:uppercase" />
    					</div>
    					<?php if(isset($erreurnom)){ echo '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurnom.'</span>'; }?>
    				</div>
    				</div>				
     
                                       .../....
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
    				<div class="form-group">				
    					<h4><i class="icon-arrow-right6"> </i> Message <span class="text-danger">*</span> :</h4>
    					<textarea class="form-control" rows="10" placeholder="Message" name="texte_message" id="texte_message" onFocus="this.value='' "><?php
    					if (isset($_POST["texte_message"])){echo htmlspecialchars($_POST["texte_message"],ENT_QUOTES);}
    					?></textarea>
    					<?php if(isset($erreurmessage)){ echo  '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurmessage.'</span>'; }?>
    				</div>
    				</div>
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">				
    				<div class="form-group">
    					<h4><i class="icon-arrow-right6"> </i>  Pièce(s) jointe(s) à votre message (CV, lettre...) :<br />
    					<small> Formats acceptés : doc, docx ou pdf</small></h4>
    					<div class="input-group col-sm-12">
    					<input type="file" name="attach[]" multiple/>
    					</div>
    					<?php if(isset($erreurpj)){ echo '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurpj.'</span>'; }?>
    				</div>	
    				</div>
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">		
    				<p style="font-size:10px" class="text-danger">* Champs obligatoires</p>
    					<div class="col-xs-6 col-sm-6 text-left">
    					<input class="btn btn-custom" type="submit" name="envoi_message" id="submit_btn"  value="Envoyer" />
    					</div>
    					<div class="col-xs-6 col-sm-6 text-right">					
    					<input class="btn btn-default " type="reset" value="Effacer" />
    					</div>
    				</div>
     
     
    				</form>
    je ne vois pas comment vérifier si ce champs contient au moins une pièce jointe.
    Merci d'avance de votre aide

    Cdt

  2. #2
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 216
    Points : 20 306
    Points
    20 306

    Par défaut

    Bonjour,

    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( empty($_FILES]) )
    {
    Voir aussi les messages d'erreurs de chargement de fichiers

    2/ Il faut EVITER d'utiliser extract($_POST); !

    Avertissement
    N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.).
    Si vous le faites, par exemple, pour rendre compatible un vieux code avec register_globals à Off de façon temporaire, assurez-vous d'utiliser l'une des constantes flags qui n'écrasent pas les valeurs, comme EXTR_SKIP. Sachez aussi que vous devez maintenant extraire dans le même ordre que celui défini dans variables_order du php.ini.
    Avertissement
    Cette façon de faire n'est pas recommandée et est uniquement documentée ici pour bien comprendre le comportement. L'utilisation de la directive register_globals est obsolète et appeler la fonction extract() sur des données partagées comme les variables $_FILES est, comme mentionné ci-dessus, un risque potentiel pour la sécurité. Si vous rencontrez ce problème, cela signifie que vous avez écrit votre code de la mauvaise manière pour au moins 2 raisons.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  3. #3
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juillet 2004
    Messages : 509
    Points : 176
    Points
    176

    Par défaut

    re,
    y a une erreur dans ton code tu as mis ])

    tu le place ou ???

  4. #4
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 216
    Points : 20 306
    Points
    20 306

    Par défaut

    Euhhh... c'était pas difficile à trouver... si ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( empty($_FILES) )
    {
    Et tu le places... Dans Ton C...*
    Bref : au bon endroit.










    * Dans Ton Code (qu'avais-tu imaginé ??)
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  5. #5
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    juillet 2004
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juillet 2004
    Messages : 509
    Points : 176
    Points
    176

    Par défaut

    j'avais corrigé,
    mais cela ne fonctionne pas

    je l'ai place voir ci dessous
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
    <?php
    if(!empty($_POST)){
    	extract($_POST);
    	$valid =true;
     
    	if ($ville=="---"){
    		$valid=false;
    		$erreurville = "Veuillez selectionner une ville";
    	}	
     
    	if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$mail_expediteur)){
    		$valid= false;
    		$erreurmail = "Votre email n'est pas valide";
    	}
    	if (empty($mail_expediteur)){
    		$valid=false;
    		$erreurmail = "Veuillez saisir votre email";
    	}
    	if (empty($nom_expediteur)){
    		$valid=false;
    		$erreurnom = "Veuillez saisir votre nom";
    	}
    	if (empty($prenom_expediteur)){
    		$valid=false;
    		$erreurprenom = "Veuillez saisir votre prénom";
    	}
    	if (empty($sujet)){
    		$valid=false;
    		$erreurtitre = "Veuillez saisir un titre";
    	}	
     
    	if (empty($texte_message)){
    		$valid=false;
    		$erreurmessage = "Veuillez saisir un message";
    	}	
     
    // ton code ci-dessous
    	if(empty($_FILES)){
    			$valid=false;
    			$erreurpj = "Veuillez joindre au moins un CV";	
    	}
     
    	if($valid){
     
     
        if(isset($_FILES) && (bool) $_FILES) {
            $AllowedExtensions = ["pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt"];
            $files = [];
            $server_file = [];
            foreach($_FILES as $name => $file) {
                $file_name = $file["name"];
                $file_temp = $file["tmp_name"];			
     
                foreach($file_name as $key) {
                    $path_parts = pathinfo($key);
                    $extension = strtolower($path_parts["extension"]);
                    if(!in_array($extension, $AllowedExtensions)) { die("Extension de fichier non valide"); }
                    $server_file[] = "./{$path_parts["basename"]}";
                }
                for($i = 0; $i<count($file_temp); $i++) { move_uploaded_file($file_temp[$i], $server_file[$i]); }
            }
     
     
     
            $to = "123@gmail.com";
    		$nom_expediteur = mb_strtoupper($_POST["nom_expediteur"]);
            $from = "456@free.fr";
            $subject = stripslashes($_POST["sujet"]);
            //$message = $_POST["texte_message"];
    	$message = "Mail de l'expéditeur : ".$mail_expediteur."\r\n
    	Nom de l'expéditeur : ".$radiociv." ".$nom_expediteur." ".$prenom_expediteur."\r\n\r\n
    	La personne ci-dessus vous a contacté(e) à partir de votre site.\r\n
    	Si vous désirez lui répondre, il vous suffit de répondre à ce message.\r\n
    	Demande concernant un poste à ".$ville." \r\n\r\n
    	Voici le contenu de son message :\r\n
    	Message : ".$_POST["texte_message"]."";
            $headers = "From: $from";
     
     
     
            $semi_rand = md5(time());
            $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
            $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
            $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
            $message .= "--{$mime_boundary}\n";
            $FfilenameCount = 0;
            for($i = 0; $i<count($server_file); $i++) {
                $afile = fopen($server_file[$i],"rb");
                $data = fread($afile,filesize($server_file[$i]));
                fclose($afile);
                $data = chunk_split(base64_encode($data));
                $name = $file_name[$i];
                $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
                    "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
                    "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                $message .= "--{$mime_boundary}\n";
            }
            if(mail($to, $subject, $message, $headers)) {
                echo "<p>mail envoyé à $to!</p>";
            } else {
                echo "<p>le mail n'a pas pu etre envoyé !</p>";
            }
        }
    ?>
    <form method="post" action="recru.php" enctype="multipart/form-data">
    				<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
    				<div class="form-group">
    					<h4 class="color5"><i class="icon-arrow-right6"> </i>  Votre Nom<span class="text-danger">*</span> :</h4>
    					<div class="input-group col-sm-12">
    					<input class="form-control" type="text" placeholder="Nom" name="nom_expediteur" id="nom_expediteur" value="<?php
    					if (!empty($_POST["nom_expediteur"])){echo htmlspecialchars($_POST["nom_expediteur"],ENT_QUOTES);}
    					?>" style="text-transform:uppercase" />
    					</div>
    					<?php if(isset($erreurnom)){ echo '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurnom.'</span>'; }?>
    				</div>
    				</div>				
     
                                       .../....
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
    				<div class="form-group">				
    					<h4><i class="icon-arrow-right6"> </i> Message <span class="text-danger">*</span> :</h4>
    					<textarea class="form-control" rows="10" placeholder="Message" name="texte_message" id="texte_message" onFocus="this.value='' "><?php
    					if (isset($_POST["texte_message"])){echo htmlspecialchars($_POST["texte_message"],ENT_QUOTES);}
    					?></textarea>
    					<?php if(isset($erreurmessage)){ echo  '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurmessage.'</span>'; }?>
    				</div>
    				</div>
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">				
    				<div class="form-group">
    					<h4><i class="icon-arrow-right6"> </i>  Pièce(s) jointe(s) à votre message (CV, lettre...) :<br />
    					<small> Formats acceptés : doc, docx ou pdf</small></h4>
    					<div class="input-group col-sm-12">
    					<input type="file" name="attach[]" multiple/>
    					</div>
    					<?php if(isset($erreurpj)){ echo '<span class="label label-danger"><i class="icon-cross"> </i> '.$erreurpj.'</span>'; }?>
    				</div>	
    				</div>
     
    				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">		
    				<p style="font-size:10px" class="text-danger">* Champs obligatoires</p>
    					<div class="col-xs-6 col-sm-6 text-left">
    					<input class="btn btn-custom" type="submit" name="envoi_message" id="submit_btn"  value="Envoyer" />
    					</div>
    					<div class="col-xs-6 col-sm-6 text-right">					
    					<input class="btn btn-default " type="reset" value="Effacer" />
    					</div>
    				</div>
     
     
    				</form>

Discussions similaires

  1. Input file multiple et 1 fichier par http request
    Par Seb33300 dans le forum JavaScript
    Réponses: 4
    Dernier message: 14/03/2012, 02h14
  2. Récupérer les valeurs d'un input file multiple
    Par identifiant_bidon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/08/2011, 15h04
  3. Tester si un champ select multiple est rempli ou non
    Par JackBeauregard dans le forum PHP & SGBD
    Réponses: 2
    Dernier message: 04/02/2009, 18h11
  4. un input file personnalisé est ce possible?
    Par KingOfSweetness dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 12/07/2007, 11h04
  5. Input File multiples
    Par odelayen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 21/02/2005, 14h46

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