Joindre un fichier à un formulaire de contact

Fermé
3615pizza Messages postés 8 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 14 octobre 2014 - 27 févr. 2013 à 16:55
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 1 mars 2013 à 22:38
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 :


<?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:

4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 févr. 2013 à 10:38
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
$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
1
3615pizza Messages postés 8 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 14 octobre 2014
28 févr. 2013 à 11:50
Merci pour tes remarques.

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...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 févr. 2013 à 15:09
cette ligne me parrait etrange
// enfin on envoi le mail
mail($destination, $sujet, $texte.$attachement, $headers);

$texte.$attachement ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 févr. 2013 à 15:12
un tuto pas mal pour phpmailer:
https://stephaneey.developpez.com/tutoriel/php/phpmailer/

et mets des test
si fichier joint et bien uploadé => on ajoute le fichier
0
3615pizza Messages postés 8 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 14 octobre 2014
1 mars 2013 à 12:27
C'est le tuto que j'ai essayé en premier, mais je dois louper quelque chose quelque part malheureusement.
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... :/
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 1/03/2013 à 13:06
- 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
0
3615pizza Messages postés 8 Date d'inscription mercredi 27 février 2013 Statut Membre Dernière intervention 14 octobre 2014
1 mars 2013 à 15:28
Je l'héberge dès que possible, oui, avec mes codes à jour.

ça vous permettra aussi de voir directement le formulaire dans son contexte. C'est très gentil à vous de me répondre quoi qu'il arrive ! Merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
1 mars 2013 à 22:38
je t'ai envoyé un MP
0