Pb pour joindre fichier a formulaire HTML

Papy2B Messages postés 33 Statut Membre -  
 Rook -
Bonjour,

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>
A voir également:

48 réponses

Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
Papy2B Messages postés 33 Statut Membre 1
 
Salut, je te remercie encore pour ta patience mais là c'est moi qui perd patience ca me fait pété les plombs !! y a pas plus simple que toutes ces manips ??? j'y comprend absolument rien, et je vois pas ou on veut en venir, j'ai vu des formulaires ou tout est en script il n'y a pas besoin apparament de creer 2 fichiers pour que ca marche...

Bon sinon chez moi ca marche pas ca m'envois même plus sur mail4.php...Il me dit que le fichier est introuvable.

Mon repertoire est celui là :

http://localhost/FormEnvoiMail/

Dedant il y a les fichiers mail3.php et mail4.php

Je clique sur mail3.php qui s'ouvre, je fais "soumettre" et la ca va sur une page d'erreur en me disant que le fichier est inexistant (il va sur l'adresse suivante : http://localhost/FormEnvoiMail/mail4.php

Deuxiemement, comment il peut m'envoyer un email puisque j'ai pas mis mon adresse mail dedant ???

MERCI
0
Papy2B Messages postés 33 Statut Membre 1
 
PS : je suis pas enervé contre toi hein, bien au contraire !! loool
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Oui j'ai compris, c'est très enervant quand ça ne marche pas et qu'on ne comprend pas pourquoi, mais il y a une raison toute bête là, il faut y croire :o)
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Oui bien sur on aurait pu fusionner les 2 fichiers en un, c'est équivalent. Et non il n'y a pas plus simple que toutes ces manips, il n'y a rien de compliqué là d'ailleurs.

Je ne peux rien te dire de plus, si ça tourne chez moi, il n'y a aucune raison que ça ne fonctionne pas chez toi. Tu as une erreur dans le chemin du fichier apparemment. mail4.php doit bien se trouver dans le même répertoire que mail3.php et si tu n'as pas modifié le script ça devrait fonctionner.

Ah ben si tu n'as pas précisé ton adresse dans le script au bon endroit, c sur que ça fonctionnera pas ; mais avant tu devras modifier une ligne de php.ini, un fichier de configuration pour renseigner ton serveur SMTP, mais on en est pas là...

Pour préciser ton adresse, modifie la ligne:
$destinataire = "toto@tata.fr";

Pour débugguer un programme, il faut y aller pas à pas, on ne peut pas tout faire en même temps, donc 1ère étape: il faut réparer l'erreur que tu rencontres là.

C'est dommage, on est très près du but.
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Je recommence une 2de fois la manip et je te décris les étapes:

1- Je crée un répertoire "form" dans C:\Program Files\EasyPHP1-8\www\

2- je crée un nouveau fichier texte que je nomme mail3.php
2 bis - je crée un nouveau fichier texte que je nomme mail4.php

3 - j'ouvre le premier fichier et je recopie le code suivant:
<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>


3bis - j'ouvre le second fichier et je recopie le code suivant:
<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>


4- j'ouvre EasyPhp, je fais clic droit sur l'icône en bas à droite de l'écran<<Administration<<dans le menu "Apache", je clic sur Ajouter
4 bis- je renseigne un alias et le chemin du répertoire qui est: C:\Program Files\EasyPHP1-8\www\form
4 ter- je valide

5- je redémarre EasyPhp (clic droit sur l'icône<<Redémarrer)

6- clic droit<<Administration, je clic sur le nom de l'alias, puis sur mail3.php

Résultat: j'ai l'erreur suivante:
Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\program files\easyphp1-8\www\formu\mail4.php on line 83

qui est tout à fait normale car je n'ai pas renseigné de SMTP dans php.ini

Normalement tu devrais obtenir la même erreur si tu suis les mêmes étapes!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Papy2B Messages postés 33 Statut Membre 1
 
OUIIIIII
Quel couillon je suis !!!
tu sais quoi ? quand j'ai enregistré les fichiers via notepad++ je selectionnais ds la liste l extension(PHP) et je nomais le fichier mail3
Or il fallait mettre mail3.php !!!
Je suis vraiement dslé on a perdu du temps a cause de ma stupidité !!!

Bref j'ai corrigé et voila les message d erreur que j ai après avoir soumis un fichier ds mail3.php

Warning: fopen(ban_web-762452.png): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 64

Warning: filesize(): Stat failed for ban_web-762452.png (errno=2 - No such file or directory) in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 65

Warning: fread(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 65

Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 66

Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for toto@tata.fr in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 83

Warning: unlink(ban_web-762452.png): No such file or directory in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 87
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
ok ça arrive ; maintenant modifie la ligne de mail4.php
$destinataire = "toto@tata.fr";
et renseigne ton adresse mail.
0
Papy2B Messages postés 33 Statut Membre 1
 
Re :

Alors j ai changer la ligne du mail et mis mon adresse (j'ai mis la bonne adresse mail mais pour ici pour j'utiliserai blabla@bla.fr)

voici la ligne d'erreur que j obtiens maintenant

Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for blabla@bla.fr in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 83
0
Papy2B Messages postés 33 Statut Membre 1
 
Pour info, je suis aller à la ligne 83 dans le fichier mail4.php comme il dit et j'ai cette ligne :

mail($destinataire, "le sujet", $msg, $header);
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Oui comme je le disais plus haut, c'est normal ;o)

On va aller modifier une ligne de php.ini: dans C:\Program Files\EasyPHP1-8\apache, tu ouvre le fichier "php.ini"

Fais une recherche sur "SMTP", est-ce que tu obtiens un résultat?

Dans l'affirmative, tu modifie les 2 lignes qui ressemblent à:
SMTP = smtp.tata.fr
sendmail_from = toto@tata.fr
en renseignant ton FAI et ton adresse mel.
0
Papy2B Messages postés 33 Statut Membre 1
 
ok j'ai modifié comme tu m'as dit,

J'ai refais un test mais j'obtiens toujours la mm ligne d erreur :

Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for monmail@monfai.fr in c:\program files\easyphp1-8\www\formenvoimail\mail4.php on line 83
0
Papy2B Messages postés 33 Statut Membre 1
 
STOP !

C bon !!!!

En fait j'avais pas redemarré les serveurs easyphp et la j ai reessayé et ca marche j ai recu ENFIN (lol) un mail avec mon fichier !

ALORS Maintenant on va ameliorer ca, car comme je t'ai expliqué le code doit normalement apparaitre a l interieur du logiciel et non par des pages en + car là du coup l'utilisation lorsqu'il va cliquer sur ma ribrique "contact" ca va le diriger vers notre fichier (mail3.php ds notre exemple) et donc il n'est plus dans mon site...(pas de baniere, pas le menu sur la gauche etc...)
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Vui j'ai compris mais je ne connais pas du tout ton logiciel... là tu n'as qu'un formulaire à insérer dans ta page. Le fichier mail4.php est indépendant.

Tu ne sais pas comment insérer le formulaire dans ta page?

Ca ne doit pas être compliqué. Eventuellement poste un nouveau sujet ;o)
0
Papy2B Messages postés 33 Statut Membre 1
 
en fait tu peux pas rajouter des pages dans le logiciel, tu peux mettre que les script directement...

Le soucis c'est que dans ton script tu fais appel à une page, en l'occurence mail4.php faudrai que je trouve une astuce pour que ca fasse plutot appel à un autre script.

Grosso modo dans la page de ma rubrique, par exemple la rubrique "contact" je peux entrer directeemnt du texte ou faire appel à un scipt en mettant dans ma page %MAIL3% qui fait appel à une base de données dite "editeur de champs", ici donc au champ "MAIL3" et ce champ je l'ai renseigné en mettant ton code (le code ds mail3.php).

Si tu as le temps, telecharge la demo c pas lourd et tu le desinstalle apres tu vas vite comprendre ce que je veux dire :

https://www.01net.com/telecharger/windows/Internet/editeur_de_site/fiches/50235.html
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Dans les formulaires en général, il y a un attribut "action", donc il y a surement moyen de renseigner ce champs avec ton logiciel, je ne pense pas que ce soit une difficulté.

https://www.lauyan.com/fr/forms.html

Et dsl pas le temps de regarder le fonctionnement de ce logiciel cette semaine.
0
Papy2B Messages postés 33 Statut Membre 1
 
C bon j'ai trouvé !!!

J'ai mis tout mon site dans le repertoire "www" d'easyphp, et ca marche, j'ai du changer par contre mail3.php par index.php dans le code de mail4.php comme ca ca renvois directement à ma page "contact" du site et ca marche, je recois bien les emails et tout.

En revanche, la page mail4.php ("envoyer un autre email") reste sur l'ordi... Je prefererai qu'elle disparaisse (se ferme) lorsqu'on clique sur le lien "envoyer un autre email" comme ca je mettrai à la place "Merci pour vos informations, nous traiterons votre demande dans les meilleurs delais" "cliquez ici pour retourner sur le site"

OU carement, la page s'affiche genre 2 ou 3 secondes avec le message comme quoi je remercie les clients et apres redirection vers la page d'acceuil du site mais bon je pense que c trop compliqué ca...

Qu'en penses-tu ?

PS : ca plante qd je joins d autre extensions que .PNG je suppose que je dois lister ttes les extensions qui existent et rajouter ds le code ?

MERCI
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Modifie la ligne:
print("<br><A href=./mail3.php target=\"principal\"><font size=\"2\">Envoyer un autre mail</font></A>");

à la fin de mail4.php, par exemple:
print("<br><A href=./index.php target=\"principal\"><font size=\"2\">Retour à la page d'accueil</font></A>");

Ainsi tu reviens à la page "index.php", mais je crois que c'est ce que tu as fait, j'ai pas tout suivi.

Tu peux revenir sur la page que tu veux par un clic, il suffit de modifier:
A href=./index.php
et de mettre le nom de la page que tu veux afficher.

Pour le type de fichier pris en compte, j'ai précisé plus haut que toutes les extensions ne sont pas acceptées avec ce programme ; seuls les .doc, .xls, .png, .gif, .bmp passent je crois, peut-être les .txt aussi (je ne peux pas tester là).

C'est la partie suivante du code qui veut ça:
$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";
}
0
Papy2B Messages postés 33 Statut Membre 1
 
c niquel tout ca !!!

Franchement merci t'es trop balaise !!!

bon il me reste plus qu'a rajouter les extensions .pdf .jpg .jpeg .tiff car mes clients vont m'envoyer ou les plans de leur maison oudes photos...

Euh puis-je abuser ? c possible qu'ils envoient plusieurs fichiers en mm temps ? genre 3 maxi...

Si c long ou si c compliqué t'embete pas avec ca...

enfin je dirai que je recois bien les mails avec les fichiers mais ya tjrs des messages "warning" et "notice" sur mail4.php comme ca :
(la j'ai envoyer un fichier .xls)

"Notice: Undefined variable: type2 in c:\program files\easyphp1-8\www\actu\topic4\mail4.php on line 73"
"envoyer un autre email"
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Oué g pas tout compris à son programme :o)

J'avais essayé d'envoyer un .doc et je n'avais pas de message d'erreur. G pas essayé le .xls mais si il n'y a pas d'erreur avec un doc, il devrait pas y en avoir avec xls, c'est bizarre.

Pour prendre en compte les jpg, jpeg et tiff, essaye d'ajouter après:
$type2="image/png";

if($extension=="gif")
{
   $type2="image/gif";
}
else if($extension=="bmp")
{
   $type2="image/bmp";
}
ceci:
else if($extension=="jpg")
{
   $type2="image/jpg";
}
else if($extension=="jpeg")
{
   $type2="image/jpeg";
}
else if($extension=="tiff")
{
   $type2="image/tiff";
}

mais je ne suis pas certaine que ça fonctionne.

Pour prendre en compte le .pdf, j'avoue que je sèche, je vais chercher un peu et je testerai ça ce soir :o)

Enfin, pour avoir la possiblité d'envoyer 3 pièces jointes, c pas sorcier ; il faut ajouter dans le index.php en dessous de:
<input type="file" name="fichier" />

ceci:
<input type="file" name="fichier2" /> 
<input type="file" name="fichier3" />

si ça te va comme présentation, puis modifier le mail4.php, mais je verrai ça ce soir :o)
0
Papy2B Messages postés 33 Statut Membre 1
 
