Joindre un fichier à un formulaire de contact
                    
        
     
             
                    3615pizza
    
        
    
                    Messages postés
            
                
     
             
            8
        
            
                                    Statut
            Membre
                    
                -
                                     
Alain_42 Messages postés 5413 Statut Membre -
        Alain_42 Messages postés 5413 Statut Membre -
        Bonjour à tous, 
Je suis nouvelle, et j'ai fortement besoin de vos lumières !
Voilà, je suis habituée à tout ce qui est html, css mais dès qu'on me parle de php, ça devient compliqué !
Je vous explique, je suis en train de mettre au point un formulaire de contact composé de champs simples :
Nom, prénom, entreprise, texte ET fichier.
Or, j'aimerai que ce fichier, que l'utilisateur upload depuis son ordinateur, soit, lui aussi envoyé par mail avec les autres données du formulaire.
Jusqu'à maintenant j'ai essayé plusieurs codes, qui me paraissent tous assez corrects mais il y a toujours un problème : soit l'email ne part tout simplement pas, soit il part sans la pièce jointe, soit la pièce jointe ne s'affiche pas du tout comme prévu !
Voici mon dernier code :
Le mail que je reçois est complet, mais lorsque je tente d'ouvrir la pièce jointe, on m'apprend qu'il n'a pas été décodé de la bonne façon... et je ne peux donc pas l'ouvrir.
Avez vous déjà eu ce genre d'expérience ?
Savez-vous comment je peux régler ce problème, ou connaissez-vous un code qui fonctionnerait ?
Cela fait deux jours entiers que je parcours le web à la recherche du bon code, et le code ci dessus est celui qui fonctionne le mieux jusqu'à présent.
Je vous remercie donc par avance du temps que vous m'accorderez et de l'aide que vous m'apporterez.
Elodie
                
            
                
    
    
    
        Je suis nouvelle, et j'ai fortement besoin de vos lumières !
Voilà, je suis habituée à tout ce qui est html, css mais dès qu'on me parle de php, ça devient compliqué !
Je vous explique, je suis en train de mettre au point un formulaire de contact composé de champs simples :
Nom, prénom, entreprise, texte ET fichier.
Or, j'aimerai que ce fichier, que l'utilisateur upload depuis son ordinateur, soit, lui aussi envoyé par mail avec les autres données du formulaire.
Jusqu'à maintenant j'ai essayé plusieurs codes, qui me paraissent tous assez corrects mais il y a toujours un problème : soit l'email ne part tout simplement pas, soit il part sans la pièce jointe, soit la pièce jointe ne s'affiche pas du tout comme prévu !
Voici mon dernier code :
<?php
if ((isset($_FILES['fichier']['name'])&&($_FILES['fichier']['error'] == UPLOAD_ERR_OK))) {
$chemin_destination = 'F:\\EasyPHP5.2.10\\www\\TNCIS\\upload\\';
move_uploaded_file($_FILES['fichier']['tmp_name'], $chemin_destination.$_FILES['fichier']['name']);
}
?>
<?php
// Destinataire du mail
$destination = "elodie.maizeray@gmail.com";
// Expediteur du mail
$expediteur   = "AD";
// sujet du mail
$sujet = "Demande de devis";
// Les headers pour un mail multiparts
$headers= "MIME-Version: 1.0\n";
$headers.= "From: ".$_POST["email"]." <".$_POST["email"].">\n";
$headers.= "Content-type: multipart/mixed;\n";
// Chaine permettant de différencier les différentes parties du mail
$limite = '_parties_'.md5(uniqid (rand()));
$headers.= " boundary=\"----=$limite\"\n\n";
// Première partie, corps du mail en HTML
$texte = "------=$limite\n";
$texte.= "Content-type: text/html; charset=\"iso-8859-1\"\n\n";
$texte.= " Name: {$_POST['name']}"."<br>";
$texte.= " Society: {$_POST['company']}"."<br>";
$texte.= " Mail: {$_POST['mail']}"."<br>";
$texte.= " Phone number: {$_POST['phone']}";
$texte.= " Services needed: {$_POST['services']}"."<br>";
$texte.= " from: {$_POST['from']}"."<br>";
$texte.= " to: {$_POST['to']}";
$texte.= " Message : {$_POST['msg']}";
// Traitement pour attacher une PJ
// Dans mon exemple, il s'agit d'un fichier pdf, il faut mettre le bon mime type
$attachement = "\n------=$limite\n";
$attachement .= "Content-Type: application/pdf; name=\$_FILES['fichier']['name']\n";
$attachement .= "Content-Transfer-Encoding: base64\n";
$attachement .= "Content-Disposition: attachment; filename=\$_FILES['fichier']['name']\"\n\n";
// Ca y est on joint le fichier en l'encodant en base 64
$attachement .= chunk_split(base64_encode($_FILES['fichier']['name']));
// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);
echo'Vos données entrées : '.'<br/>';
if(isset($_POST['envoi'])){
foreach($_POST as $index=>$valeur){
echo '- '.$index.' : '.$valeur.'<br/>';
}
}
else {
// erreur lors de l'envoi du mail
echo "Un problème s'est produit lors de l'envoi du message";
}
?>
Le mail que je reçois est complet, mais lorsque je tente d'ouvrir la pièce jointe, on m'apprend qu'il n'a pas été décodé de la bonne façon... et je ne peux donc pas l'ouvrir.
Avez vous déjà eu ce genre d'expérience ?
Savez-vous comment je peux régler ce problème, ou connaissez-vous un code qui fonctionnerait ?
Cela fait deux jours entiers que je parcours le web à la recherche du bon code, et le code ci dessus est celui qui fonctionne le mieux jusqu'à présent.
Je vous remercie donc par avance du temps que vous m'accorderez et de l'aide que vous m'apporterez.
Elodie
        A voir également:         
