begin process at 2012 05 31 16:37:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

réception piece jointe formulaire php


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

réception piece jointe formulaire php

mardi 26 janvier 2010 à 15:03:24 | réception piece jointe formulaire php

gaetanmgm

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.
mardi 26 janvier 2010 à 15:28:25 | Re : réception piece jointe formulaire php

citt

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
mardi 26 janvier 2010 à 15:35:14 | Re : réception piece jointe formulaire php

gaetanmgm

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 "<input name='".$element[1]."' type='text' value='".$element[3]."'/>\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 "<input name='".$element[1]."' type='password' value='".$element[3]."'/>\n"; break;

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

case 'file' : return "<input type='file' name='".$element[1]."' id=".$element[1]."' />"; break;

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

case 'radio' : for( $t = 0; $t < count($element[4]); $t++) {
$renvoiElement .= $element[4][$t]."<input type='radio' name='".$element[1]."' value='".$element[4][$t]."' ";
if( $element[4][$t] == $element[3]) $renvoiElement .= "checked='checked'";
$renvoiElement .= "/>\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]."<input name='".$element[1]."[]' type='checkbox' value='".$element[4][$t]."' ";

if( !empty($element[3]) && in_array($element[4][$t], $element[3])) $renvoiElement .= "checked='checked'";

$renvoiElement .= "/>\n";

}


}


return $renvoiElement;

}
mardi 26 janvier 2010 à 16:24:09 | Re : réception piece jointe formulaire php

citt

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
mardi 26 janvier 2010 à 16:54:32 | Re : réception piece jointe formulaire php

gaetanmgm

<?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 "<p id='envoiMessage'>".utf8_decode($this->erreur)."</p>" ;
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 "<input name='".$element[1]."' type='text' value='".$element[3]."'/>\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 "<input name='".$element[1]."' type='password' value='".$element[3]."'/>\n"; break;

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

case 'file' : return "<input type='file' name='".$element[1]."' id=".$element[1]."' />"; break;

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

case 'radio' : for( $t = 0; $t < count($element[4]); $t++) {
$renvoiElement .= $element[4][$t]."<input type='radio' name='".$element[1]."' value='".$element[4][$t]."' ";
if( $element[4][$t] == $element[3]) $renvoiElement .= "checked='checked'";
$renvoiElement .= "/>\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]."<input name='".$element[1]."[]' type='checkbox' value='".$element[4][$t]."' ";

if( !empty($element[3]) && in_array($element[4][$t], $element[3])) $renvoiElement .= "checked='checked'";

$renvoiElement .= "/>\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 "<p>\n<label>".$element[0];

if(in_array($element[1],$this->champObligatoire)) { echo " <span class='champ_obligatoire'>*</span>";}

echo " </label>";

echo $this->getElement($element);



echo "</p>\n";

}

echo "\n<input name='' type='submit'>";

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 .= "<br/>";

}

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

if($mailer->Send()) echo "<p id='envoiMessage'>".utf8_decode($this->paramMail["envoi_ok"])."</p>"; else echo "<p id='envoiMessage'>".$mailer->ErrorInfo."</p>";
}

}



}

?>
mercredi 27 janvier 2010 à 11:33:27 | Re : réception piece jointe formulaire php

gaetanmgm

Alors doc ? il à quoi ?
mercredi 27 janvier 2010 à 15:58:07 | Re : réception piece jointe formulaire php

citt

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
mercredi 27 janvier 2010 à 16:30:26 | Re : réception piece jointe formulaire php

gaetanmgm

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...
mercredi 27 janvier 2010 à 16:34:29 | Re : réception piece jointe formulaire php

citt

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


Cette discussion est classée dans : fichier, php, formulaire, ajout, monform2


Répondre à ce message

Sujets en rapport avec ce message

Récupération de variables à partir d'un formulaire html [ par ibti25 ] Bonjour,La question que je vais poser parait très très bête mais je ne comprends pourkoi ça ne veut pas marcher depuis que j'ai installer oracle 9i et 'fputs()' [ par Miloflyer ] Bonsoir tout le monde.Je débute en php et essaye de bidouiller quelques scripts...Mais quelque chose me pose problème dans la réalisation de mon "proj UPLOAD -> comment faire???? [ par attentio ] salut !!!! je voudrais savoir comment faire pour uploader un fichier.j'ai commencé quelques petites choses. en fait, j'ai un premier fichier nommé for formulaire et hidden [ par xabivalencia ] bonjour,J ai un petit souci de code. Je vous explique d abord ce que j ai fait: Fichier 1 "formulaire_verif.php": Il permet a l utilisateur de rentrer php --> excel [ par yoyopotpot ] Bonjour à tous!Voilà je vous explique mon problème :j'ai un formulaire en php et j'aimerai pouvoir "envoyer" les données de ce formulaire dans un fich lien vers un autre formulaire [ par fredo35m ] Bonjour,je suis toujours dans mon application lancant une application externe et je crois que j'arrive au bout mais il me manque une petite aide!!! al pseudos frames et récuperation de données dans un formulaire [ par jimmypage64 ] Bonjour !! j'utilise les pseudos frames dans mon site.. j'ai donc une page index avec un menu, une entete et dans la partie centrale de ma page j'app Formulaire html + php [ par jcheseaux ] Bonjour ! Voila mon problème, j'ai créer un formulaire HTML gérant l'upload de fichier. Le problème, c'est que lors de l'envoie des variables depuis m redirection [ par kenny18 ] salut,j'ai un gros soucis de redirection.j'ai ma page formulaire.php qui contient un formulaire. Lorsque je clique sur "envoyer", cela va appeler des fichier txt, php formulaire [ par TuxOnline ] Bonjour, voila j'ai un formulaire avec une text aera.Quand je valide sa doit aller dans un fichier. donc sa sa fonctionne mais car il y a un mais lol.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales