Envois mail plusieurs fichier

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous !

Je sollicite votre aide afin de m'aider à corriger mon code.
Je ne peu envoyer qu'une seule pièce jointe alors que je souhaite pouvoir envoyer 10 fichiers le tout pour 10Mo.
Pouvez-vous m'aider svp ?

if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));
switch($ext[1]) {default: $attach_type = "application/octet-stream"; break;
case "jpg": case"jpeg": $attach_type = "image/jpeg"; break;
case "png": $attach_type1 = "image/png"; break;
case "bmp": $attach_type1 = "image/bmp"; break;
case "pdf": $attach_type1 = "application/pdf"; break;
case "txt": $attach_type1 = "text/plain"; break;}
	
	if(file_exists($upload_file)) {
	$file = fopen($upload_file, "r");
	$contents = fread($file, filesize($upload_file));
	$encoded_attach = chunk_split(base64_encode($contents));
	fclose($file);}

$EmailDesti		= MAIL_PERSONNEL;
$LeSujet		= utf8_decode($INSCRIPTION." de ".$data['Titre']);

$LeMessageHTML	= "<html><head><meta charset='utf-8'></head><body>"
.$TablO
.$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
.$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
.$Libelle_03." : ".$Fr_Telephone."<br>"
.$Libelle_04." : ".$Fr_Age."<br>"
.$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
.$Libelle_30." : ".strtolower($Fr_Book)."<br>"
.$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
."« ".ucfirst(strtolower($Fr_Motivation))." »"
.$TablF
."</body></html>";

$PieceJointe 	= $upload_file;

