Se connecter avec
S'enregistrer | Connectez-vous

Envoie de pièce jointe par formulaire en php

Dernière réponse : dans Programmation

Bonsoir,

C'est en désespoir de cause que je viens vers vous.
Je suis en train de créer un site pour mon travail. Il y a sur le site un formulaire pour les demandes de devis. Et j'ai besoin d'y mettre la possibilité d'envoyer un document avec la demande.
Et là, ça se complique.

Du côté HTML, nous avons :
Citation :
<form action="envoi.php" method="post" name="formulaire" onSubmit="return check();">
Raison sociale<br><input type="text" name="raison_sociale" /><br>
Nom et prénom*<br><input type="text" name="nom" /><br>
Adresse e-mail*<br><input type="text" name="email" /><br>
Téléphone<br><input type="text" name="telephone" /><br>
Joindre un fichier<br><input name="fichier" type="file" /><br>
Votre demande*<br><textarea name="demande" cols="60" rows="8"></textarea><br>
<input type="submit" value="Envoyer" /></form>


Et côté php :
Citation :
<?php
$TO = "xxx@gmail.com";
$sujet="Demande de devis";
$h = "From: " . $TO;

$message = "";

while (list($key, $val) = each($HTTP_POST_VARS)) {
$message .= "$key : $val\n";
}
$rs = $_POST['raison_sociale'];
$nom = $_POST['nom'];
$email = $_POST['email'];
$rs = $_POST['raison_sociale'];
$telephone = $_POST['telephone'];
$demande = $_POST['demande'];
$fichier = $_FILES['fichier'];

$infos="
Raison sociale : $rs
Nom : $nom
E-mail : $email
Téléphone : $telephone
Demande : $demande
";

mail($TO, $sujet, $infos, $email);

Header("Location: http://www.yyy.fr");

?>

J'ai bien trouvé des scripts tout prêts, mais impossibles à mettre en place dans mon site. J'ai lu des sujets similaires, mais je ne parviens pas à les rapporter à ma situation.

Concrètement, ce que je souhaiterais :
- taille du fichier jusqu'à 4Mo;
- vérifier le type MIME (.doc, .docx, .pdf, .odt, .txt., .rtf).

Je remercie d'avance les personnes qui pourront m'aider à y voir plus clair.
Lassé par la pub ? Créez un compte
Expert Programmation

Tu peux essayer d'utiliser ce que j'ai fait à http://www.g33k-zone.org/post/2009/10/05/Envoyer-un-ema...

Pour vérifier le type mime, tu peux soit te baser sur l'extension avec la petite fonction suivante:
  1. <?php
  2. function bonfichier($fichier) {
  3. $ok = array('doc', 'docx', 'pdf', 'odt', 'txt', 'rtf');
  4. $infos = pathinfo($fichier);
  5. if (in_array($infos['extension'], $ok)) {
  6. return true; // Extension autorisée
  7. } else {
  8. return false; // Extension refusée
  9. }
  10. }

Sinon, tu peux utiliser mime_content_type() qui te retournera le type MIME.

Et pour la limite de 4Mo, il suffit de regarder la valeur de $_FILES['fichier']['size']

Alors, après avoir regardé ton lien, ça ne m'avance pas beaucoup ^^ .
Je m'explique.
Il faut d'abord que le script php upload le fichier envoyé, qu'il le stock puis qu'il l'envoie et l'efface du dossier.
Et pour tout ça, je n'ai pas la moindre idée de comment faire.
Expert Programmation

Tu as toute la doc sur http://php.net/move_uploaded_file:
  1. <?php
  2. $uploads_dir = '/uploads';
  3. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  4. if ($error == UPLOAD_ERR_OK) {
  5. $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  6. $name = $_FILES["pictures"]["name"][$key];
  7. move_uploaded_file($tmp_name, "$uploads_dir/$name");
  8. }
  9. }


Tu peux donc modifier en:
  1. <?php
  2. $uploads_dir = '/uploads';
  3. foreach ($_FILES["fichier"]["error"] as $key => $error) {
  4. if ($error == UPLOAD_ERR_OK && $_FILES["fichier"]<(4*1024*1024)) {
  5. $tmp_name = $_FILES["fichier"]["tmp_name"][$key];
  6. $name = $_FILES["fichier"]["name"][$key];
  7. move_uploaded_file($tmp_name, "$uploads_dir/$name");
  8. }
  9. if (!bonfichier("$uploads_dir/$name")) {
  10. unlink("$uploads_dir/$name");
  11. echo "Erreur avec l'extension";
  12. } else {
  13. // Ici on crée le mail et on l'envoie
  14. }
  15. }
Lassé par la pub ? Créez un compte
Tom's guide dans le monde