8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voilà je viens ce matin car je bug sur l'envoie de mail avec pièce jointe.
En effet, je viens de créerr une page web ou des candidats à l'embauche pourraient venir soumettre leur dossier (CV, diplôme et aussi une photo d'identité en option) et après validation du formulaire, exécuter un script php qui se chargera de transmettre les infos au responsable du recrutement.

Voici donc la structure test de mon formulaire (que j'ai raccourci à l'envoie d'un seul fichier dans un premier temps afin de tester:

Page form_test_envoiePiece.php


<html>
<head>
<title></title>
</head>

<body>
<form id="form_carriere" method="post" action="reception_variables.php" enctype="multipart/form-data">
  <fieldset>
  <legend>Votre identit&eacute;</legend>
   <p>
    <label for="nom">Nom :</label>
    <input type="text" style="background-color:#09C; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="nom" id="nom">
   </p>
   
   <p>
    <label for="prenom">Pr&eacute;nom :</label>
    <input type="text" style="background-color:#09C; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="prenom" id="prenom">
   </p>
   
   <p>
    <label for="objet">Objet de votre mail :</label>
    <input type="text" style="background-color:#F00; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="objet" id="objet">
   </p>
   
   <p>
    <label for="message">Message :</label><br/>
    <textarea style="background-color:#FFF; padding:4px; font-family:'nevis Bold', Arial; font-size:12px; color:#555;" name="message" id="message" cols="50" rows="12"></textarea>
   </p>
   
   <p>
    <label for="email">Email pour vous r&eacute;pondre :</label>
    <input type="text" style="background-color:#Fbf; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#000;" name="email" id="email">
   </p>
  </fieldset>
  
  <fieldset>
   <legend>Votre pi&egrave;ce &agrave; joindre</legend>
   <label for="piecejointe" style="margin-top:8px; margin-bottom:8px;">S&eacute;lectionner un fichier (seuls les fichiers .doc, .jpg, .gif, .png ou .pdf sont accept&eacute;s)</label><br/>
   <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
   <input type="file" name="piecejointe" id="piecejointe">
  </fieldset>
  <input type="submit" name="submit" id="submit" value="Envoyer">
</form>
</body>
</html>


Et ci-dessous la première ébauche de code pour le traitement

fichier reception_variables.php


<?php
// On vérifie que le formulaire a été correctement rempli
if(isset($_POST['submit'])){

// On vérifie que les chanmps existent
if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['objet']) && isset($_POST['message']) && isset($_POST['email'])){

// si la réponse est positive, alors on récupère les valeurs à traiter
	
	$_nomExpediteur = $_POST['nom'];
	$_prenomExpediteur = $_POST['prenom'];
	$_objet = $_POST['objet'];
	$_messageExpediteur = $_POST['message'];
	$_emailExpediteur = $_POST['email'];
	
	echo "<br/>".$_prenomExpediteur."<br/>";
	
	// clé aléatoire de limite
	$_boundary = md5(uniqid(microtime(), TRUE));
	
	// headers des mails
	$_headers = 'From : '.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n".'Reply-To:'.$_emailExpediteur."\r\n".'X-Mailer [langue]HP/'.phpversion();
	$_headers .= 'Ccc : Lucius SAHAJ <lesahaj@gmail.com>,'.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n";
	$_headers = 'Mime-Version: 1.0'."\r\n";
	$_headers .= 'Content-type: multipart/mixed;boundary='.$_boundary."\r\n";
	$_headers .= "\r\n";
	
	// encodage des caractères
	$_msg = 'Ceci est un mail automatique provenant de webmaster ANINF et est sous forme multipart/mixed';
	$_msg .= '--'.$_boundary."\r\n";
	$_msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
	$_msg .= 'Content-transfer-encoding:8bit'."\r\n";
	$_msg .= 'Test message avec une pièce jointe.'."\r\n";
	
	// au contenue de $_msg je vais ajouter le message du visiteur
	$_msg .= '--'.$_boundary."\r\n";
	$_msg .= $_messageExpediteur."\r\n";
	$_msg .= "\r\n";
	
	if (isset($_FILES['piecejointe']) && is_uploaded_file($_FILES['piecejointe']['temp_name'])){

	// on récupère les valeurs du fichier en piece jointe

	$_nomFichier =  $_FILES['piecejointe']['name'];           // Le nom original du fichier, comme sur le disque du visiteur (exemple : mon_icone.png).
	$_typeFichier =  $_FILES['piecejointe']['type'];          //  Le type du fichier. Par exemple, cela peut être « image/png ».
	$_tailleFichier =  $_FILES['piecejointe']['size'];         //   La taille du fichier en octets.
	
	// traitement du  fichier joint
	$_content = chunk_split(base64_encode(file_get_contents($_nomFichier)));
	
	// on attache les fichiers
	$_msg .= '--'.$_boundary."\r\n";
	$_msg .= 'Content-type:'.$_typeFichier.';name='.$_nomFichier."\r\n";
	$_msg .= 'Content-transfer-encoding:base64'."\r\n";
	$msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\n\n";
	$_msg .= $content."\r\n";
	
	// fin de tous les traitements de fichiers
	$_msg .= '--'.$_boundary."\r\n";

	// Toutes les valeurs sont correctes alors on lance l'envoie du mail
	
	// @mail de destination des mails
	$_to = 'lucien.momba@aninf.ga';
	
	// On envoit le mail
	if(mail($_to, $_objet, $_message, $_headers)){
		echo "Votre mail a bien &eacute;t&eacute; envoy&eacute; nous vous r&eacute;pondrons dans les plus bref d&eacute;lais. <br><p> Merci de votre visite</p>";
	}
	else echo "L'envoie du dossier a &eacute;chou&eacute;<br/>";
	}
	else echo "Probl&egrave;me avec la pi&egrave;ce jointe. <br/>Le mail n'a pas &eacute;t&eacute; envoy&eacute; ";
}
else echo "Remplissez correctement le formulaire";
}
?>