//=====On filtre les serveurs qui présentent des bogues.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
//=====Déclaration des messages au format texte et au format HTML.
$message_html 	= $LeMessageHTML;
//=====Lecture et mise en forme de la pièce jointe.
$fichier   		= fopen($PieceJointe, "r");
$attachement 	= fread($fichier, filesize($PieceJointe));
$attachement 	= chunk_split(base64_encode($attachement));
fclose($fichier);
//=====Création de la boundary.
$boundary 		= "-----=".md5(rand());
$boundary_alt 	= "-----=".md5(rand());
//=====Définition du sujet.
$sujet 			= $LeSujet;
//=====Création du header de l'e-mail.
$header = "From: ".$Fr_AdresseMail.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
//=====Envoi de l'e-mail.
if(mail($EmailDesti,$sujet,$message,$header)){


Merci de votre aide.

11 réponses

Résumé de la discussion

Plusieurs développeurs cherchent à envoyer simultanément dix fichiers pesant au total 10 Mo via un formulaire PHP et une gestion d’upload côté serveur. Les échanges montrent que l’utilisation d’un seul champ input et le parcours des tableaux $_FILES nécessitent un foreach et une nomenclature Fr_Photos[] pour itérer chaque fichier. Des solutions évoquées portent sur l’extension des fichiers, le calcul de taille maximale, le traitement en base64 des pièces jointes et la construction correcte des boundaries MIME pour l’e-mail. Certains messages soulignent aussi qu’une bonne structuration HTML (Fr_Photos[] comme nom de champ) et le test préalable des dimensions et du type de chaque fichier évitent des erreurs comme des indices inexistants.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Dis voir .. côté formulaire html .. tes "input" file ... sont bien nommés sous forme d'array ?
    input type = "file" name = "Fr_Photos[]" ..
    

    Sinon..normal qu'il n'en récupère qu'un.....

    bien entendu ... côté php .. tu devras ensuite faire un foreach pour parcourir CHAQUE fichier
    
    $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
    
    if($Fr_Photos){
      foreach ($Fr_Photos as $fichier ){
         $upload_file= $fichier['name'];
         $tmp_name =$fichier['tmp_name'];
         if (move_uploaded_file($tmp_name, $upload_file)) {
            $ext = explode(".", basename( $upload_file ));
             // .. etc...
             // .... le code de traitement à effectuer pour chaque fichier 
             //  ...
        }
      }
    }
    
    1
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Je viens de percuter que tu utilises UN champ INPUT multiple et non pas PLUSIEURS INPUT files ...

    Donc testes ceci :
    $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
    
    $extensions 	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
    $taille_maxi 	= 10485760;
    $nbr_max_file	= 10;
    $erreur = "";
    //na pas oublier de renseigner cette variable :
    $dirToUpload = "repertoire_ou_mettre_les_fichiers/";
    
    if($Fr_Photos){
      
      if (count($Fr_Photos['name']) > $nbr_max_file) {
        $erreur .=  "<li>• Trop de fichiers uploadés</li>";
      }else{
      
      foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
        $tmp_name =$Fr_Photos['tmp_name'][$indice];  
        $upload_type	= $Fr_Photos['type'][$indice];
    
        $extension 	= strrchr($upload_file, '.');
        $taille 	= filesize($tmp_name);
    
        if(!in_array($extension, $extensions)){
          $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
        }else{
          if($taille > $taille_maxi){
            $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
          }else{
             if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
                  $attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));
                  $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
                  $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
                  $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
                  $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
                  $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
      
             }else{
                 $erreur.="<li>• Erreur lors de l'upload </li>";
             }
          }
        }
      }
     }
    }
    
    

    A adapter à ton besoin par la suite bien entendu...
    1
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    que se passe-t-il quand tu envoies plusieurs pièces jointes?
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Bonjour yg_be,

      Une seule s'envoie, la dernière sélectionnée...
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
         
        peux-tu montrer le code complet, et expliquer comment plusieurs sont sélectionnés?
        à quoi servent les lignes 3 à 14?
        0
  4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    c'est toi qui a écrit ce code? à quoi servent les lignes 3 à 14?
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Pardon du retard de réponse, la ligne 3 à 14 imposait l'extension des fichiers et uploadais les fichiers sur le serveur. Mais je crois supprimer tout ça pour faire plus propre.

      Lorsque j'ajoute des fichiers "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" et n'envoie que le "10"

      C'est un
      <input name="upload" id="upload" type="file" multiple>
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Voici tout mon code :
    $upload_file = $_FILES['Fr_Photos']['name'];
    if (move_uploaded_file($_FILES['Fr_Photos']['tmp_name'], $upload_file)) {$ext = explode(".", basename($_FILES['Fr_Photos']['name']));
    
    $PieceJointe 	= $upload_file;
    $EmailDesti		= "Sujet du mail";
    $LeSujet		= utf8_decode($INSCRIPTION." de ".$data['Titre']);
    
    $LeMessageHTML	= "<html><head><meta charset='utf-8'></head><body><div style='font-family: Futura;'>"
    .$TablO
    .$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
    .$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
    .$Libelle_03." : ".$Fr_Telephone."<br>"
    .$Libelle_04." : ".$Fr_Age."<br>"
    .$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
    .$Libelle_30." : ".strtolower($Fr_Book)."<br>"
    .$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
    ."« ".ucfirst(strtolower($Fr_Motivation))." »"
    .$TablF
    ."</div></body></html>";
    
    //=====On filtre les serveurs qui présentent des bogues.
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
    //=====Déclaration des messages au format texte et au format HTML.
    $message_html 	= $LeMessageHTML;
    //=====Lecture et mise en forme de la pièce jointe.
    $fichier   		= fopen($PieceJointe, "r");
    $attachement 	= fread($fichier, filesize($PieceJointe));
    $attachement 	= chunk_split(base64_encode($attachement));
    fclose($fichier);
    //=====Création de la boundary.
    $boundary 		= "-----=".md5(rand());
    $boundary_alt 	= "-----=".md5(rand());
    //=====Définition du sujet.
    $sujet 			= $LeSujet;
    //=====Création du header de l'e-mail.
    $header = "From: ".$Fr_AdresseMail.$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    //=====Création du message.
    $message = $passage_ligne."--".$boundary.$passage_ligne;
    $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
    $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
    //=====Ajout du message au format HTML.
    $message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;
    //=====On ferme la boundary alternative.
    $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout de la pièce jointe.
    $message.= "Content-Type: application/pdf; name=".$upload_file.$passage_ligne;
    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    $message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
    
    //=====Envoi de l'e-mail.
    if(mail($EmailDesti,$sujet,$message,$header)){
    $ok_mail="true";
    
    }else{$erreur.='<div class="erreur-1"><div class="erreur-2"><div class="erreur-3"></div><div class="erreur-4">'.$MESSAGE_ERROR.'</div><div class="erreur-5">'.$ERREUR_ERROR_1.'</div></div></div>';}}
    }}
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ton code ne travaille que sur un seul fichier.
      peux-tu ajouter
      print_r ($_FILES);
      au début de ton code, et partager ce que cela donne?
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Array ( [Fr_Photos] => Array ( [name] => 10.txt [type] => text/plain [tmp_name] => /tmp/phpLCRR1a [error] => 0 [size] => 7 ) )


      Voilà ce que j'ai comme retour...
      0
  7. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    J'ai modifié autant que je peux et voilà le résultat :
    Je ne rencontre que des erreurs :\

    <?php
    $extensions 	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
    $taille_maxi 	= 10485760;
    $nbr_max_file	= 10;
     
    $extension = strrchr($upload_file['name'], '.');
    $taille = filesize($upload_file['tmp_name']);
     
    if(!in_array($extension, $extensions))			{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
    if($taille>$taille_maxi)						{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
    if(count($upload_file['name']) > $nbr_max_file)	{$erreur.="<li>• Trop de fichiers uploadés</li>";}
     
    // Création du message
    if($erreur==""){
     
    foreach($_FILES as $upload_file){
     
    $tmp_name = file_get_contents($upload_file['tmp_name']);
    $attachement = chunk_split(base64_encode($tmp_name));
     
    $EmailDesti		= LE_MAIL;
    $LeSujet		= $data['Titre'];
     
    $LeMessageHTML	= "<html></html>";
     
    //=====On filtre les serveurs qui présentent des bogues.
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){$passage_ligne = "\r\n";}else{$passage_ligne = "\n";}
    //=====Déclaration des messages au format texte et au format HTML.
    $message_html 	= $LeMessageHTML;
    //=====Lecture et mise en forme de la pièce jointe.
    foreach($_FILES as $upload_file){
    $tmp_name = file_get_contents($upload_file['tmp_name']);
    $attachement = chunk_split(base64_encode($tmp_name));
     
    //=====Création de la boundary.
    $boundary 		= "-----=".md5(rand());
    $boundary_alt 	= "-----=".md5(rand());
    //=====Définition du sujet.
    $sujet 			= $LeSujet;
    //=====Création du header de l'e-mail.
    $header = "From: ".$Fr_AdresseMail.$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    //=====Création du message.
    $message = $passage_ligne."--".$boundary.$passage_ligne;
    $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
    $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
    //=====Ajout du message au format HTML.
    $message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;
    //=====On ferme la boundary alternative.
    $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
    //=====Ajout de la pièce jointe.
    $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
    	}
    //=====Envoi de l'e-mail.
    if(mail($EmailDesti,$sujet,$message,$header)){
    $ok_mail="true";
     
    }else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}
    }
    ?>
     
    <input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      ... tu n'as pas du regarder ma suggestion de code .... vu comment tu as écris le tien....

      Par exemple .... où as tu vu que je faisais un
      foreach($_FILES as $upload_file){
      


      Moi j'ai écris :
      $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      if($Fr_Photos){
        foreach ($Fr_Photos as $fichier ){
      


      Ensuite .. comment penses tu que :
      $extension = strrchr($upload_file['name'], '.');
      $taille = filesize($upload_file['tmp_name']);
       
      if(!in_array($extension, $extensions))			{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
      if($taille>$taille_maxi)						{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
      

      puis se faire AVANT le foreach ????


      Je te laisse corriger .... là ce n'est que de la logique.....
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu montrer ce que donne
      print_r ($_FILES);
      après corrections?
      0
  8. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Après plusieurs test, voici ce que j'ai fais mais j'ai encore des soucis :
    $Fr_Photos  = !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
    
    if($Fr_Photos){
      foreach ($Fr_Photos as $upload_file ){
       
    $upload_file = $upload_file['name'];
    $tmp_name   = $upload_file['tmp_name'];
    $extension   = strrchr($upload_file['name'], '.');
    $taille   = filesize($upload_file['tmp_name']);
    $tmp_myname  = file_get_contents($upload_file['tmp_name']);
    $attachement  = chunk_split(base64_encode($tmp_myname));
    
    if (move_uploaded_file($tmp_name, $upload_file)) {
     
    if(!in_array($extension, $extensions))   {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
    if($taille > $taille_maxi)      {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
    if(count($upload_file) > $nbr_max_file)   {$erreur.="<li>• Trop de fichiers uploadés</li>";}
    
    $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
     }}}


    Voici le print_r :
    Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpbhEjC0 [1] => /tmp/phpaNUCrD ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )


    Et voici le code d'erreur :
    Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

    Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

    Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

    Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

    Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

    Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

    Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

    Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83

    Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 79

    Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 83
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      ....
        foreach ($Fr_Photos as $upload_file ){
      	  
      $upload_file	= $upload_file['name']; // ICI !!!!  upload_file = upload_file.. bref.. tu écrase la variable par un morceau d'elle même ... on se retrouve dans les mondes parallèles ... ^^
      


      Ne vois tu pas l'erreur ?

      Encore une fois ... moi j'avais écrit :
       foreach ($Fr_Photos as $fichier ){
           $upload_file= $fichier['name'];
           $tmp_name =$fichier['tmp_name'];
      
      


      Sais tu faire des copier/coller ? Oo
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Comme ça ?
      $Fr_Photos	= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      if($Fr_Photos){
      
      foreach ($Fr_Photos as $fichier){
      $upload_type	= $fichier['type'];
      $upload_file	= $fichier['name'];
      $tmp_name 	= $fichier['tmp_name'];
      
      $extension 	= strrchr($upload_file, '.');
      $taille 	= filesize($tmp_name);
      $tmp_myname 	= file_get_contents($tmp_name);
      $attachement 	= chunk_split(base64_encode($tmp_myname));
      
      if (move_uploaded_file($tmp_name, $upload_file)) {
       
      if(!in_array($extension, $extensions))
      {$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
      if($taille > $taille_maxi)
      {$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";}
      if(count($upload_file) > $nbr_max_file)
      {$erreur.="<li>• Trop de fichiers uploadés</li>";}
      
      $message.= 'Content-type:'.$upload_type.';name='.$upload_file.$passage_ligne;
      $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
      $message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
      $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
      $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
      	}}}
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      ça me parait mieux....
      Mais... est-ce que ça fonctionne chez toi ? A toi de nous le dire ...
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      Encore un petit couac je pense :
      if(count($upload_file) > $nbr_max_file)
      


      A mettre AVANT la boucle et à changer par:
      if(count($Fr_Photos) > $nbr_max_file)
      
      0
    5. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Non ! Voilà pourquoi j'ai dû modifier et re-modifier sans arrêt depuis hier et mes copier/coller sont des catastrophes !

      Voici l'erreur pour une seule pièce jointe :
      Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

      Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

      Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

      Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

      Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

      Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

      Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

      Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

      Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

      Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

      Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

      Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

      Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

      Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

      Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

      Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82

      Notice: Undefined index: type in /home/serv/www/bonjour/inscription.php on line 76

      Notice: Undefined index: name in /home/serv/www/bonjour/inscription.php on line 77

      Notice: Undefined index: tmp_name in /home/serv/www/bonjour/inscription.php on line 78

      Warning: file_get_contents(): Filename cannot be empty in /home/serv/www/bonjour/inscription.php on line 82
      0
  9. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non désolé je ne l'avais pas vu.

    Voici le contenu du
    print_r ($_FILES);
    pour 1 fichier :
    Array ( [Fr_Photos] => Array ( 
    [name] => Array ( [0] => 01.txt ) [type] => Array ( [0] => text/plain )
    [tmp_name] => Array ( [0] => /tmp/phpLvcDNk )
    [error] => Array ( [0] => 0 )
    [size] => Array ( [0] => 7 ) ) )


    Voici le contenu du
    print_r ($_FILES);
    pour 2 fichiers :
    Array ( [Fr_Photos] => Array ( 
    [name] => Array ( [0] => 01.txt [1] => 02.txt )
    [type] => Array ( [0] => text/plain [1] => text/plain )
    [tmp_name] => Array ( [0] => /tmp/phpXBOUcn [1] => /tmp/phpMKQcCp )
    [error] => Array ( [0] => 0 [1] => 0 )
    [size] => Array ( [0] => 7 [1] => 7 ) ) )


    Le code HTML et PHP :
    https://paste2.org/m1Usv7cy

    L'erreur rencontrée dans les 2 cas:
    Notice: Undefined variable: extension in /home/serveur/www/bonjour/inscription.php on line 73

    Notice: Undefined variable: taille in /home/serveur/www/bonjour/inscription.php on line 74

    Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

    Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

    Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

    Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

    Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

    Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

    Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

    Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

    Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

    Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

    Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

    Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

    Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

    Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

    Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

    Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86

    Notice: Undefined index: type in /home/serveur/www/bonjour/inscription.php on line 80

    Notice: Undefined index: name in /home/serveur/www/bonjour/inscription.php on line 81

    Notice: Undefined index: tmp_name in /home/serveur/www/bonjour/inscription.php on line 82

    Warning: file_get_contents(): Filename cannot be empty in /home/serveur/www/bonjour/inscription.php on line 86
    0
  10. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Les fichiers sont uploadés sur le serveur mais j'ai une seule pièce jointe nommée 0 de 194 octets...

    Warning: file_get_contents(/tmp/phpfqFX5W): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95

    Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96

    Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96

    Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98

    Warning: file_get_contents(/tmp/php6naVow): failed to open stream: No such file or directory in /home/serveur/www/bonjour/inscription.php on line 95

    Warning: Illegal string offset 'type' in /home/serveur/www/bonjour/inscription.php on line 96

    Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 96

    Warning: Illegal string offset 'name' in /home/serveur/www/bonjour/inscription.php on line 98

    Array ( [Fr_Photos] => Array ( [name] => Array ( [0] => 01.txt [1] => 02.txt ) [type] => Array ( [0] => text/plain [1] => text/plain ) [tmp_name] => Array ( [0] => /tmp/phpfqFX5W [1] => /tmp/php6naVow ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 7 [1] => 7 ) ) )
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      remplaces le tmpname par :
      $dirToUpload . $upload_file
      


       $attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));

      par :
       $attachement = chunk_split(base64_encode(file_get_contents($dirToUpload . $upload_file)));
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Je n'ai plus de messages d'erreurs, les fichiers ne sont pas uploadés dans le dossier et je reçois une pièce jointe
      ATT00001.txt (240 o)


      Voici le code adapté :
      $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      $extensions 	= array('.jpg','.jpeg','.png','.bmp','.pdf','.txt');
      $taille_maxi 	= 10485760;
      $nbr_max_file	= 10;
      $erreur = "";
      //na pas oublier de renseigner cette variable :
      $dirToUpload = "photos/";
      
      if($Fr_Photos){
        
        if (count($Fr_Photos['name']) > $nbr_max_file) {
          $erreur .=  "<li>• Trop de fichiers uploadés</li>";
        }else{
        
        foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
          $tmp_name 		= $Fr_Photos['tmp_name'][$indice];  
          $upload_type	= $Fr_Photos['type'][$indice];
      
          $extension 		= strrchr($upload_file, '.');
          $taille 		= filesize($tmp_name);
      
          if(!in_array($extension, $extensions)){
            $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
          }else{
            if($taille > $taille_maxi){
              $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
            }else{
               if (move_uploaded_file($dirToUpload.$upload_file, $dirToUpload.$upload_file)) {
                    $attachement = chunk_split(base64_encode(file_get_contents($dirToUpload.$upload_file)));
                    $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
                    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
                    $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
                    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
                    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
        
               }else{
                   $erreur.="<li>• Erreur lors de l'upload</li>";
               }
            }
          }
        }
       }
      }
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      Qu'est-ce que c'est que ça :
      if (move_uploaded_file($dirToUpload.$upload_file, $dirToUpload.$upload_file)) {
      



      .... le "tmp_name" ... il ne fallait le remplacer QUE dans la ligne qui provoquait l'erreur ... celle que je t'avais mis .....
      celle la :
       $attachement = chunk_split(base64_encode(file_get_contents($tmp_name)));
      

      que je te disais de remplacer comme ceci :
      $attachement = chunk_split(base64_encode(file_get_contents($dirToUpload . $upload_file)));
      



      et puis .... dans les lignes suivantes :
                    $message.= 'Content-type:'.$upload_file['type'].';name='.$upload_file['name'].$passage_ligne;
                    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
                    $message.= "Content-Disposition: attachment; filename=".$upload_file['name'].$passage_ligne;
      

      ... faudrait pt'être remplacer les $upload_file['type']. et $upload_file['name']. ... par les variables que nous avons initié avant ... à savoir respectivement $upload_type et $upload_file ....

      Il faut vraiment que tu apprennes à te relire et pas juste à "coller" des bouts de code.... mais tu dois t’astreindre à essayer de les comprendre !!!!
      0
    4. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Les corrections sont faites. L'upload des fichiers s'exécute avec succès dans le dossier, aucun message d'erreur ne s'affiche, le mail est cependant reçu avec une seule pièce jointe.

      $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      $extensions 	= array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
      $taille_maxi 	= 10485760;
      $nbr_max_file	= 10;
      $erreur = "";
      //na pas oublier de renseigner cette variable :
      $dirToUpload = "upload/";
      
      if($Fr_Photos){
        
        if (count($Fr_Photos['name']) > $nbr_max_file) {
          $erreur .=  "<li>• Trop de fichiers uploadés</li>";
        }else{
        
        foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
          $tmp_name =$Fr_Photos['tmp_name'][$indice];  
          $upload_type	= $Fr_Photos['type'][$indice];
      
          $extension 	= strrchr($upload_file, '.');
          $taille 	= filesize($tmp_name);
      
          if(!in_array($extension, $extensions)){
            $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
          }else{
            if($taille > $taille_maxi){
              $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
            }else{
               if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
                    $attachement = chunk_split(base64_encode(file_get_contents($dirToUpload . $upload_file)));
                    $message.= 'Content-type:'.$upload_type.';name='.$upload_file.$passage_ligne;
                    $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
                    $message.= "Content-Disposition: attachment; filename=".$upload_file.$passage_ligne;
                    $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
                    $message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
        
               }else{
                   $erreur.="<li>• Erreur lors de l'upload </li>";
               }
            }
          }
        }
       }
      }
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      Avant l'envoi du mail fais donc un echo de tes variables pour voir ce qu'elles contiennent exactement !
      0
  11. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    J'ai adapté autant que possible et voilà ce qui en sort.
    Ce qui fonctionne :
    - Je ne reçois aucune erreur.
    - Le mail est maintenant en HTML.
    - Je reçois toutes les pièces jointes.
    - L'encodage passe parfaitement.

    Ce qui ne va pas :
    - J'ai une pièce jointe supplémentaire AT00001.txt (240 o)

    functions.php :
    function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){
    
    $header = "From: $Fr_AdresseMail";
     
    // boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
     
    // header for attachment 
    $header.= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\""; 
     
    // multipart boundary 
    $message = "This is a multi-part message in MIME format.\n\n"."--{$mime_boundary}\n"."Content-Type: text/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n"; 
    $message.= "--{$mime_boundary}\n";
     
      //Ajout des pieces jointes si il y en a
      if(!empty($attach)){
        foreach($attach as $pj){
          $file = fopen($pj,"rb");
          $data = fread($file,filesize($pj));
          fclose($file);
          $data = chunk_split(base64_encode($data));
          $fileName = basename($pj);
          $message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
          $message.= "--{$mime_boundary}\n";    
        }
      }
    
    // send
    if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;} 
    
    }


    inscription.php :
    <?php include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php"); ?>
    
    <?php
    if(isset($_POST['Envoyer'])){$erreur="";
    
    // Nettoyage des entrées
    while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
    else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
    
    // Création du message
    if($erreur==""){
    
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
    
    $extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
    $taille_maxi  	= 10485760;
    $nbr_max_file 	= 10;
    $erreur 		= "";
    $dirToUpload 	= "upload/";
    $filesToAttach 	= array();
    
    $header.= "From: ".$Fr_AdresseMail;
    $EmailDesti		= MAIL_PERSONNEL;
    $sujet			= utf8_decode($CASTING_INSCRIPTION." de ".$data['Titre']);
    
    $message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>"
    .$TablO
    .$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
    .$Libelle_02." : ".strtolower($Fr_AdresseMail)
    .$TablF
    ."</body></html>";
    
    //=====Ajout de la pièce jointe.
    $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
    
    if($Fr_Photos){
      
      if (count($Fr_Photos['name']) > $nbr_max_file) {
        $erreur .=  "<li>• Trop de fichiers uploadés</li>";
      }else{
      
        foreach ($Fr_Photos['name'] as $indice=>$upload_file ){
          $tmp_name =$Fr_Photos['tmp_name'][$indice];  
          $upload_type = $Fr_Photos['type'][$indice];
    
          $extension  = strrchr($upload_file, '.');
          $taille  = filesize($tmp_name);
    
          if(!in_array($extension, $extensions)){
            $erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";
          }else{
            if($taille > $taille_maxi){
              $erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
            }else{
               if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {
                  $filesToAttach[] = $dirToUpload . $upload_file;  
               }else{
                 $erreur.="<li>• Erreur lors de l'upload </li>";
               }
            }
          }
        }
      }
    }   
    
    if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
    }
    
    ?>
    
    <?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
    
    <form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
    
    <?php if($erreur){ echo $MESSAGE_ERROR; } ?>
    
    <input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
    
    <button name="Envoyer" type="submit">Envoyer</button>
    
    </form>
    
    <?php }; ?>
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Je fais encore quelques modifications... je te reviens bien vite !
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Je constate aussi un autre soucis :
      Si la taille du fichier est > à
      $taille
      et/ou le nombre de fichier dépasse
      $nbr_max_file
      , le mail part tout de même mais avec ATT00001.txt

      $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      if($Fr_Photos)
      {
        
        if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur .=  "<li>• Trop de fichiers uploadés</li>";}else
        {
          foreach ($Fr_Photos['name'] as $indice=>$upload_file )
      	{
            $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
            $upload_type 	= $Fr_Photos['type'][$indice];
            $extension  	= strrchr($upload_file, '.');
            $taille  		= filesize($tmp_name);
      
            if(!in_array($extension, $extensions)){$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";}
      	  else
      	  {
              if($taille > $taille_maxi)
      		{
      			$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";
      		}
      		else
      		{
                 if (move_uploaded_file($tmp_name, $dirToUpload . $upload_file)) {$filesToAttach[] = $dirToUpload . $upload_file;}else{$erreur.="<li>• Erreur lors de l'upload </li>";}
              }
            }
          }
        }
      
      }
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
         
        Je constate aussi un autre soucis :
        Si la taille du fichier est > à

        $taille

        et/ou le nombre de fichier dépasse

        $nbr_max_file

        , le mail part tout de même

        ... ben.. tu dois vérifier.. avant l'envoie du mail.. qu'il n'y a aucune erreur....
        0
  12. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Il ne me reste plus que le fichier ATT00001.txt a gérer. J'ai lu l'article et je continue a chercher, j'ai essayé d'ajouter des \n ou des -- mais bon, je penses que la pièce jointe est déjà en fin de message... je cherche toujours !

    Voici enfin un code qui fonctionne (sauf erreur de ma part) :
    <?php
    function sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message="",$attach = NULL){
    
    $header = "From: $Fr_AdresseMail";
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
    $header.= "\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/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n\n"; 
    $message.= "--{$mime_boundary}\n";
    
      if(!empty($attach)){
        foreach($attach as $pj){
          $file = fopen($pj,"rb");
          $data = fread($file,filesize($pj));
          fclose($file);
          $data = chunk_split(base64_encode($data));
          $fileName = basename($pj);
          $message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n\n";
          $message.= "--{$mime_boundary}\n";    
        }
      }
    
    if(mail($EmailDesti, $sujet, $message, $header)) {return true;} else {return false;} 
    }
    //####################################################
    
    if(isset($_POST['Envoyer'])){$erreur="";
    
    while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
    else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
    
    $extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf','.txt');
    $taille_maxi  	= 1024;
    $nbr_max_file 	= 10;
    $erreur 	= "";
    $dirToUpload 	= "upload/";
    $filesToAttach 	= array();
    
    $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
    
    if($Fr_Photos)
    {
     
    if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.=  "<li>• Trop de fichiers uploadés</li>";} else {
        foreach ($Fr_Photos['name'] as $indice=>$upload_file )
    	{
          $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
          $upload_type 	= $Fr_Photos['type'][$indice];
          $extension  	= strrchr($upload_file, '.');
          $taille  		= filesize($tmp_name);
     
    if (!in_array($extension, $extensions))							{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
    if ($taille > $taille_maxi)										{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
    if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file))	{$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
        }	
    }
    }
    
    if($erreur==""){
    
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
    
    $header 		= "From: ".$Fr_AdresseMail;
    $EmailDesti		= MAIL_PERSONNEL;
    $sujet			= utf8_decode($data['Titre']);
    
    $message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
    .$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
    .$Libelle_02." : ".strtolower($Fr_AdresseMail)."<br>"
    .$Libelle_03." : ".$Fr_Telephone."<br>"
    .$Libelle_04." : ".$Fr_Age."<br>"
    .$Libelle_05." : ".ucwords(strtolower($Fr_Location))."<br>"
    .$Libelle_30." : ".strtolower($Fr_Book)."<br>"
    .$Libelle_31." : ".strtolower($Fr_Facebook)."<br><br>"
    ."« ".ucfirst(strtolower($Fr_Motivation))." »"
    .$TablF."</body></html>";
    
    
    if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR."</li>";}}
    }
    
    opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);
    ?>
    
    
    <?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
    <form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
    <?php if($erreur){ echo $MESSAGE_ERROR; } ?>
    <input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
    <button name="Envoyer" type="submit">Envoyer</button>
    </form>
    <?php } ?>
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Version finale, tout fonctionne parfaitement !
      Merci à toi Jordane pour ton temps et ta précieuse aide.

      <?php
      function sendEmail($EmailDesti, $Fr_AdresseMail, $sujet, $message = "", $attach = NULL)
      {
      	$header = "From: $Fr_AdresseMail";
      	$semi_rand = md5(time());
      	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
      	$header.= "\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/html; charset=\"UTF-8\"\n"."Content-Transfer-Encoding: 8bit\n\n".$message."\n";
      	if (!empty($attach))
      	{
      		foreach($attach as $indice=>$pj)
      		{
      			$file = fopen($pj, "rb");
      			$data = fread($file, filesize($pj));
      			fclose($file);
      			$data = chunk_split(base64_encode($data));
      			$fileName = basename($pj);
      			$message.= "--{$mime_boundary}\n";
      			$message.= "Content-Type: {\"application/octet-stream\"};\n"." name=\"$pj\"\n"."Content-Disposition: attachment;\n"." filename=\"$fileName\"\n"."Content-Transfer-Encoding: base64\n\n".$data."\n";
      		}
      	}
      	$message.= "--{$mime_boundary}--\n";
      	
      	return mail($EmailDesti, $sujet, $message, $header);
      }
      ?>
      
      
      <?php
      if(isset($_POST['Envoyer'])){$erreur="";
      
      // Nettoyage des entrées
      while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);}
      else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}}
      
      $extensions  	= array('.jpg', '.jpeg','.png','.bmp','.pdf');
      $taille_maxi  	= 10485760;
      $nbr_max_file 	= 10;
      $erreur 		= "";
      $dirToUpload 	= "upload/";
      $filesToAttach 	= array();
      
      $Fr_Photos= !empty($_FILES['Fr_Photos']) ? $_FILES['Fr_Photos'] : NULL;
      
      if($Fr_Photos)
      {
       
      if (count($Fr_Photos['name']) > $nbr_max_file) {$erreur.=  "<li>• Trop de fichiers uploadés</li>";} else {
          foreach ($Fr_Photos['name'] as $indice=>$upload_file )
      	{
            $tmp_name 	= $Fr_Photos['tmp_name'][$indice];  
            $upload_type 	= $Fr_Photos['type'][$indice];
            $extension  	= strrchr($upload_file, '.');
            $taille  		= filesize($tmp_name);
       
      if (!in_array($extension, $extensions))							{$erreur.="<li>• Vous devez uploader un fichier de type jpg, jpeg, png, bmp ou pdf...</li>";} else {
      if ($taille > $taille_maxi)										{$erreur.="<li>• La taille maximale des fichiers ne doit pas dépasser 10Mo</li>";} else {
      if (!move_uploaded_file($tmp_name, $dirToUpload.$upload_file))	{$erreur.="<li>• Erreur lors de l'upload </li>";} else {$filesToAttach[] = $dirToUpload.$upload_file;}}}
      	  
          }
      }
      }
      
      // Création du message
      if($erreur==""){
      
      if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $EmailDesti)){echo "\r\n";} else {echo "\n";}
      
      $header 		= "From: ".$Fr_AdresseMail;
      $EmailDesti		= MAIL_PERSONNEL;
      $sujet			= utf8_decode($data['Titre']);
      
      $message		= "<html><head><meta charset='utf-8'><style>body{font-family:Calibri,'Futura';}</style></head><body>".$TablO
      .$Libelle_01." : ".ucwords(strtolower($Fr_Nom_Prenoms))."<br>"
      .$Libelle_02." : ".strtolower($Fr_AdresseMail)
      .$TablF."</body></html>";
      
      
      if(sendEmail($EmailDesti,$Fr_AdresseMail,$sujet,$message,$filesToAttach)){$ok_mail="true";}else{$erreur.="<li>".$ERREUR_ERROR_1."</li>";}}
      
      opendir('upload');$handle=opendir('upload');while (false !== ($fichier = readdir($handle)))@unlink('upload/'.$fichier);
      
      ?>
      
      <?php if($ok_mail=="true"){ echo $MESSAGE_VALID; }else{ ?>
      <form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data" name="Form">
      <?php if($erreur){ echo $MESSAGE_ERROR; } ?>
      <input name="Fr_Photos[]" id="Fr_Photos" type="file" multiple >
      <button name="Envoyer" type="submit">Envoyer</button>
      </form>
      <?php } ?>
      0