Réception piece jointe formulaire php

gaetanmgm Messages postés 5 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 27 janvier 2010 - 26 janv. 2010 à 15:03
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 - 27 janv. 2010 à 16:34
Bonjour, j'ai un petit soucis, un collègue m'a passer un formulaire php qu'il à fabriqué... (je ne suis pas developpeur).

Il est sous cette forme dans le body (avec la mise en forme en css dans le head):

<?php
include ("createForm/class.createForm.php");
$monForm2 = new createForm( );
$var = $monForm2->ajout( "Fichier" , "file" );
$monForm2->ajout( "Nom" , "text" );
$monForm2->ajout( "Prénom" , "text" );
$monForm2->ajout( "Email" , "text" );
$monForm2->ajout( "Commentaire(s)" , "textarea" );
$monForm2->verifType( "Email" , "email" );
$monForm2->verifType( "Code Postal" , "numeric" );
$monForm2->verifType( "Téléphone" , "numeric" );
$monForm2->champsObligatoires( "Nom" , "Email" , "Prénom" );
$monForm2->envoiMail();
$monForm2->afficheForm();
?>

Il est en lien avec un fichier : class.createForm.php (qui lui même est en lien avec d'autres fichiers : class.smtp.php, class.phpmailer.php, createform.lang-fr.php)

Tout marche très bien, à savoir le formulaire se rempli correctement y compris pour la selection du fichier à uploader, les vérifications sont effectuées, il arrive sur la boite mail avec les champs remplis.

SEUL PROBLEME : UPLOADER UN FICHIER

Quand je reçois le formulaire sur ma boite mail, il manque le fichier joint. J'ai uniquement le champs "Fichier :" mais rien d'écrit à côté (comme pour les autres champs) ni même aucune pièce jointe.

Après plusieurs heures de recherches infructueuses, je me tourne vers vous pour ce problème.

Questions :
Quels peuvent être les raisons de l'absence du fichier joint au formulaire sur ma boite mail ?
Comment peut-on regler ce problème ?

Merci de votre aide.

8 réponses

citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
26 janv. 2010 à 15:28
Bonjour,

Sans le code complet des class qui vont avec ton exemple on ne pourras pas t'aider sauf ceux qui connaissent déjà.

Il faut voir dans la function "ajout" ce qui se passe.


Citt_jr
Bats toi avec les meilleurs, crève avec le reste
http://www.tsubara.net
0
gaetanmgm Messages postés 5 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 27 janvier 2010
26 janv. 2010 à 15:35
Voici le code des fonctions "ajout" :

/********************************************************

RENVOI CREATION D'UN ELEMENT DE FORMULAIRE

*********************************************************/

function getElement($element){

$renvoiElement = "";



switch($element[2]){

/********************************************************
CREATION ELEMENT CHAMP TEXTE
*********************************************************/

case 'text' : return "\n"; break;

/********************************************************
CREATION ELEMENT ZONE DE TEXTE
*********************************************************/

case 'textarea' : return "<textarea name='".$element[1]."' >".$element[3]."</textarea>\n"; break;

/********************************************************
CREATION ELEMENT CHAMP PASSWORD
*********************************************************/

case 'password' : return "\n"; break;

/********************************************************
CREATION ELEMENT CHAMP DE FICHIER
*********************************************************/

case 'file' : return ""; break;

/********************************************************
CREATION ELEMENT BOUTON RADIO
*********************************************************/

case 'radio' : for( $t = 0; $t < count($element[4]); $t++) {
$renvoiElement .= $element[4][$t]."\n";}
break;

/********************************************************
CREATION ELEMENT LISTE
*********************************************************/

case 'list' :
$renvoiElement .= "<select name='".$element[1]."'/>\n";

for( $t = 0; $t < count($element[4]); $t++) {

$renvoiElement .= "<option value='".$element[4][$t]."' ";

if( $element[4][$t] == $element[3]) $renvoiElement .= "selected='selected'";

$renvoiElement .= ">".$element[4][$t]."</option>\n";

}
$renvoiElement .= "</select>\n";
break;

/********************************************************
CREATION ELEMENT CASE A COCHER
*********************************************************/
case 'checkbox' : for( $t = 0; $t < count($element[4]); $t++) {

$renvoiElement .= $element[4][$t]."\n";

}


}


return $renvoiElement;

}
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
26 janv. 2010 à 16:24
Bonjour,

Peut tu envoyer le code dans son ensemble ?


Citt_jr
Bats toi avec les meilleurs, crève avec le reste
http://www.tsubara.net
0
gaetanmgm Messages postés 5 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 27 janvier 2010
26 janv. 2010 à 16:54
<?php



class createForm {


var $elements = array();
var $valid = true;
var $contenuMail;
var $champObligatoire = array();
var $erreur = false;
var $champsVides = array();
var $rapportError = array();
var $paramMail = array();
var $ref_variables = array();




/******************************************************

CONSTRUCTEUR DE LA CLASSE

******************************************************/

function createForm(){

include('createform.lang-fr.php');
$this->rapportError = $CREATEFORM_LANG;
$this->paramMail = $ENVOI_MAIL;


}

/******************************************************

FONCTION SAUVEGARDE DES CHAMPS REMPLIS

*******************************************************/
function sauvegardeChamps(){

if( !$this->verifChampsObligatoires() ) {

$this->erreur = $this->rapportError["err_champs_obligatoires"];

$this->valid = false;

//foreach( $this->champsVides as $champVide ) $this->erreur.= $champVide." ";
}

if ( $this->erreur ) echo "".utf8_decode($this->erreur)."

" ;
return $this->valid;
}

/********************************************************

AJOUT DES ELEMENTS DE FORMULAIRE DANS LE TABLEAU

*********************************************************/

function ajout( $label, $type, $value "", $list "" ) {

$newLabel = $this->transformLabel( $label );

$this->ref_variables[ $label ] = $newLabel;

if( count( $_POST ) && isset( $_POST[$newLabel] ) ) {

$this->elements[] = array( $label, $newLabel, $type, $_POST [ $newLabel ], $list ) ;

$this->$newLabel = $_POST [ $newLabel ];

return $newLabel;

}

else
{


$this->elements[] = array( $label, $newLabel , $type , $value, $list ) ;

$this->$newLabel = $value;

return $newLabel;

}



}

/********************************************************

SUPPRESSION DES MAJUSCULES, ACCENTS, ESPACES

*********************************************************/

function transformLabel( $label ){

$label = str_replace( ' ' , '_' , $label );
$label = strtolower( $label );
$label = strtr($label ,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');

return "var_".$label;


}

/********************************************************

CREATION DES CHAMPS OBLIGATOIRES

*********************************************************/

function champsObligatoires(){

for( $t = 0; $t < func_num_args(); $t++ ){

$this->champObligatoire[] = $this->ref_variables[ func_get_arg($t) ];


}

if(count($_POST)) return $this->sauvegardeChamps();

}


/********************************************************

VERIF DES CHAMPS OBLIGATOIRES

*********************************************************/

function verifChampsObligatoires(){

$valid = true;

foreach( $this->champObligatoire as $_champ ){

if( !isset( $_POST[ $_champ ] ) || $_POST[ $_champ ] == "") { $valid = false; $this->champsVides[] = $_champ;}

}

return $valid;

}


/********************************************************

FONCTION VERIFICATION TYPE ELEMENT

********************************************************/

function verifType( $element , $type ){

if( count( $_POST ) ) {

$element = $this->ref_variables[$element];



switch ( $type ) {

case 'email': if( !preg_match( '#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#' , $_POST[ $element ] ) ){
$this->valid = false;
$this->erreur = $this->rapportError["err_email_non_valide"].$_POST[ $element ]; }
break;

case 'numeric': if( !is_numeric( $_POST[ $element ] ) ){
$this->valid = false;
$this->erreur = $this->rapportError["err_non_numerique"].$element; }
break;


}

}

}


/********************************************************

RENVOI CREATION D'UN ELEMENT DE FORMULAIRE

*********************************************************/

function getElement($element){

$renvoiElement = "";



switch($element[2]){

/********************************************************
CREATION ELEMENT CHAMP TEXTE
*********************************************************/

case 'text' : return "\n"; break;

/********************************************************
CREATION ELEMENT ZONE DE TEXTE
*********************************************************/

case 'textarea' : return "<textarea name='".$element[1]."' >".$element[3]."</textarea>\n"; break;

/********************************************************
CREATION ELEMENT CHAMP PASSWORD
*********************************************************/

case 'password' : return "\n"; break;

/********************************************************
CREATION ELEMENT CHAMP DE FICHIER
*********************************************************/

case 'file' : return ""; break;

/********************************************************
CREATION ELEMENT BOUTON RADIO
*********************************************************/

case 'radio' : for( $t = 0; $t < count($element[4]); $t++) {
$renvoiElement .= $element[4][$t]."\n";}
break;

/********************************************************
CREATION ELEMENT LISTE
*********************************************************/

case 'list' :
$renvoiElement .= "<select name='".$element[1]."'/>\n";

for( $t = 0; $t < count($element[4]); $t++) {

$renvoiElement .= "<option value='".$element[4][$t]."' ";

if( $element[4][$t] == $element[3]) $renvoiElement .= "selected='selected'";

$renvoiElement .= ">".$element[4][$t]."</option>\n";

}
$renvoiElement .= "</select>\n";
break;

/********************************************************
CREATION ELEMENT CASE A COCHER
*********************************************************/
case 'checkbox' : for( $t = 0; $t < count($element[4]); $t++) {

$renvoiElement .= $element[4][$t]."\n";

}


}


return $renvoiElement;

}

/********************************************************

AFFICHE LE FORMULAIRE

*********************************************************/


function afficheForm(){

/*******************************************
CREATION DU FORMULAIRE
*******************************************/

echo "<form class='createForm' method='post' action='".$_SERVER['PHP_SELF']."'>";


foreach ($this->elements as $element){


echo "\n<label>".$element[0];

if(in_array($element[1],$this->champObligatoire)) { echo " *";}

echo " </label>";

echo $this->getElement($element);



echo "

\n";

}

echo "\n";

echo "</form>";

/*******************************************
FIN CREATION DU FORMULAIRE
*******************************************/
}

/*******************************************************

ENVOI DE MAIL

*******************************************************/

function envoiMail(){


if($this->valid && count($_POST)) {

include("phpmailer/class.phpmailer.php");

$mailer = new PHPMailer();

if($this->paramMail["is_smtp"]) {
$mailer->IsSMTP();
$mailer->Host = $this->paramMail["host"];

}


$mailer->From = $this->paramMail["from"] ;
$mailer->FromName = $this->paramMail["from_name"];
$mailer->AddAddress($this->paramMail["adresse_reception"]);

$mailer->WordWrap = 50 ;

$mailer->IsHTML(true) ;

$mailer->Subject = $this->paramMail["sujet"];

$this->contenuMail .= $this->paramMail["texte_email"];

foreach($this->elements as $test){

$this->contenuMail .= $test[0]." : ";

if(is_array($test[3]))
foreach($test[3] as $meselements) { $this->contenuMail .= $meselements." ";}
else
$this->contenuMail .= $test[3];

$this->contenuMail .= "
";

}

$mailer->Body = $this->contenuMail;

if($mailer->Send()) echo "".utf8_decode($this->paramMail["envoi_ok"])."

"; else echo "".$mailer->ErrorInfo."

";
}

}



}

?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gaetanmgm Messages postés 5 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 27 janvier 2010
27 janv. 2010 à 11:33
Alors doc ? il à quoi ?
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
27 janv. 2010 à 15:58
Déjà il manque sur le form le enctype="multipart/form-data"

Remplace :
echo "<form class='createForm' method='post' action='".$_SERVER['PHP_SELF']."'>";
Par :
echo "<form class='createForm' enctype="multipart/form-data" method='post' action='".$_SERVER['PHP_SELF']."'>";

Et concernant la pièce jointe, la méthode d'ajout du fichier dans le mail n'est pas valide

il faut ajouter dans le header du mail (voir si dans la class class.phpmailer.php cela n'est pas deja fait):

$limite = "_parties_".md5(uniqid (rand()));
$header_mail .= " boundary="--=$limite"\n\n";

il faut le joindre en base64 dans le mail :

$fichier=chunk_split( base64_encode($fichier) );

//Écriture de la pièce jointe
$this->contenuMail .= "--" .$limite. "\n
Content-Type: application/msword; name="nom_fichier"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename="nom_fichier"\r\n\n
$fichier";

//Fermeture de la frontière
$this->contenuMail .= "--" .$limite. "--";

En sachant que le Content type la est celui pour un fichier word : application/msword, il se trouve dans $_FILES['nomduchampfilesdevotreformulaire']['type'] !

Cela devrait t'aider à mettre en place le fichier dans le mail.

Sinon si tu n'y arrive pas, il faudra aussi joindre la class class.phpmailer.php pour pouvoir mettre en place le boundary



Citt_jr
Bats toi avec les meilleurs, crève avec le reste
http://www.tsubara.net
0
gaetanmgm Messages postés 5 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 27 janvier 2010
27 janv. 2010 à 16:30
Merci pour ta réponse, je n'ai pas forcement tout compris, mais je vais voir....
cependant la première modif que j'ai effectuée est :

Remplace :
echo "<form class='createForm' method='post' action='".$_SERVER['PHP_SELF']."'>";
Par :
echo "<form class='createForm' enctype="multipart/form-data" method='post' action='".$_SERVER['PHP_SELF']."'>";

et j'ai comme message sur la page internet php contenant le formulaire :

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /homez.316/naturedu/www/createForm/class.createFormbdc.php on line 287

à la ligne 287 il y à précisément la modif : echo...
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
27 janv. 2010 à 16:34
Oups sorry ;)

Mais même en faisant cette modif cela ne fonctionnera pas plus si tu n'inclus pas les fichiers correctement dans ton envoie de mail.

Mais voici la correction de ma bétise !

echo "<form class='createForm' enctype="multipart/form-data" method='post' action='".$_SERVER['PHP_SELF']."'>";


Citt_jr
Bats toi avec les meilleurs, crève avec le reste
http://www.tsubara.net
0