Ok je rajoute ca !

Juste regarde, la fameuse ligne que tu m as demandé de modifier,

print("<br><A href=./index.php target=\"principal\"><font size=\"2\">Retour à la page d'accueil</font></A>");

elle me renvoie sur l'index du formaulaire or je voudrai qu elle me renvoit sur l index du site (localhost/actu/accueil/index.html)

j'ai mis ds tous les sens mais j ai pas eu de bol, toi a mon avis tu vas savoir de suite ou je renseigne ca ! lol
;o)
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
Relis mon message précédent, je viens de l'éditer ;o)

Pour le chemin du répertoire, il faudrait que tu me dise dans quel répertoire se situe mail4.php à partir de localhost. Si il est dans localhost/formulaire/ (ou dans tout autre répertoire directement dans localhost/), alors il faut écrire:
A href=../actu/accueil/index.html
pour atteindre cette page.

Le "../" signifie "remonte d'un cran dans l'arborescence.
0
Papy2B Messages postés 33 Statut Membre 1
 
T o top toi !

Franchement je te remercie !

Je test tout ca :)
0
Papy2B Messages postés 33 Statut Membre 1
 
et target=\"principal\" ca veut dire quoi puisqu on est ds les explications ?
lol
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
de rien :o)

L'attribut "target", tu peux l'enlever, il ne sert à rien ici.

