Pb pour joindre fichier a formulaire HTML
Rook -
Je suis débutant en HTML. Je viens de faire un site et dans ma page contact j'ai fait un formulaire.
J'ai mis la possibilité au client de me joindre un fichier, le problème c'est que je le recois pas ! comment ca se fait ?
Merci!
Voici mon formulaire :
<FORM enctype="multipart/form-data" action="mailto:blablabla@blablavla.fr" method="post">
<FIELDSET STYLE="background: #FFFFDD ;">
<LEGEND STYLE="background: #E5F5EE ;" <b>Complément de demande :</b></LEGEND>
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="10" WIDTH="95%">
<TR>
<TD WIDTH="70%">
Précisions ou informations concerantn votre demande :<br>
<textarea name="Autres" cols="100" rows="3"></textarea><br>
<br>
Nous joindre un fichier (Plans, photo...) :
<input name=fichier type=file />
</TABLE>
</FIELDSET><br><br>
<CENTER><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="10" WIDTH="95%">
<TR><TH>
<INPUT TYPE=SUBMIT VALUE=" Soumettre formulaire "> <INPUT TYPE=RESET VALUE=" Effacer ">
</TABLE></CENTER>
</FORM>
- Pb pour joindre fichier a formulaire HTML
- Whatsapp formulaire opposition - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
48 réponses
L’utilisation d’un formulaire avec enctype="multipart/form-data" et action="mailto:…" est peu fiable pour recevoir des fichiers joints et nécessite un traitement côté serveur pour gérer l’envoi des pièces jointes.
La solution consiste à remplacer l’action par un script PHP (par exemple mail4.php) qui reçoit le fichier via $_FILES['fichier'], le déplace sur le serveur et construit un message MIME avec pièce jointe avant d’envoyer l’e-mail au destinataire.
En test local, il faut vérifier les chemins (mail3.php vers mail4.php), s’assurer que les balises HTML sont correctement fermées, et configurer un serveur SMTP accessible pour que mail() fonctionne (par exemple via EasyPHP).
Une fois le script en place et le serveur SMTP opérationnel, l’attache peut être reçue, en veillant à renseigner l’adresse du destinataire dans mail4.php.
Je fais quoi maintenant ?
:o)
COurrage, on va y arriver...
la fonction mailto() permet d'envoyer un mail, pas de joindre un fichier, il va falloir procéder différemment, en utilisant un script PHP par exemple.
http://www.asp-php.net/ressources/bouts_de_code.aspx?id=83
et aussi:
formulaire php fichier joint
Dis-moi si tu rencontres des soucis!
Bon courage :o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBon j'ai fait un copier coller de ton formulaire avec le fichier joint. J'ai mis mon adresse mail, et ca ne marche toujours pas, c'est même pire, IE plante et m'affiche un rapport d'erreur...
Quand je met ENCTYPE="TEXT/PLAIN" ca marche bien pour le contenu du formulaire je recois bien toutes les données mais des que je remplace par "multipart/form-data" et que je joins un fichier la ca plante...
Personne ne pourrai reprendre mon code et modifier la ligne qui merde ? ca serait plus simple car je comprend vraiement rien au code moi..
.lol
MERCI
C'est normal que ça plante si tu envois une autre extension, car il n'y a pas d'instructions dans ce cas (je viens de m'apercevoir que ce code n'est pas complet!)
Par ailleurs, la valeur "text/plain" ne prend en compte que les données du formulaire, tu ne peux pas l'utiliser pour joindre un fichier.
Envoi ton code ;o)
<FORM enctype="multipart/form-data" action="mailto:blablabla@blablavla.fr" method="post">
<FIELDSET STYLE="background: #FFFFDD ;">
<LEGEND STYLE="background: #E5F5EE ;" <b>Complément de demande :</b></LEGEND>
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="10" WIDTH="95%">
<TR>
<TD WIDTH="70%">
Précisions ou informations concerantn votre demande :<br>
<textarea name="Autres" cols="100" rows="3"></textarea><br>
<br>
Nous joindre un fichier (Plans, photo...) :
<input name=fichier type=file />
</TABLE>
</FIELDSET><br><br>
<CENTER><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="10" WIDTH="95%">
<TR><TH>
<INPUT TYPE=SUBMIT VALUE=" Soumettre formulaire "> <INPUT TYPE=RESET VALUE=" Effacer ">
</TABLE></CENTER>
</FORM>
Ben j'ai fait encore aucune modif, j'avais tout simplement echangé mon code avec celui que tu m'as donné..Lol
Mais ca faisait planter IE (message d erreur).
Et puis comme je disais j y connais rien, si je modifie mon fichier j'ai peur de faire des conneries a moins qu on m explique exactement ou je dois modifier...
Bon je v quand mm essayer mais c pas gagné..
Non ! j'avais juste copier mail4.php je pensais pas qu'il fallait mettre l autre aussi...
Dslé ;o)
Je v voir ca
EN fait il faut que je te dise une info que j'ai omis de te dire mais qui je vois a son importance..
Je fais mon site via un logiciel qui fait tout TOWEB.
Donc si tu veux il me demande le nom de mes rubriques etc.. je définis pas moi même le code que j utilise et les extensions.
Cependant il me laisse ajouter du code HTML si je le desire. Cependant je reste à l interieur du logiciel, donc je vois pas comment créer 2 pages différentes dans la meme rubriques "contact" de mon site.. je suis obligé de mettre le code à la suite ou alors je sait pas comment faire...
En fouillant dans le repertoir du site j'ai vu des fichier avec les extensions .xml
J'ai trouvé ca aussi en en ouvrant un <?xml version="1.0" encoding="ISO-8859-1" ?>
C'est pour ca que je demandais qu on modifie directement mon code car là je suis perdu...lol
C'est pas possible de mettre tout le code à la suite dans la même page ?
Tout d'abord, pour le formulaire, tu as oublié de fermer des balises </TR></TD>, et des guillemets aussi. J'ai apporté qq petites modifs à ton code:
<FORM enctype="multipart/form-data" action="./mail4.php" method="post">
<FIELDSET STYLE="background: #FFFFDD ;">
<LEGEND STYLE="background: #E5F5EE ;" <b>Complément de demande :</b></LEGEND>
<TABLE BORDER="0" CELLSPACING="2" CELLPADDING="10" WIDTH="95%">
<TR>
<TD WIDTH="70%">Précisions ou informations concernant votre demande :<br>
<textarea name="Autres" cols="100" rows="3"></textarea>
<br><br>Nous joindre un fichier (Plans, photo...) :
<input type="file" name="fichier" />
</TD>
</TR>
</TABLE>
</FIELDSET><br><br>
<CENTER>
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="10" WIDTH="95%">
<TR>
<TH>
<INPUT TYPE="SUBMIT" VALUE=" Soumettre formulaire ">
<INPUT TYPE="RESET" VALUE=" Effacer ">
</TH>
</TR>
</TABLE>
</CENTER>
</FORM>
pour le fichier mail4.php:
<html>
<body>
<center>
<?
$name_file = $_FILES['fichier']['name'];
$source=$_FILES['fichier']['tmp_name'];
move_uploaded_file($source, "./".$name_file);
$extension=get_extension($name_file);
$type="text/plain";
if($type=="doc")
{
$type="text/vnd.ms-word";
}
else if($type=="xls")
{
$type="text/vnd.ms-excel";
}
$type2="image/png";
if($extension=="gif")
{
$type2="image/gif";
}
else if($extension=="bmp")
{
$type2="image/bmp";
}
function get_extension($filename)
{
$parts = explode('.',$filename);
$last = count($parts) - 1;
$ext = $parts[$last];
return $ext;
}
//----------------------------------
// Construction de l'entête
//----------------------------------
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .= $_POST['Autres'];
$msg .= "\r\n";
if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");
$attachment = fread($fp, filesize($file));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}
$destinataire = "toto@tata.fr";
mail($destinataire, "le sujet", $msg, $header);
if($name_file!="")
{
unlink($name_file);
}
print("<br>\n");
print("<br><A href=./mail3.php target=\"principal\"><font size=\"2\">Envoyer un autre mail</font></A>");
?>
</center>
</body>
</html>
:o)
C'est exactement ce que j'ai fait mais windows n'a pas l'air de reconnaitre cette extension... ca m 'apparait comme un fichier qu'il reconnait pas...
Comment mon logiciel où tous les fichiers sont en .xml va savoir qu'il peut ouvrir ces fichiers, si ca se trouve il peut mm pas les lire vu que c'est pas les mêmes extensions ?
J'ai fait les 2 fichiers mail3.php et mail4.php
Je les ai mis dans le repertoire ou se trouve l index.html du site
mais bon ca ne marche pas et pour cause, le logiciel que j utilise à sa propre hirarchie et ses codes ou je ne sais quoi donc ce que je lui rajoute il en tiens pas compte...je peux pas ajouter des pages manuellement comme on est en train de faire, donc je suis obligé de rentrer dans le logiciel d'aller ds ma page contact dans la partie texte, d'y inserer un champ texte, par exemple %MAIL4%.
En fait cela signifie qu'il renvois vers le champ MAIL4. le champs MAIL4 est en fait le code que j ai copier collé de ce que tu appelle toi MAIL4.PHP
Le probleme c'est que ca renvois qur mail4.php et la ca sort donc de mon site pour aller sur ta page, mais l utilisateur n'est plus dans mon site...
C LA MERDE
telecharge la demo du logiciel tu comprendra peut etre mieux...lol
https://www.lauyan.com/fr/index.html
C'est gratuit (demo) c 'est pas gros
tu n'as pas besoin de ce logiciel pour faire ce que l'on cherche à ajouter ; tu peux utiliser le bloc note, ou mieux télécharger Notepad++
On peut dans un premier temps faire fonctionner nos 2 fichiers indépendemment de ton site et l'intégrer plus tard, éventuellement par un lien vers le fomulaire si on ne trouve pas d'autre solution.
Par contre pour que ça fonctionne, tu es obligé de passer par un serveur php, je te propose donc d'installer EasyPhp, comme son nom l'indique il est très simple d'utilisation ;o)
http://www.01net.com/windows/Internet/serveur_ftp/fiches/14744.html
Php est un langage serveur et doit donc passer par un serveur pour être interprété. Ca sonne chinois car tu n'en a jamais entendu parler, mais il n'y a rien d'obscur là-dedans, on peut y arriver ensemble.
Alors j'ai installer tout ce beau monde à savoir notepad++ et eastphp.
J'ai recréé les deux fichier mail3.php et mail4.php avec notepad++ je les ai pour l'instant enregistré sur mon bureau.
J'ai lancé easyphp et là j'ai ce message qui s'affiche : le port d'apache (80) est occupé par inetinfo.exe
C un pb ?
Je clique sur ok et la j ai deux feux, un rouge avec apacha a coté et un vert avec MySQL démarré
Voila ou j'en suis :o)
Alors pour le conflit, tu fais clic droit sur le fichier "httpd.conf" qui se trouve à l'emplacement:
C:\Program Files\EasyPHP1-8\apache\conf
et tu clic sur "Edit with Notepad++"
Puis tu fais une recherche (CTRL+F) sur "Port 80", tu ajoute un "#" au début de la ligne pour la commenter et tu ajoute la ligne (sans le "#"):
Port 8080
Ainsi il n'y aura plus de conflit.
Ensuite pour atteindre tes pages avec EasyPhp, il faut que tu places tes fichiers dans le répertoire:
C:\Program Files\EasyPHP1-8\www
1- Dans www/, tu crée un répertoire, tu mets tes 2 fichiers dedans,
2- puis clic droit sur l'icône de EasyPhp<<Administration (en bas de l'écran à droite). Dans la première liste nommée Apache, tu clic sur "Ajouter", tu tape un nom pour l'alias et tu rentres le nom du chemin du répertoire (par exemple C:\Program Files\EasyPHP1-8\www\FormEnvoiMail), puis tu valide.
3- Ensuite clic droit sur l'icone EasyPhp<<Redémarrer,
4- puis Administration et tu clic sur le nom de ton alias. Si tout fonctionne bien, les deux noms de tes fichiers s'affichent, tu clic sur mail3.php et le formulaire s'affiche.
Par la suite, il faudra placer le répertoire du site entier dans ce répertoire "www/".
Donc une page d erreur quoi...
J'ai pas de menu
http://localhost/FormEnvoiMail/mail4.php
La page est introuvable
:o(
Pourtant elle y est
quand je clique dessus elle apparait d'ailleur y a marqué que ca c normal :
\n"); print("
Envoyer un autre mail"); ?>
Bref je vois toujours pas ou on veut en venir car maintenant comment je fais le lien avec mon site ? je veux dire comment mon formaulaire va apparaitre a l interieur de mon site et pas une page a part ?
faut déjà voir si ce script marche, je vais tester en local là. Il va surement falloir que tu modifie une ligne du php.ini dans le répertoire apache, on verra ça quand tu n'auras plus ton erreur d'emplacement de fichier.
Après on ajoutera un <a href="...">Envoyer un fichier</a>, sur ta page si ça te va. J'y connais rien moi au logiciel que tu utilise, j'ai toujours tout tapé à la main pour faire un site.
Tu as bien placé "mail4.php" dans le même répertoire que mail3.php? g pas cette erreur chez moi, et tout fonctionne à merveille ^^
Ca m'impressionne toujours la rapidité avec laquelle le mail arrive à destination! :o)
Les 2 fichiers sont biens dans le même répertoire....
J'attend tes explications pour les modifs dont tu parles :)
MERCI pour ta patience...
\n"); print("
Envoyer un autre mail"); ?>
Voila...
Ils e passe rien apres...
On peut pas dire que ca marche quoi ! lol