Se connecter avec
S'enregistrer | Connectez-vous

Résolu Envoi fichier joint via formulaire [PHP]

Solutions (4)
Tags :
  • Php
  • Sites Internet
  • Programmation
|
Bonjour,

Je viens de créer un site internet avec une page contact à l'intérieur, mon envoi de mail fonctionne correctement (je passe par mon propre serveur, il est configurer avec Xampp sous Ubuntu 10.04 Alternate et j'utilise Postfix comme messagerie, bref), je voudrais maintenant ajouter la possibilité d'envoyer un fichier joint, j'ai cherché sur bon nombre de forum et internet, mais je n'y arrivais pas, je ne sais pas si je n'arrivais pas à l'adapter à mon besoin ou si cela ne fonctionnait pas, et aussi, à chaque fois, il fallait absolument préciser quel extension le fichier avait, or les utilisateurs qui iront sur le site (que je fais pour une entreprise) pourront envoyer autant des .pdf que des .doc, ou même des images donc je ne saurai pas le format, doit on obligatoirement mettre un type ? Peut on ne pas autorisé tel ou tel extension également par exemple ? Enfin dans le code que j'ai là, il y a l'air d'avoir un moyen d'en mettre plusieurs mais marche-t-il ? Et puis-je vraiment en ajouter autant que je veux ?
Egalement, je ne saurai pas forcément le nom du fichier envoyé donc :s.

Voici mon formulaire ainsi qu'une parti de mon code PHP (avec et sans essai pour le test de joindre un fichier)

Code HTML :

  1. <form action="formmail.php" onSubmit="return checkrequired(this)" method="post" enctype="multipart/form-data" name="form">
  2. <input type=hidden name=subject value=formmail>
  3. <b>
  4. <p style='margin-left:100.8pt'>
  5. Votre nom (entreprise) :
  6. <input name="requirednom"><p>
  7. <p style='margin-left:100.8pt'>
  8. E-mail :
  9. <input name="requiredemail"><p>
  10. <p style='margin-left:100.8pt'>
  11. Région :
  12. <select name="requiredregion">
  13. <option selected value="Choisir">Choisissez une région...
  14. <option value="Alsace">ALSACE
  15. <option value="Aquitaine">AQUITAINE
  16. <option value="Auvergne">AUVERGNE
  17. <option value="Basse Normandie">BASSE NORMANDIE
  18. <option value="Bourgogne">BOURGOGNE
  19. <option value="Bretagne">BRETAGNE
  20. <option value="Centre">CENTRE
  21. <option value="Champagne-Ardenne">CHAMPAGNE ARDENNE
  22. <option value="Corse">CORSE
  23. <option value="Franche Compte">FRANCHE COMPTE
  24. <option value="Haute Normandie">HAUTE NORMANDIE
  25. <option value="Ile de France">ILE DE FRANCE
  26. <option value="Pays de la Loire">PAYS DE LA LOIRE
  27. <option value="Picardie">PICARDIE
  28. <option value="Poitou Charentes">POITOU CHARENTES
  29. <option value="Provence Alpes Cote d'Azur">PROVENCE ALPES COTE D'AZUR
  30. <option value="Midi Pyrenees">MIDI PYRENEES
  31. <option value="Nord pas de Calais">NORD PAS DE CALAIS
  32. <option value="Languedoc Roussillon">LANGUEDOC ROUSSILLON
  33. <option value="Limousin">LIMOUSIN
  34. <option value="Lorraine">LORRAINE
  35. <option value="Rhone Alpes">RHONE ALPES
  36. <option value="Guadeloupe">GUADELOUPE
  37. <option value="Martinique">MARTINIQUE
  38. <option value="Guyane">GUYANE
  39. <option value="Reunion">REUNION
  40. <option value="St Pierre et Miquelon">ST PIERRE ET MIQUELON
  41. </select><p>
  42. <p style='margin-left:100.8pt'>
  43. Objet :
  44. <input name="requiredobjet"><p>
  45. <input type=hidden name=MAX_FILE_SIZE VALUE=8192>
  46. <p style='margin-left:100.8pt'>
  47. Joindre un fichier :
  48. <input type="file" name="fichier"><p>
  49. <p style='margin-left:100.8pt'>
  50. Message :<br>
  51. <textarea name="requiredmessage" rows="10" cols="100"></textarea><p>
  52. <center>
  53. <input type="image" src="envoyer.jpg" border=0 alt="Envoyer">
  54. <a href="contact.htm">
  55. <img src="annuler.jpg" border=0 alt="Annuler"></a>


