permettre d'envoyer un pièce jointe

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 : permettre d'envoyer un pièce jointe

par thanos125 » 28 mars 2008, 00:49

merci pour ta réponse, je teste cà et je te dit quoi merci bcp

par Fififox » 26 mars 2008, 08:36

Bon beh essaye avec ça tout en mettant le script à la racine du serveur et dis moi ce qui se passe:
        // Création du message

        $nom_fichier = basename($_FILES['upload_localfile']['name']);
        $nom_fichier = strtr($nom_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        $nom_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $nom_fichier);
        $fichier = file_get_contents($_FILES['upload_localfile']['tmp_name']);

        $frontiere = '-----=' . md5(uniqid(mt_rand()));

        $titre="Fiche Formulaire contact";
        $tete="From:Auteur\r\n";
        $tete .= "MIME-Version: 1.0\r\n";
        $tete .= "Content-type: multipart/mixed; boundary=\"".$frontiere."\"\r\n";

        $corps = '--' . $frontiere . "\r\n";
        $corps .= "Content-type: text/plain; charset=utf-8\r\n\n";
        $corps.="Nom : ".$f_1."\n";
        $corps.="Prenom : ".$f_2."\n";
        $corps.="Adresse,num : ".$f_3."\n";
        $corps.="Code postal : ".$f_4."\n";
        $corps.="Localite; : ".$f_5."\n";
        $corps.="Email : ".$f_6."\n";
        $corps.="Question : ".$f_7."\n"; 

        $corps .= '--' . $frontiere . "\r\n";
        $corps .= 'Content-Type: ' . $_FILES['upload_localfile']['type'] . '; name="'. $nom_fichier . '"' . "\r\n";
        $corps .= 'Content-Transfer-Encoding: base64' . "\r\n";
        $corps .= 'Content-Disposition: attachement; filename="' . $nom_fichier . '"' . "\r\n\n";
        $corps .= chunk_split(base64_encode($fichier),76,'\n') . "\r\n";

        $corps .= '--' . $frontiere . '--' . "\r\n";
EDIT: En fait, on est obligé de chambouler le script car il faut:
- changer le type mime puisque le message est divisé en deux parties (texte puis fichier)
- ajouter des 'frontières' pour délimiter les différentes parties
- rajouter du code pour trouver le fichier envoyé, remplacer les caractères spéciaux et enfin le préparer à être envoyé en le passant en base 64

par thanos125 » 25 mars 2008, 22:27

ben le truc c'est que avant mon formulaire s'envoyais nickel avec un bon formatage du message et mnt il est tt chambouler.. je voudrait exactement le même mais juste avec une fonction d'envoi de pièce jointe... on est obliger de changer tt le reste pour ca?

très gentil de prendre la peine de répondre...

par Fififox » 25 mars 2008, 21:40

Bon, je suis pas sûr que ça soit ce que je pense mais vérifie que ce script se trouve bien à la racine du serveur car le problème semble venir de là...
(y'a bien que le fichier qui pose problème ? --> le contenu du formulaire est bon ?)

par thanos125 » 25 mars 2008, 21:22

merci pour ta réponse c'est cool mais malheureusement ca ne marche pas....
voilà le résulat du formulaire , je recois bien une pièce joiente qui est un fichier texte appeler noname.txt mais pas mon fichier....

Nom : grC)gory
Prenom : siloC)C*
Adresse,num : siloC)C*,nB023
Code postal : 4885
Localite; : siloC)C*
Email : [email protected]
Question : siloC)C*, C c'est cool

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Fififox » 25 mars 2008, 20:16

Salut !
Alors on va remplacer ça :
        // Création du message
        $titre="Fiche Formulaire contact";
        $tete="From:Auteur\n";
        $tete .= "MIME-Version: 1.0\r\n";