- Joindre un fichier à un formulaire de contact
 - Whatsapp formulaire opposition - Guide
 - Comment réduire la taille d'un fichier - Guide
 - Comment ouvrir un fichier epub ? - Guide
 - Fichier bin - Guide
 - Impossible de supprimer un fichier - Guide
 
4 réponses
                        
                    petite remarque:
tu as mis
$chemin_destination = 'F:\\EasyPHP5.2.10\\www\\TNCIS\\upload\\';
ce code n'est pas "portable" le jour ou tu passes chez un hébergeur ça ne marchera plus, il faut mettre une adresse relative par rapport a ton script php
ensuite pour l'envoi du mail vas voir la classe phpmailer, qui va gérer pour toi tous les pb de frontiere, pièce jointe etc..
et attention le from: doit être ton adresse à toi
    
                tu as mis
$chemin_destination = 'F:\\EasyPHP5.2.10\\www\\TNCIS\\upload\\';
ce code n'est pas "portable" le jour ou tu passes chez un hébergeur ça ne marchera plus, il faut mettre une adresse relative par rapport a ton script php
$chemin_destination = 'TNCIS/upload/';
ensuite pour l'envoi du mail vas voir la classe phpmailer, qui va gérer pour toi tous les pb de frontiere, pièce jointe etc..
et attention le from: doit être ton adresse à toi
                        
                    - tu faits tes test apparemment sur ton serveur local easyPhp , n'as tu pas un hebergeur ? 
- ensuite donnes nous le code que tu as fait pour voir ou est le pb
    
                - ensuite donnes nous le code que tu as fait pour voir ou est le pb
    
    
    
    
Je vais retourner voir du côté de phpmailer, mais j'espérais qu'il y ait une autre solution comme je n'ai pas très bien compris...
// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);
$texte.$attachement ?
https://stephaneey.developpez.com/tutoriel/php/phpmailer/
et mets des test
si fichier joint et bien uploadé => on ajoute le fichier
Disons que je ne sais plus très bien si j'arrive à avoir du recul sur ce problème de pièce jointe ! Tout ce que j'entreprends s'avère ne pas fonctionner... :/