permettre d'envoyer un pièce jointe

Eléphanteau du PHP | 10 Messages

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>

Petit nouveau ! | 8 Messages

25 mars 2008, 20:16

Salut !
Alors on va remplacer ça :
        // 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"; 
par ça:
        // Cr&eacute;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+

Eléphanteau du PHP | 10 Messages

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]

Petit nouveau ! | 8 Messages

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 ?)

Eléphanteau du PHP | 10 Messages

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...

Petit nouveau ! | 8 Messages

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&eacute;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

Eléphanteau du PHP | 10 Messages

28 mars 2008, 00:49

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