pieces jointes dans formulaires

Eléphanteau du PHP | 31 Messages

26 juil. 2006, 12:50

Bon c encore moi (post : probleme liste déroulante dans formulaire), nouveau soucis, cette fois pour récupérer une pièce jointe d'un formulaire. Un coup, en résultat, j'ai juste le chemin d'accès local, une autre fois rien du tout.
Alors voici les manips que j'ai executées :
Pour nommer la variable :
<input name="attach" type="file" size="16">
<input name="titre_piece" type="hidden" value="logo">
Pour l'envoyer :
if ($_POST['piece_jointe'] != 0) {
$partie_piece = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_piece'] . " = " . $_POST['attach'] . "</font><br>";
}
Le probleme vient certaienement du header :
$headers ="MIME-Version: 1.0 \n";
$headers .="From: expediteur<email expediteur>\n";
$headers .="Content-Type: text/html; charset=iso-8859-1 \n";
$subject = "Inscription dans l'annuaire";
$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head><body bgcolor=#FFFFFF>";
Mais si je change juste Content-Type: text/html; par multipart/mixed c'est pas concluent non plus.
En essayant tout ce que j'ai pu trouver sur le net, je trouve pas de solutions valable
bye
celine

Eléphanteau du PHP | 38 Messages

26 juil. 2006, 15:30

Regarde ce lien, il peut t'intéresser
http://stephaneey.developpez.com/tutori ... phpmailer/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 juil. 2006, 16:31

Ton champ attach est de type "file", il te faut donc uploader le fichier sur le serveur ($_FILE['attach'] et pas $_POST['attach']) puis soit le déplacer si tu veux le conserver (move_upload_file()) soit le lire depuis le dossier temporaire (à condition d'y avoir accès) pour l'inclure dans ton mail en pièce jointe.
(il faut également penser à ajouter le enctype dans la balise du formulaire)

Dans un premier temps, il vaut mieux séparer les deux : upload du fichier d'abord et transfert en pièce jointe ensuite. Tu pourras ainsi vérifier que le fichier est bien chargé sur la machine avant d'essayer de le joindre au mail.

Tu devrais trouver assez facilement des tutos pour ces deux opérations, pis si jamais t'as des questions, on est pas loin ;)

Invité
Invité n'ayant pas de compte PHPfrance

03 août 2006, 17:58

bon franchement je m'arrache les cheveux, j'y arrive pas
LE crops du message est complétement merdique, c'est trop compliqué
a votre bon coeur
<?
$email_dest = "mon@adresse";
// E-mail headers:
$boundary = "-----=".md5(uniqid(rand()));
$header .="From: expediteur<email expediteur>\n";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
$subject = "sujet";
$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head><body bgcolor=#FFFFFF>";

   
$name_file = $_FILES['attach']['name']; 
$source=$_FILES['attach']['tmp_name'];
move_uploaded_file($source, "./".$name_file); 
$extension=get_extension($name_file);
$type="text/plain";
if($type=="doc")
{
   $type="text/vnd.ms-word";
}
else if($type=="xls")
{
   $type="text/vnd.ms-excel";
}

$type2="image/png";

if($extension=="gif")
{
   $type2="image/gif";
}
else if($extension=="bmp")
{
   $type2="image/bmp";
}

function get_extension($filename)
{
   $parts = explode('.',$filename);
   $last = count($parts) - 1;
   $ext = $parts[$last];
   return $ext;
}


for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}
if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}

if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}
$fin = "</body></html>";
$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_zone_texte . $fin;
// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} 
?>

Code : Tout sélectionner

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript"> function verifSelection() {if (mail_form.champ1.value == "") { alert("remplir tous les champs") return false } if (mail_form.champ2.value == "") { alert("remplir tous les champs") return false } } </script> </head> <body> <form name="mail_form" method="post" action="<?=$PHP_SELF?>" ENCTYPE="multipart/form-data" onSubmit="return verifSelection()"> <div align="center"></div><p align="center"> <table width="450" border="0" > <p align="center"> </p> <tr><td td class="infoBoxContents">Nom</td> <td><input name="champ1" type="text"></td></tr> <tr><td td class="infoBoxContents">E-Mail</td> <td><input name="zone_email" type="text"></td></tr> <tr><td td class="infoBoxContents">Sujet</td> <td><input name="champ2" type="text"></td></tr> <tr><td td class="infoBoxContents">Votre message</td> <td><textarea name="zone_texte" cols="25" rows="5"></textarea></td></tr> <tr><td td class="infoBoxContents">photo</td> <td><input name="attach" id="attach" type="file"></td></tr> <tr><td valign="top"> <input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="2"> <input name="nbre_zones_texte" type="hidden" value="1"> <input name="nbre_zone_email" type="hidden" value="1"> <input name="titre_champ1" type="hidden" value="nom"> <input name="titre_champ2" type="hidden" value="sujet"> <input name="titre_email" type="hidden" value="e-mail"> <input name="titre_zone" type="hidden" value="description"></td> <td><div align="center"> <input type="reset" name="Reset" value="Effacer"> <input type="submit" name="envoi" value="Envoyer"> </div></td> </tr></table></form>
Je comprend meme plus ce que je fais!
ce_l

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2006, 19:20

RE
Alors j'ai réussi à l'uploader dans un dossier temporaire par la fonction
move_uploaded_file
je bloque seulement pour récuperer la pièce jointe sur mon mail. Je sais que ca se passe surement au niveau de l'entete mais j'avoue qu'une petite piste serait bienvenue
ce_l