[RESOLU] Envoi des données formulaire web avec fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Envoi des données formulaire web avec fichier

Re: Envoi des données formulaire web avec fichier

par ACAPhilou » 19 sept. 2016, 16:35

Un tout grand merci pour votre aide. Pour le moment ça donne le résultat que je souhaitais. Je vais regarder pour phpmailer. Merci. A bientôt ^^

Re: Envoi des données formulaire web avec fichier

par moogli » 19 sept. 2016, 15:02

envoie le fichier dans le mail => https://github.com/PHPMailer/PHPMailer
y a un exemple avec pièce jointe dans la doc en bas de page.

sinon $dossier . $fichier contient ce que tu veux. tu as le risque qu'il soit écrasé si un autre fichier à le même nom.

@+

Re: Envoi des données formulaire web avec fichier

par ACAPhilou » 19 sept. 2016, 14:58

@Moogli: merci beaucoup, ça fonctionne :-))
Juste une dernière question: est-ce possible d'envoyer le nom du fichier téléchargé sur le serveur dans le mail qui m'est envoyé? Sinon la pour le moment je ne sais pas savoir si le visiteur a laisser un fichier et si oui, lequel.
Merci.

Re: Envoi des données formulaire web avec fichier

par moogli » 19 sept. 2016, 13:23

salut,

vire l'affichage des messages pour garder la fonctionnalité de redirection.
<?php
if (move_uploaded_file($_FILES['fichierlogo']['tmp_name'], $dossier . $fichier)) { //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
          echo 'Upload effectué avec succès !';
        } else { //Sinon (la fonction renvoie FALSE).
          echo 'Echec de l\'upload !';
        }
devient par exemple $uploaded = move_uploaded_file($_FILES['fichierlogo']['tmp_name'], $dossier . $fichier) ;

pour le reste utilise la librairie PHPMailer pour envoyer l'email avec la pièce jointe ;)
c'est relativement simple à utiliser et mache le boulot pour les pièces jointes, entêtes etc.

Pour le message d'erreur c'est la même chose il faut l'afficher que si derrière on n'effectue pas de redirection.
et le mieux c'est de l'afficher que sur la page du formulaire ;)

@+

Re: Envoi des données formulaire web avec fichier

par ACAPhilou » 18 sept. 2016, 20:29

bonjour. MErci pour cette réponse. Mais j'arrive à faire les deux actions (envois mail + envois fichier) séparément. Ce que je n'arrive pas, c'est combiner les deux.
Par quel code dois-je remplacer l'Echo ici pour qu'il renvoi vers une page à moi? J'ai essayé avec header('Location: form-success.htm'); mais cela ne fonctionne pas.

Re: Envoi des données formulaire web avec fichier

par or 1 » 17 sept. 2016, 22:39

il n'est pas possible de rediriger vers une page après avoir fait un echo. en affichant les erreurs, une erreur apparaitrait.
une solution est de faire une page form-success.htm avec upload réussi et une sans upload.

Envoi des données formulaire web avec fichier

par ACAPhilou » 17 sept. 2016, 19:36

Bonjour,
j'ai crée un formulaire web en html avec traitement fichier php et les données sont envoyées par email.
J'ai rajouté la possibilité d'envoyer un fichier en plus de toutes les autres données.
Ca fonctionne mais pas tout à fait comme je le voudrais.
Avant que je n'ajoute le traitement du fichier, lorsqu'on cliquait sur "envoyer"/submit, le visiteur était redirigé vers une page de mon site (succes.html). Maintenant, il m'indique seulement "fichier envoyé correctement".
Je voudrais donc renvoyer vers la page comme avant mais je n'y arrive pas.
Deuxième soucis: le fichier est bien uploadé sur mon serveur. Je voudrais aussi:
soit rajouter dans le mail qu'un fichier a été joint et le nom de ce fichier
soit le mettre en attachement au mail (j'imagine que c'est moins secur? ).
Le formatage du nom du fichier ne fonctionne pas non plus.
voici le code du fichier .php:
<?php
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE','[email protected]'); // remplacer par email production après config
define('MAIL_SUJET','Recapitulatif de demande (BETA Version V0.1)');
// vérification des champs contact
if (empty($_POST['name']))
$message .= "Votre nom<br/>";
if (empty($_POST['email']))
$message .= "Votre email<br/>";
// si un champ est vide, on affiche le message d'erreur à la page erreur.htm
if (strlen($message) > strlen($msg_erreur)) {
 header('Location: form-error.htm');
 exit();
// sinon c'est ok on envoi le mail
} else {
foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}
$dossier = 'uploads/';
$fichier = basename($_FILES['fichierlogo']['name']);
$taille_maxi = 1000000;
$taille = filesize($_FILES['fichierlogo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['fichierlogo']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['fichierlogo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['name']} "
 ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
// préparation du corps du mail
$mail_corps .= "Bonjour $name\n";
$mail_corps .= "Nous avons bien recu votre demande  et nous vous en remercions.\n";
$mail_corps .= "Voici le recapitulatif de votre demande:\n";

$mail_corps .= "Commande de :\n";
$mail_corps .= "$typecommande\n";
$mail_corps .= "$qte\n";
$mail_corps .= "$choix_couleur_impression_ballon\n";
$mail_corps .= "$couleur\n";
$mail_corps .= "$name\n";
$mail_corps .= "$prenom\n";
$mail_corps .= "$societe\n";
$mail_corps .= "$email\n";
$mail_corps .= "$telephone\n";
$mail_corps .= "$tva\n";
$mail_corps .= "$adresse\n";
$mail_corps .= "$cp\n";
$mail_corps .= "$localite\n";
$mail_corps .= "$email\n";
$mail_corps .= "$devis\n";
$mail_corps .= "$commentaire\n";
$mail_corps .= "Notre service client validera votre demande dans les meilleurs delais.";
$mail_corps .= "$fichierlogo\n";
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
 //Le mail est bien expédié message sur page destinataire
 header('Location: form-success.htm');
 exit();
 //Le mail n'a pas été expédié message sur erreur
 header('Location: form-error.htm');
 exit();
}
}
?>
Merci d'avance de m'aider à corriger le code.