PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 16-08-2010 07:28:47

chrossat
Membre
Inscription : 16-08-2010
Messages : 7

Envoi d'une pièce jointe par email depuis un formulaire

Bonjour,

Lorsque je mets des données dans le formulaire et que je l'envoie, j'obtiens le message d'erreur suivant:

Warning: fopen(pdf_leger.jpg) [function.fopen]: failed to open stream: No such file or directory in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 21

Pour info, la ligne 21 est: $fichier = fopen($scan, "r" ); dans le fichier form_file2.php un peu plus bas dans le texte.


Le code du formulaire est:

<form action="form_file2.php" method="post" name="formulaire">
Nom : <input maxlength="50" name="nom" size="30" type="text" />
Prénom : <input maxlength="50" name="prenom" size="30" type="text" />
E-mail : <input maxlength="50" name="mail" size="30" type="text" />
Commentaires :<textarea cols="30" name="commentaires" rows="6" wrap="soft"></textarea>
Fichier : <input maxlength="60" name="scan" size="40" type="file" />

Le fichier form_file2.php:

<?php
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$commentaires= $_POST['commentaires'];
$scan=$_post['scan'];

echo"nom: $nom<br>"; // Rajouté pour voir le contenu des variables
echo"prenom: $prenom<br>"; // Rajouté pour voir le contenu des variables
echo"mail: $mail<br>"; // Rajouté pour voir le contenu des variables
echo"commentaires: $commentaires<br>"; // Rajouté pour voir le contenu des variables
echo"scan: $scan<br>"; // Rajouté pour voir le contenu des variables


//=====Déclaration des messages au format texte et au format HTML
$message_txt ="Nom : ";
$message_html = "<html><head></head><body><b>Données pour la demande d'accès</b>,<br><br> <b>Nom :</b> $nom <br> <b>Prenom :</b> $prenom <br> <b>Email: </b> $mail </body></html>";
//==========

//=====Lecture et mise en forme de la pièce jointe
$fichier = fopen($scan, "r" );
$attachement = fread($fichier, filesize($scan));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<.....@skynet.be>\n";
$header.= "Reply-to: \"WeaponsB\" <......@skynet.be>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========

//=====Création du message
$message = "\n--".$boundary."\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====Ajout du message au format texte
$message.="Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_txt."\n";
//==========

$message.= "\n--".$boundary_alt."\n";

//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_html."\n";
//==========

//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========



$message.= "\n--".$boundary."\n";

//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$scan\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$scan\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("......@hotmail.com",$sujet,$message,$header);

//==========
?>

Merci et salutations
Christian

Hors ligne

#2 16-08-2010 09:41:16

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Envoi d'une pièce jointe par email depuis un formulaire

L'image est dans un dossier temporaire, tu ne peux pas y accéder, il te faut utiliser move_uploaded_file() avant d'utiliser de telles fonctions.

Hors ligne

#3 16-08-2010 16:12:54

chrossat
Membre
Inscription : 16-08-2010
Messages : 7

Re : Envoi d'une pièce jointe par email depuis un formulaire

Merci,

En effet, j'ai utilisé maintenant move_uploaded_file() et le fichier est bien uploadé. Mais le message d'erreur subsiste.
Warning: fopen() [function.fopen]: Filename cannot be empty in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file3.php on line 49
(toujours la même ligne $fichier1  = fopen($fichier, "r" );
La faute doit être dans le code qui me permet d'aller chercher le fichier dans le dossier temporaire upload/, mais je ne vois pas où.
Pouvez-vous m'aider à avancer d'un pas?


J'ai conservé la suite du code telle  quelle, en adaptant le nom des variables.

Pour rappel, dans le formulaire, les 2 dernières lignes sont:

Fichier : <input maxlength="60" name="fichier" size="40" type="file" /><br /><br />
    <input name="upload" type="submit" value="Envoyer" /></form>

et le code php est:

$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$commentaires= $_POST['commentaires'];
$fichier=$_POST['fichier'];
$upload=$_POST['upload'];

if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = 'upload/'; // dossier où sera déplacé le fichier
$tmp_file = $_FILES['fichier']['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') &&
!strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
{
exit("Le fichier n'est pas une image");
}
// on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichier']['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
echo "Le fichier a bien été uploadé";
}


//=====Déclaration des messages au format texte et au format HTML
$message_txt ="Nom : ";
$message_html = "<html><head></head><body><b>Données pour la demande d'accès</b>,<br><br> <b>Nom :</b> $nom <br> <b>Prenom :</b> $prenom <br> <b>Email: </b> $mail </body></html>";
//==========

//=====Lecture et mise en forme de la pièce jointe
$fichier1  = fopen($fichier, "r" );
$attachement = fread($fichier1, filesize($fichier));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<.....@skynet.be>\n";
$header.= "Reply-to: \"WeaponsB\" <......@skynet.be>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========

//=====Création du message
$message = "\n--".$boundary."\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====Ajout du message au format texte
$message.="Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_txt."\n";
//==========

$message.= "\n--".$boundary_alt."\n";

//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_html."\n";
//==========

//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========



$message.= "\n--".$boundary."\n";

//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$fichier\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$fichier\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("test@test.com",$sujet,$message,$header);

Salutations
Christian

Hors ligne

#4 16-08-2010 17:42:27

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Envoi d'une pièce jointe par email depuis un formulaire

Le chemin n'est pas $fichier mais $content_dir . $name_file

Hors ligne

Pied de page des forums