Il permet de cibler un cadre lorsque l'on met en place des Frames, càd d'afficher la source spécifiée dans le lien dans un cadre donné:
<A href=./mail3.php target=\"principal\"><font size=\"2\">Envoyer un autre mail</font></A>

Le programmeur initial avait un jeu de Frames dont l'une s'appellait "principal" et il voulait afficher le contenu de "mail3.php" dans ce cadre lors d'un clic sur le lien.
0
Papy2B
 
1) ca te le fait toi les messages "notice" ou "warning" sur la page mail4.php (celle ou on a "retourner a la page dacceuil") qd tu soumet le formulaire ? (qu on joigne un fichier ou non)

2) Ca retourne bien sur la page d'acceuil mais la page mail4.php reste toujours ouverte

3) La page d acceuil s ouvre mais en petite fenetre qu il fo agrandir, on peut pas faire en sorte qu elle s agrandisse plein ecran direct ? lol

Je sais j'en demande tjrs trop :o)
0
Pi_Xi Messages postés 2274 Statut Membre 149
 
1) J'avais testé chez moi (et là je suis o taff), et je n'avais ni notice, ni warning que je joigne un fichier ou non.

2) Ah c'était ptet à cause du target qui sert à rien!?

3) ben normalement ça devrait ouvrir la page d'accueil dans la fenêtre de mail4.php au même format qu'avant l'envoi.
0
Papy2B Messages postés 33 Statut Membre 1
 
C'est bon ca marche, ca devait etre le "principal" qui foutait la merde...la ca retourne bien ds la mm fenetre a l acceuil.

Par contre j'ai toujours ces messages bizarre quand la page mail4.php apparait :

Notice: Undefined index: fichier in c:\program files\easyphp1-8\www\actu\topic4\mail4.php on line 6

Notice: Undefined index: fichier in c:\program files\easyphp1-8\www\actu\topic4\mail4.php on line 7

Notice: Undefined index: Autres in c:\program files\easyphp1-8\www\actu\topic4\mail4.php on line 70

Retour à la page d'accueil

C'est pas toujours les mm messages selon le fichier que je joins ou que je joins pas...

Ca veut dire quoi ?

Je suis allé dans le ligne qu'il dit a savoir les ligne 6 7 et 70 du fichier mail4.php normalement c'est ces lignes :

Line 6 : $name_file = $_FILES['fichier']['name'];

Line 7 : $source=$_FILES['fichier']['tmp_name'];

Line 70 : $msg .= $_POST['Autres'];
0