Le seul problème avec ce fichier c'est que voici le message que je reçois après validation du form

a écrit :


ANINF

Warning: is_uploaded_file() expects parameter 1 to be string, array given in C:\wamp\www\static\reception_variables.php on line 40
Problème avec la pièce jointe.
Le mail n'a pas été envoyé



Aussi j'ai appris que je pouvais stocker le fichier dans un dossier temporaire avant de l'envoyer g donc utiliser move_upload_files en transformant mon fichier reception_variable php en:


<?php
/*********************************************************************
== Avant toutes actions, on prépare la structure de notre mail html ==
==                                                                  ==
*********************************************************************/

// Création de la clé aléatoire délimitant les parties du mail
$_boundary = md5(uniqid(microtime(), TRUE));

// Mime versions
$_headersMimev = 'Mime-Version: 1.0'."\r\n";
$_headersContent .= 'Content-type: multipart/mixed;boundary='.$_boundary."\r\n";
$_headersChariot .= "\r\n";

// encodage des caractères
$_msg = 'Ceci est un mail automatique provenant de webmaster ANINF et est sous forme multipart/mixed';
$_msg .= '--'.$_boundary."\r\n";
$_msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$_msg .= 'Content-transfer-encoding:8bit'."\r\n";
$_msg .= 'Test message avec une pièce jointe.'."\r\n";

// @mail de destination des mails
$_to = 'lucien.momba@aninf.ga';

/*********************************************************************
===  Traitement des données issue du formlaire de demande d'emploi ===
==                                                                  ==
*********************************************************************/
	
// On vérifie que le formulaire a été correctement rempli
if(isset($_POST['submit'])){

// On vérifie que les chanmps existent
if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['objet']) && isset($_POST['message']) && isset($_POST['email'])){
	// les champs  ci-dessus sont correctes alors on récupère leur valeur
	$_nomExpediteur = $_POST['nom'];
	$_prenomExpediteur = $_POST['prenom'];
	$_objet = $_POST['objet'];
	$_messageExpediteur = $_POST['message'];
	$_emailExpediteur = $_POST['email'];
	
	// On test la véracité de la condition isset de ces champs en affichant par exemple le nom de l'expéditeur
	echo "Merci M., Mlle, Mme ".$_nomExpediteur." de nous avoir visit&eacute; <br/>";
	
	// On écrit le header en y insérant les nom, prénom et mail de demandeur
	$_headers .= 'From : '.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n".'Reply-To:'.$_emailExpediteur."\r\n".'X-Mailer [langue]HP/'.phpversion();
	$_headers .= 'Ccc : Lucius SAHAJ <lesahaj@gmail.com>,'.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n";
	$_headers .= $_headersChariot;
	$_headers .= $_headersMimev;
	$_headers .= $_headersContent;
	$_headers .= $_headersChariot;
	
	// Ensuite, on vérifie la présence de la pièce jointe et on l'attache
	if (isset($_FILES['piecejointe']) && $_FILES['piecejointe']['error'] == 0){
		if ($_FILES['piecejointe']['size'] <= 1000000){
		$_infosfichier = pathinfo($_FILES['piecejointe']['name']);{
			move_uploaded_file($_FILES['piecejointe']['tmp_name'], './' .basename($_FILES['piecejointe']['name']));
			echo "Op&eacute;ration effectu&eacute; avec succ&egrave;";
		}
		}
	}
	//else echo "le chargement du fichier ".$_FILES['piecejointe']['name']." a &eacute;chou&eacute;";
	$_nomFichier = $_FILES['piecejointe']['name'];
	if (file_exists($_nomFichier)){
		echo $_nomFichier;
		$_typeFichier = filetype($_nomFichier);
		$_tailleFichier = filesize($_nomFichier);
		$_content = chunk_split(base64_enncode(file_get_contents($_nomFichier)))."\n";
		
		// On écrit le mail
		$_msg .= '--'.$_boundary."\r\n";
		
		// On joint le message de l'utilisateur
		$_msg .= $_messageExpediteur;
		$_msg .= '--'.$_boundary."\r\n";
		
		// On attache la pièce jointe
		$_msg .= 'Content-type:'.$_typeFichier.';name='.$_nomFichier."\r\n";
		$_msg .= 'Content-transfert-encoding:base64'."\r\n";
		$_msg .= "Content-Disposition: attachement; filename=\"$_nomFichier\"\n\n";
		$_msg .= $_content."\r\n";
	}
	if(!mail($_to,$_POST['intitule_des_problemes'], $_msg, $_headers)){
		echo "ERROR";
	}
	else echo "Mail bien envoy&eacute;";
}
else echo " Veuillez v&eacute;rifier que les champs nom, prenom, objet, message et email aient &eacute;t&eacute; bien renseign&eacute;";
}
else echo "Formulaire non envoy&eacute;";
?>


Et là, je n'ai plus d'erreur mais pas de mail non plus Smiley bawling
Modifié par goldenfisch (03 Oct 2012 - 12:43)