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 :

vérifier si un input file multiple est rempli


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    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
    Invité
    Invité(e)
    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.

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    re,
    y a une erreur dans ton code tu as mis ])

    tu le place ou ???

  4. #4
    Invité
    Invité(e)
    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é ??)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    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 Général 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 & Base de données
    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