$tete .= "Content-type: text/plain; charset=utf-8\r\n";


        
        $corps.="Nom : ".$f_1."\n";
        
        $corps.="Prenom : ".$f_2."\n";
        
        $corps.="Adresse,num : ".$f_3."\n";
        
        $corps.="Code postal : ".$f_4."\n";
        
        $corps.="Localite; : ".$f_5."\n";
        
        $corps.="Email : ".$f_6."\n";
        
        $corps.="Question : ".$f_7."\n"; 
par ça:
        // Création du message

        $nom_fichier = basename($_FILES['upload_localfile']['name']);
        $nom_fichier = strtr($nom_fichier,
                             'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                             'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        $nom_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $nom_fichier);
        $fichier = file_get_contents($_FILES['upload_localfile']['tmp_name']);

        $frontiere = '-----=' . md5(uniqid(mt_rand()));

        $titre="Fiche Formulaire contact";
        $tete="From:Auteur\n";
        $tete .= "MIME-Version: 1.0\n";
        $tete .= "Content-type: multipart/mixed; boundary=".$frontiere."\n";

        $corps = '--' . $frontiere . "\n";
        $corps .= "Content-type: text/plain; charset=utf-8\n\n";
        $corps.="Nom : ".$f_1."\n";
        $corps.="Prenom : ".$f_2."\n";
        $corps.="Adresse,num : ".$f_3."\n";
        $corps.="Code postal : ".$f_4."\n";
        $corps.="Localite; : ".$f_5."\n";
        $corps.="Email : ".$f_6."\n";
        $corps.="Question : ".$f_7."\n"; 

        $corps .= '--' . $frontiere . "\n";
        $corps .= 'Content-Type: ' . $_FILES['upload_localfile']['type'] . '; name="'. $nom_fichier . '"' . "\n";
        $corps .= 'Content-Transfer-Encoding: base64' . "\n";
        $corps .= 'Content-Disposition: attachement; filename="' . $nom_fichier . '"' . "\n\n";
        $corps .= chunk_split(base64_encode($fichier)) . "\n";

        $corps .= '--' . $frontiere . '--' . "\n";
Voilà j'espère que ça va marcher, ça fait un bon bout de temps que je travailles plus avec la fonction mail() alors...

Bonne chance
A+

permettre d'envoyer un pièce jointe

par thanos125 » 25 mars 2008, 18:51

Bonjour à tous, je cherche quelqu'un qui pourrais modifier mon formulaire afin de me permettre de proposer a mes visiteurs de m'envoyer une pièce jointe... pour l'instant tout marche bien, j'ai juste le problème de cette pièce jointe, j'ai essayer d'adapter d'autre formulaire au mien mais je n'y arrive pas.
Je rappelle que ce formulaire a été réalisé via un générateur de formulaire qui ne prend pas en charge les pièces jointe .

je vous remercie beaucoup


voici mon code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<?php

// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n��tes pas certain de ce que vous faites !
if(isset($_POST['submit'])){
	$erreur="";
	// Nettoyage des entr&eacute;es
	while(list($var,$val)=each($_POST)){
	if(!is_array($val)){
		$$var=strip_tags($val);
	}else{
		while(list($arvar,$arval)=each($val)){
				$$var[$arvar]=strip_tags($arval);
			}
		}
	}
	// Formatage des entr&eacute;es
	
	
	$f_4=trim(eregi_replace("[^0-9+]", "", $f_4));

	                               
	
	$f_6=strip_tags(trim($f_6));
	
	// Verification des champs
	if(strlen($f_1)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Nom &raquo; est vide ou incomplet.</span>";
		$errf_1=1;
	}
	if(strlen($f_2)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Prenom &raquo; est vide ou incomplet.</span>";
		$errf_2=1;
	}
	if(strlen($f_3)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Adresse,numéro est vide ou incomplet.</span>";
		$errf_3=1;
	}
	if(strlen($f_4)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Code postal &raquo; est vide ou incomplet.</span>";
		$errf_4=1;
	}
	if(strlen($f_5)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Localité; &raquo; est vide ou incomplet.</span>";
		$errf_5=1;
	}
	if(strlen($f_7)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Question &raquo; est vide ou incomplet.</span>";
		$errf_7=1;
	}
	if($erreur==""){
		// Cr&eacute;ation du message
		$titre="Fiche Formulaire contact";
		$tete="From:Auteur\n";
		$tete .= "MIME-Version: 1.0\r\n";
$tete .= "Content-type: text/plain; charset=utf-8\r\n";


		
		$corps.="Nom : ".$f_1."\n";
		
		$corps.="Prenom : ".$f_2."\n";
		
		$corps.="Adresse,num : ".$f_3."\n";
		
		$corps.="Code postal : ".$f_4."\n";
		
		$corps.="Localite; : ".$f_5."\n";
		
		$corps.="Email : ".$f_6."\n";
		
		$corps.="Question : ".$f_7."\n";
		
		if(mail("[email protected]", $titre, stripslashes($corps), $tete)){
			$ok_mail="true";
		}else{
			$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
		}
	}
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test formulaire</title>
</head>

<body>

 <? if($ok_mail=="true"){ ?>
	<table width='100%' border='0' cellspacing='1' cellpadding='1'>
		<tr><td><span class='txtform'>Le message ci-dessous nous a bien &eacute;t&eacute; transmis, et nous vous en remercions.</span></td></tr>
		<tr><td>&nbsp;</td></tr>
		<tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
		<tr><td>&nbsp;</td></tr>
		<tr><td><span class='txtform'>Nous allons y donner suite dans les meilleurs d&eacute;lais.<br>
		A bientôt.</span></td>
		</tr>
	</table>
<? }else{ ?>
<form action='<? echo $PHP_SELF ?>' method='post' name='Form'>
<table width='100%' border='0' cellspacing='1' cellpadding='1'>
<? if($erreur){ ?><tr><td colspan='2' bgcolor='red'><span class='txterror'><font color='white'><b>&nbsp;ERREUR, votre message n'a pas &eacute;t&eacute; transmis</b></font></span></td></tr><tr><td colspan='2'><ul><?echo$erreur?></ul></td></tr><?}?>
<tr>
  <td colspan='2'><span class='txterror'>Les champs marqu&eacute;s d'un * sont obligatoires</span></td>
</tr>
<tr><td align='right' width='30%'><span class='txtform'>Nom* :</span></td><td><input type='text' style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_1' value='<?echo stripslashes($f_1);?>' size='24' border='0'></td></tr>
<tr>
  <td align='right' width='30%'><span class='txtform'>Pr&eacute;nom* :</span></td>
  <td><input type='text' style='width:200 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_2' value='<?echo stripslashes($f_2);?>' size='24' border='0'></td></tr>
<tr>
  <td align='right' width='30%'><span class='txtform'>Adresse,num* :</span></td><td><input type='text' style='width:200 <?if($errf_3==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_3' value='<?echo stripslashes($f_3);?>' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Code postal* :</span></td><td><input type='text' style='width:200 <?if($errf_4==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_4' value='<?echo stripslashes($f_4);?>' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Localit&eacute;* :</span></td><td><input type='text' style='width:200 <?if($errf_5==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_5' value='<?echo stripslashes($f_5);?>' size='24' border='0'></td></tr>
<tr>
  <td align='right' width='30%'><span class='txtform'>Email* :</span></td><td><p>
    <input type='text' style='width:200 <?if($errf_6==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_6' value='<?echo stripslashes($f_6);?>' size='24' border='0'>
    <br />
  </p></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Question* :</span></td><td><textarea style='width:360 <?if($errf_7==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_7' rows='6' cols='40'><?echo$f_7?></textarea></td></tr>
<tr><td align='right' width='30%'></td><td>Fichier joint ( 500Ko maximum) :
    <input name="upload_localfile" type="file" class="fondformulaire"/>
</td>
</tr>
<tr>
  <td align='right'></td>
  <td>  <p>
    <input type='reset' name='submit2' value='R&eacute;initialiser' border='0' /> 
    <input type='submit' name='submit' value='Envoyer' border='0' />
  </p> 
	  </td>
</tr>
</table>
</form>
<? } ?></td>

</body>
</html>