Code PHP avec essai pour joindre un fichier :

  1. <?php
  2.  
  3. $name_file = $_FILES['fichier']['name'];
  4. $source=$_FILES['fichier']['tmp_name'];
  5.  
  6. move_uploaded_file($source, "./opt/lampp/upload".$name_file);
  7.  
  8. $extension=get_extension($name_file);
  9.  
  10. $type="text/plain";
  11. if($type=="doc")
  12. {
  13. $type="text/vnd.ms-word";
  14. }
  15. else if($type=="xls")
  16. {
  17. $type="text/vnd.ms-excel";
  18. }
  19.  
  20. $type2="image/png";
  21.  
  22. if($extension=="gif")
  23. {
  24. $type2="image/gif";
  25. }
  26. else if($extension=="bmp")
  27. {
  28. $type2="image/bmp";
  29. }
  30.  
  31. function get_extension($filename)
  32. {
  33. $parts = explode('.',$filename);
  34. $last = count($parts) - 1;
  35. $ext = $parts[$last];
  36. return $ext;
  37. }
  38.  
  39. if($_POST['to']!="mamessagerie@gmail.com")
  40. {
  41. $boundary = "-----=".md5(uniqid(rand()));
  42. $header = "MIME-Version: 1.0\r\n";
  43. $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  44. $header .= "\r\n";
  45.  
  46. $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
  47. $msg .= "--$boundary\r\n";
  48. $msg = "Nom: $_POST[requirednom]\n";
  49. $msg .= "E-Mail: $_POST[requiredemail]\n";
  50. $msg .= "Region: $_POST[requiredregion]\n";
  51. $msg .= "Message:\r\n $_POST[requiredmessage]\n";
  52. $msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
  53. $msg .= "Content-Transfer-Encoding:8bit\r\n";
  54. $msg .= "\r\n";
  55.  
  56. $msg .= "\r\n";
  57.  
  58. if($name_file!="")
  59. {
  60. $file = $name_file;
  61. $fp = fopen($file, "rb");
  62. $attachment = fread($fp, filesize($file));
  63. fclose($fp);
  64.  
  65. $attachment = chunk_split(base64_encode($attachment));
  66.  
  67.  
  68. $msg .= "--$boundary\r\n";
  69. $msg .= "Content-Type: $type2; name=\"$file\"\r\n";
  70. $msg .= "Content-Transfer-Encoding: base64\r\n";
  71. $msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
  72. $msg .= "\r\n";
  73. $msg .= $attachment . "\r\n";
  74. $msg .= "\r\n\r\n";
  75. $msg .= "--$boundary--\r\n";
  76. }
  77.  
  78. $recipient = "mamessagerie@gmail.com";
  79. $subject = "$_POST[requiredobjet]";
  80.  
  81.  
  82. $mailheaders = "From: Test<> \n";
  83. $mailheaders .= "Reply-To: $_POST[requiredemail]\n\n";
  84.  
  85. mail($recipient, $subject, $msg, $mailheaders, .$header );
  86. header('Location: contact.html');
  87.  
  88. }
  89.  
  90. if($name_file!="")
  91. {
  92. unlink($name_file);
  93. }
  94. print("<br>\n");
  95. print("<br><A href=./mail3.php target=\"principal\"><font size=2>Envoyer un autre mail</font></A>");
  96. ?>


Code PHP sans essai pour joindre un fichier :

  1. <?php
  2.  
  3.  
  4. $msg = "Nom: $_POST[requirednom]\n";
  5. $msg .= "E-Mail: $_POST[requiredemail]\n";
  6. $msg .= "Region: $_POST[requiredregion]\n";
  7. $msg .= "Message:\r\n $_POST[requiredmessage]\n";
  8.  
  9.  
  10. $recipient = "mamessagerie@gmail.com";
  11. $subject = "$_POST[requiredobjet]";
  12.  
  13.  
  14. $mailheaders = "From: Test<> \n";
  15. $mailheaders .= "Reply-To: $_POST[requiredemail]\n\n";
  16.  
  17. mail($recipient, $subject, $msg, $mailheaders);
  18. header('Location: contact.html');
  19.  
  20.  
  21. ?>



Merci d'avance.

Cordialement, Samuel.
  • Demander des précisions |
  • Alerter
Contenus similaires
Meilleure solution
partage
|
si tu veux créer un formulaire avec envoi de fichier joint, c'est faisable:
http://www.unesourisetmoi.info/formulairepro/nuls3.php
mais dans ce cas il ne faut pas oublier de sécuriser le serveur correctement .... si l'on t'envoie un "virus" ...
:hello: 
  • Alerter
  • Commenter cette solution |
Score
1
òh
òi
|
samuelk a dit :
Merci beaucoup ! J'ai juste à modifier un peu celà pour l'adapter maintenant mais mon envoi de fichier joint fonctionne ! Encore merci !


Cordialement, Samuel.

... de rien ! @+
:hello: 
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci beaucoup ! J'ai juste à modifier un peu celà pour l'adapter maintenant mais mon envoi de fichier joint fonctionne ! Encore merci !


Cordialement, Samuel.
  • Alerter
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par samuelk.
  • Alerter
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS