mail_php et formulaire (voir dernier post pr le probleme)

Eléphanteau du PHP | 17 Messages

29 sept. 2007, 12:35

Bonjour a tous,

Depuis que j'ai changé d'hebergeur (passé de free à netim) , j'ai des soucis dans mes fichiers *.php
J'ai envoyé un mail à Netim pour m'expliquer le probleme.

Voici la réponse :
C'est une différence de configuration entre votre serveur précédent et celui
de l'hébergement
Pour des raisons de sécurité les variables ne sont plus déclarés de manière
globale.

Par exemple le champ nom, une fois le formulaire validé, ne sera pas
automatiquement déclaré dans la variable $nom mais plutôt par $_POST["nom"]
Mais je ne vois pas comment il faut faire .

Voici le code en *.php
<?php 

{ 

$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
 // Verification des champs laissé vide
 if (empty($_POST['nom'])) 
 $erreur .= "Votre nom<br/>"; 
 if (empty($_POST['prenom'])) 
 $erreur .= "Votre Prenom<br/>";             
 if (empty($_POST['adresse'])) 
 $erreur .= "Votre adresse <br/>";
 if (empty($_POST['codepostal'])) 
 $erreur .= "Votre Code postal<br/>";
 if (empty($_POST['ville'])) 
 $erreur.= "Votre Ville<br/>";
 if (empty($_POST['email'])) 
 $erreur .= "Votre adresse mail<br/>";

 if (strlen($erreur) > strlen($msg_erreur)) 
  {
  echo $erreur;
  }
 else 
    if ( ! empty($fichier)) 
	{ 
    $fich= $_FILES['fichier']['tmp_name']; 
    $ftaille = $_FILES['fichier']['size']; 
    $ftype = $_FILES['fichier']['type']; 
    $fnom = $_FILES['fichier']['name']; 
	
	// identifiant de séparateur, en principe unique
    $limite = md5(uniqid(time() ));
	// ajout d'un texte à la saisie 
    $mail_corps .= "\r\nNB: Ajout d'une pièce jointe : $fnom\r\n"; 
    // ouverture du fichier joint uploadé en lecture
    $f = fopen($fich, "r") or die("ouverture du fichier $fich impossible ...");
    // récupération du code du fichier joint
    $code =fread($f, $ftaille);
    // encodage standard
    $code = chunk_split(base64_encode($code));
	
    
	$destinataire = '[email protected]';
	
	if(strtoupper(substr(PHP_OS,0,3)=='WIN'))
    { 
    $eol="\r\n"; 
    $sol="\n"; 
    }
	else
	if(strtoupper(substr(PHP_OS,0,3)=='MAC'))
	{ 
    $eol="\r"; 
    }
	else
	{ 
    $eol="\n"; 
    } 
	
	$from_email  = trim(htmlentities($_POST['email']));
	$entetemail  = "From: $from_email \n"; // Adresse expéditeur 
    $entetemail .= "Cc: \n";  
    $entetemail .= "Bcc: \n"; // Copies cachées 
    $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour 
    $entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
	$entetemail .= "Content-Type: multipart/mixed;\n"; // On indique que le mail est divisé en plusieurs parties 
    $entetemail .= "Content-Type: multipart/mixed;boundary=\"".$limite."\"".$eol;// Mail divisé en plusieurs parties et séparateur utilisé 
	
	// préparation du corps du mail
    $mail_corps =  "Societe: ($_POST['societe'])\n";
    $mail_corps .= "Message de : ($_POST['nom']) ($_POST['prenom'])\n";
    $mail_corps .= "Fonction : ($_POST['fonction'])\n";
    $mail_corps .= "Adresse : ($_POST['adresse']), ($_POST['codepostal']), ($_POST['ville']),($_POST['pays'])\n";
    $mail_corps .= "Son numero de telephone: ($_POST['telephone']), fax : ($_POST['fax'])\n";
    $mail_corps .= "Son site Internet : ($_POST['site'])\n";
    $mail_corps .= "Langue source : ($_POST['select'])\n";
    $mail_corps .= "Langue cible 1: ($_POST['select2'])\n";
    $mail_corps .= "Langue cible 2 : ($_POST['select3'])\n";
    $mail_corps .= "Langue cible 3 : ($_POST['select4'])\n";
    $mail_corps .= "Langue cible 4 : ($_POST['select5'])\n\n\n";
    $mail_corps .= "Domaine du projet : ($_POST['projet'])\n\n\n";
    $mail_corps .= "CGV : ($_POST['cgv'])";
	
	
	
  
    
	
	
    /* composition de l'en-tête du message :
    * le message textuel suivi du code du fichier
    *********************************************/
  
    // composition : le message textuel suivi du code du fichier 
    $msg = ""; 
    $msg .= "--".$limite.$eol; 
    $msg .= "Content-type:text/plain;charset=us-ascii".$eol; 
    $msg .= "Content-transfer-encoding:8bit".$eol.$eol; 
    $msg .= $mail_corps.$eol; 

    $msg .= "--".$limite.$eol; 
    $msg .= "Content-type:$ftype;name=$fnom".$eol; 
    $msg .= "Content-transfer-encoding:base64".$eol; 
    $msg .= "Content-Disposition: attachment; filename=$fnom".$eol.$eol; 
    $msg .= $code.$eol.$eol; 
    $msg .= "--".$limite."--".$eol.$eol;
	
	function decoder($msg)
	{ 
    
    $msg = stripslashes($msg); // évitete les anti-slashs d'échappement 
    $msg = trim($msg); // évite les '\n', '\r', '\t' etc 
    return $msg; 
    } 

  // envoi du mail
   if( mail($destinataire, "Demande de devis", decoder($msg), $entetemail) )
  {
  //Le mail est bien expédié
  echo $msg_ok;
  } 
  else 
  {

  //Le mail n'a pas été expédié
  echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
  }

 }          
   
}            


?>
Merci de bien vouloir m'aider car je galere enormément
Modifié en dernier par b|zhon le 09 oct. 2007, 19:40, modifié 2 fois.

ViPHP
ViPHP | 5924 Messages

29 sept. 2007, 13:16

Peux tu expliquer tes soucis parce que nous ne sommes nullement devins.

Eléphanteau du PHP | 17 Messages

29 sept. 2007, 14:36

J'avoue, je me suis mal exprimé.

En fait via l'hebergeur free, le fichier php fonctionne pas de soucis mais dès lors que je passe sur mon hebergeur Netim , il ne fonctionne pas (page blanche des que j'envoi le formulaire). J'ai envoyé un mail à netim. (j'ai laissé le message qu'ils mont envoyé dans le 1er post).

J'aimerai savoir où est mon soucis dans mon code. Car je ne comprends pas trop ce que je dois changer. De plus ils m'ont rajouter cette ligne dans mon code mais je ne vois pas à quoi elle sert hormis afficher les réponses de mes variables .
echo "Liste des variables<BR>";
print_r($_POST);
echo "Nom=".$_POST["nom"];

ViPHP
ViPHP | 1996 Messages

29 sept. 2007, 14:48

Ils t'ont tout dis :
Pour des raisons de sécurité les variables ne sont plus déclarés de manière
globale.
Essaye de faire des concaténation :
$mail_corps =  "Societe: (".$_POST['societe'].")\n"; 
Même si je ne suis pas sûr que c'est cela.

Ils t'ont conseillé de mettre
echo "Liste des variables<BR>";
print_r($_POST);
echo "Nom=".$_POST["nom"];
Ainsi dans au début de ton code, mets :
<?php 

print_r($_POST);
die ("arret du script temporairement"); //ligne a retirer pour exécuter la suite du code
{ //je ne sais d'où vient cette accolade

$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
 // Verification des champs laissé vide
 if (empty($_POST['nom'])) 
 $erreur .= "Votre nom<br/>"; 
 if (empty($_POST['prenom'])) 
 $erreur .= "Votre Prenom<br/>";             
 if (empty($_POST['adresse'])) 
 $erreur .= "Votre adresse <br/>";
 if (empty($_POST['codepostal'])) 
 $erreur .= "Votre Code postal<br/>";
 if (empty($_POST['ville'])) 
 $erreur.= "Votre Ville<br/>";
 if (empty($_POST['email'])) 
 $erreur .= "Votre adresse mail<br/>"; 
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 17 Messages

02 oct. 2007, 21:49

Merci pour ta reponse :

Bon j'ai modifié le code et tjrs rien !! page blanche :/ meme pas un message d'erreur arg !!!

Si quelqu'un avait le temps de regarder mon code car je galere depuis 3sem sur ce simple code :/ :/ :/ !!

le voici :
<?php 

{ 

$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
 // Verification des champs laissé vide
 if (empty($_POST['nom'])) 
 $erreur .= "Votre nom<br/>"; 
 if (empty($_POST['prenom'])) 
 $erreur .= "Votre Prenom<br/>";             
 if (empty($_POST['adresse'])) 
 $erreur .= "Votre adresse <br/>";
 if (empty($_POST['codepostal'])) 
 $erreur .= "Votre Code postal<br/>";
 if (empty($_POST['ville'])) 
 $erreur.= "Votre Ville<br/>";
 if (empty($_POST['email'])) 
 $erreur .= "Votre adresse mail<br/>";

 if (strlen($erreur) > strlen($msg_erreur)) 
  {
  echo $erreur;
  }
 else 
    if ( ! empty($fichier)) 
	{ 
    $fich= $_FILES['fichier']['tmp_name']; 
    $ftaille = $_FILES['fichier']['size']; 
    $ftype = $_FILES['fichier']['type']; 
    $fnom = $_FILES['fichier']['name']; 
	
	// identifiant de séparateur, en principe unique
    $limite = md5(uniqid(time() ));
	// ajout d'un texte à la saisie 
    $mail_corps .= "\r\nNB: Ajout d'une pièce jointe : $fnom\r\n"; 
    // ouverture du fichier joint uploadé en lecture
    $f = fopen($fich, "r") or die("ouverture du fichier $fich impossible ...");
    // récupération du code du fichier joint
    $code =fread($f, $ftaille);
    // encodage standard
    $code = chunk_split(base64_encode($code));
	
    
	$destinataire = '[email protected]';
	
	if(strtoupper(substr(PHP_OS,0,3)=='WIN'))
    { 
    $eol="\r\n"; 
    $sol="\n"; 
    }
	else
	if(strtoupper(substr(PHP_OS,0,3)=='MAC'))
	{ 
    $eol="\r"; 
    }
	else
	{ 
    $eol="\n"; 
    } 
	
	$from_email  = trim(htmlentities($_POST['email']));
	$entetemail  = "From: $from_email \n"; // Adresse expéditeur 
    $entetemail .= "Cc: \n";  
    $entetemail .= "Bcc: \n"; // Copies cachées 
    $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour 
    $entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
	$entetemail .= "Content-Type: multipart/mixed;\n"; // On indique que le mail est divisé en plusieurs parties 
    $entetemail .= "Content-Type: multipart/mixed;boundary=\"".$limite."\"".$eol;// Mail divisé en plusieurs parties et séparateur utilisé 
	
	// préparation du corps du mail
    $mail_corps =  "Societe: (".$_POST['societe'].")\n"; 
    $mail_corps .= "Message de : (".$_POST['nom']."),(".$_POST['prenom'].")\n";
    $mail_corps .= "Fonction : (".$_POST['fonction'].")\n";
    $mail_corps .= "Adresse : (".$_POST['adresse']."),(".$_POST['codepostal']."), (".$_POST['ville']."), (".$_POST['pays'].")\n";
    $mail_corps .= "Son numero de telephone: (".$_POST['telephone']."), fax : (".$_POST['fax'].")\n";
    $mail_corps .= "Son site Internet : (".$_POST['site'].")\n";
    $mail_corps .= "Langue source : (".$_POST['select'].")\n";
    $mail_corps .= "Langue cible 1: (".$_POST['select2'].")\n";
    $mail_corps .= "Langue cible 2 : (".$_POST['select3'].")\n";
    $mail_corps .= "Langue cible 3 : (".$_POST['select4'].")\n";
    $mail_corps .= "Langue cible 4 : (".$_POST['select5'].")\n\n\n";
    $mail_corps .= "Domaine du projet : (".$_POST['projet'].")\n\n\n";
	$mail_corps .= "CGV : (".$_POST['cgv'].")";
	
	
	
  
    
	
	
    /* composition de l'en-tête du message :
    * le message textuel suivi du code du fichier
    *********************************************/
  
    // composition : le message textuel suivi du code du fichier 
    $msg = ""; 
    $msg .= "--".$limite.$eol; 
    $msg .= "Content-type:text/plain;charset=us-ascii".$eol; 
    $msg .= "Content-transfer-encoding:8bit".$eol.$eol; 
    $msg .= $mail_corps.$eol; 

    $msg .= "--".$limite.$eol; 
    $msg .= "Content-type:$ftype;name=$fnom".$eol; 
    $msg .= "Content-transfer-encoding:base64".$eol; 
    $msg .= "Content-Disposition: attachment; filename=$fnom".$eol.$eol; 
    $msg .= $code.$eol.$eol; 
    $msg .= "--".$limite."--".$eol.$eol;
	
	function decoder($msg)
	{ 
    
    $msg = stripslashes($msg); // évitete les anti-slashs d'échappement 
    $msg = trim($msg); // évite les '\n', '\r', '\t' etc 
    return $msg; 
    } 

  // envoi du mail
   if( mail($destinataire, "Demande de devis", decoder($msg), $entetemail) )
  {
  //Le mail est bien expédié
  echo $msg_ok;
  } 
  else 
  {

  //Le mail n'a pas été expédié
  echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
  }

 }          
   
}            


?>

ViPHP
ViPHP | 1996 Messages

03 oct. 2007, 08:39

Bonjour,

Print_r ($_POST) te retourne rien ?

Essaye :
echo "Donnees retournees"; print_r ($_POST);
Tu devrais au moins avoir l'affichage : Donnees retournees.
Si ce n'est pas le cas ce n'est pas la bonne page ...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 1996 Messages

03 oct. 2007, 08:40

Oups posté trop tot...

Si tu as l'affichage données retournées et rien derrière, rien n'a été posté. Ton formulaire n'a rien envoyé via la méthode POST.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 17 Messages

05 oct. 2007, 14:31

Tout d'abord merci pour ta reponse ,

ensuite, les données me sont bien retournées sauf que je ne reçois pas les données par mail...
Comme tu l'as suggéré , mon formulaire ne m'a rien renvoyé.

J'ai testé un formulaire au hasard trouvé sur internet et pareil le formulaire n'est pas envoyé...
Voici le *.php du formulaire que j'ai voulu testé
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoye']))
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {
      $civilite		= stripslashes(trim($_POST['civilite']));
      $nom	     	= stripslashes(trim($_POST['nom']));
      $expediteur	= stripslashes(trim($_POST['email']));
      $sujet		= stripslashes(trim($_POST['sujet']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {
      $civilite		= trim($_POST['civilite']);
      $nom		    = trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $sujet		= trim($_POST['sujet']);
      $message		= trim($_POST['message']);
    }
    
    /* Expression régulière permettant de vérifier si le 
    * format d'une adresse e-mail est correct */
    $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
    
    /* Expression régulière permettant de vérifier qu'aucun 
    * en-tête n'est inséré dans nos champs */
    $regex_head = '/[\n\r]/';
    
    /* Si le formulaire n'est pas posté de notre site on renvoie 
    * vers la page d'accueil */
    if($_SERVER['HTTP_REFERER'] != 'http://www.trad-com.fr/demo_1.php')
    {
      header('Location: http://www.trad-com.fr/');
    }
    /* On vérifie que tous les champs sont remplis */
    elseif (empty($civilite) 
           || empty($nom) 
           || empty($expediteur) 
           || empty($sujet) 
           || empty($message))
    {
      $alert = 'Tous les champs doivent être renseignés';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      $alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
    }
    /* On vérifie qu'il n'y a aucun header dans les champs */
    elseif (preg_match($regex_head, $expediteur) 
            || preg_match($regex_head, $nom) 
            || preg_match($regex_head, $sujet))
    {
        $alert = 'En-têtes interdites dans les champs du formulaire';
    }
    /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
    elseif (!isset($_COOKIE['sent']))
    {
        /* Destinataire (votre adresse e-mail) */
        $to = '[email protected]';
      
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis monsite.com par '.$civilite.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message qui vous est adressé :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
        
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
        
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
            $alert = 'E-mail envoyé avec succès';
            
            /* On créé un cookie de courte durée (ici 120 secondes) pour éviter de 
            * renvoyer un mail en rafraichissant la page */
            setcookie("sent", "1", time() + 120);
            
            /* On détruit la variable $_POST */
            unset($_POST);
        }
        else
        {
            $alert = 'Erreur d\'envoi de l\'e-mail';
        }
          
    }
    /* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
    else
    {
        unset($_POST);
    }
}
?>
Je crois que mon probleme ne vient pas de chez moi ...
Modifié en dernier par b|zhon le 05 oct. 2007, 14:55, modifié 1 fois.

Eléphant du PHP | 443 Messages

05 oct. 2007, 14:44

Si tu indentes correctement ton code:
<?php
{ 
	$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
	$msg_ok = "Votre demande a bien été prise en compte.";

	// Verification des champs laissé vide
	if (empty($_POST['nom'])) 			$erreur .= "Votre nom<br/>"; 
	if (empty($_POST['prenom'])) 		$erreur .= "Votre Prenom<br/>";             
	if (empty($_POST['adresse'])) 		$erreur .= "Votre adresse <br/>";
	if (empty($_POST['codepostal']))	$erreur .= "Votre Code postal<br/>";
	if (empty($_POST['ville'])) 		$erreur.= "Votre Ville<br/>";
	if (empty($_POST['email'])) 		$erreur .= "Votre adresse mail<br/>";

	if (strlen($erreur) > strlen($msg_erreur)) 
	{
		echo $erreur;
	}
	else if (!empty($fichier)) 
    { 
		$fich= $_FILES['fichier']['tmp_name']; 
		$ftaille = $_FILES['fichier']['size']; 
		$ftype = $_FILES['fichier']['type']; 
		$fnom = $_FILES['fichier']['name']; 

		// identifiant de séparateur, en principe unique
		$limite = md5(uniqid(time() ));
		// ajout d'un texte à la saisie 
		$mail_corps .= "\r\nNB: Ajout d'une pièce jointe : $fnom\r\n"; 
		// ouverture du fichier joint uploadé en lecture
		$f = fopen($fich, "r") or die("ouverture du fichier $fich impossible ...");
		// récupération du code du fichier joint
		$code =fread($f, $ftaille);
		// encodage standard
		$code = chunk_split(base64_encode($code));
    
    
		$destinataire = '[email protected]';

		if(strtoupper(substr(PHP_OS,0,3)=='WIN'))
		{ 
			$eol="\r\n"; 
			$sol="\n"; 
		}
		else if(strtoupper(substr(PHP_OS,0,3)=='MAC'))
		{ 
			$eol="\r"; 
		}
		else
		{ 
			$eol="\n"; 
		} 
    
	    $from_email  = trim(htmlentities($_POST['email']));
	    $entetemail  = "From: $from_email \n"; // Adresse expéditeur 
	    $entetemail .= "Cc: \n";  
	    $entetemail .= "Bcc: \n"; // Copies cachées 
	    $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour 
	    $entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
	    $entetemail .= "Content-Type: multipart/mixed;\n"; // On indique que le mail est divisé en plusieurs parties 
	    $entetemail .= "Content-Type: multipart/mixed;boundary=\"".$limite."\"".$eol;// Mail divisé en plusieurs parties et séparateur utilisé 
	    
	    // préparation du corps du mail
	    $mail_corps =  "Societe: (".$_POST['societe'].")\n"; 
	    $mail_corps .= "Message de : (".$_POST['nom']."),(".$_POST['prenom'].")\n";
	    $mail_corps .= "Fonction : (".$_POST['fonction'].")\n";
	    $mail_corps .= "Adresse : (".$_POST['adresse']."),(".$_POST['codepostal']."), (".$_POST['ville']."), (".$_POST['pays'].")\n";
	    $mail_corps .= "Son numero de telephone: (".$_POST['telephone']."), fax : (".$_POST['fax'].")\n";
	    $mail_corps .= "Son site Internet : (".$_POST['site'].")\n";
	    $mail_corps .= "Langue source : (".$_POST['select'].")\n";
	    $mail_corps .= "Langue cible 1: (".$_POST['select2'].")\n";
	    $mail_corps .= "Langue cible 2 : (".$_POST['select3'].")\n";
	    $mail_corps .= "Langue cible 3 : (".$_POST['select4'].")\n";
	    $mail_corps .= "Langue cible 4 : (".$_POST['select5'].")\n\n\n";
	    $mail_corps .= "Domaine du projet : (".$_POST['projet'].")\n\n\n";
	    $mail_corps .= "CGV : (".$_POST['cgv'].")";

		/* composition de l'en-tête du message :
	    * le message textuel suivi du code du fichier
	    *********************************************/
	  
	    // composition : le message textuel suivi du code du fichier 
	    $msg = ""; 
	    $msg .= "--".$limite.$eol; 
	    $msg .= "Content-type:text/plain;charset=us-ascii".$eol; 
	    $msg .= "Content-transfer-encoding:8bit".$eol.$eol; 
	    $msg .= $mail_corps.$eol; 

	    $msg .= "--".$limite.$eol; 
	    $msg .= "Content-type:$ftype;name=$fnom".$eol; 
	    $msg .= "Content-transfer-encoding:base64".$eol; 
	    $msg .= "Content-Disposition: attachment; filename=$fnom".$eol.$eol; 
	    $msg .= $code.$eol.$eol; 
	    $msg .= "--".$limite."--".$eol.$eol;
	    
	    function decoder($msg)
	    { 
	    
	    $msg = stripslashes($msg); // évitete les anti-slashs d'échappement 
	    $msg = trim($msg); // évite les '\n', '\r', '\t' etc 
	    return $msg; 
	    } 

		// envoi du mail
		if( mail($destinataire, "Demande de devis", decoder($msg), $entetemail) )
		{
		//Le mail est bien expédié
		echo $msg_ok;
		} 
		else 
		{

		//Le mail n'a pas été expédié
		echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
		}
	}
}
?> 
Tu remarqueras que ton code ne s'execute que si
1. strlen($erreur) <= strlen($msg_erreur), [drole de condition d'ailleurs]
2. !empty($fichier)

A mon avis tu as une accolade qui n'est pas fermée au bon endroit...

Eléphanteau du PHP | 17 Messages

05 oct. 2007, 15:04

 if (strlen($erreur) > strlen($msg_erreur)) 
Si tu as une autre solution pour permettre de verifier si mes champs ne sont pas vide, ça m'aiderai beaucoup, car a vrai dire cette condition me gêne aussi (jsuis un peu perdu lol).

sinon je vais essayer de regarder pour les accolades

en tout cas merci a toi ! je vais reprendre le php que tu as posté , il est beaucoup compréhensible

edit :

Bon j'ai essayé de modifié mon code pour eviter les strlen
// Verification des champs laissé vide 
    if (empty($_POST['nom'])&& empty($_POST['prenom'])&&empty($_POST['adresse'])&&empty($_POST['codepostal'])&&empty($_POST['ville'])&&empty($_POST['email']))                      
                       
    {
	echo "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
    }
Donc quand j'envois le formulaire completement vide, j'ai bien l'erreur "erreur. les champs suivants..."
Par contre, si un des champs cité ci dessus n'est pas vide alors je ne reçois rien :?


EDIT2 :

Bon j'ai resolu le probleme de la verification des champs . A la place de "&&" j'ai mi "OR" tout simplement ;) !!!
Bon maintenan gros probleme mon formulaire est envoyé cependant je ne reçois rien à l'arrivée :/ et meme si il manque des champs le formulaire est envoyé !!!

Petit nouveau ! | 1 Messages

09 oct. 2007, 10:25

Pas évident ton problème, si tous les hébergeurs se mettent à faire leur propre sauce pour le php on est pas rendu.

Eléphanteau du PHP | 17 Messages

09 oct. 2007, 19:38

J'ai envoyé un mail a l'hebergeur et m'a conseillé de passé par la classe mail

Cependant je ne vois pas du tout comment inséré mon corps du message ainsi que la piece jointe !!!

Voici le modele :
<?php
	include_once ("mail.class.php");

	//Création de l'objet
	$mail = new MailSMTP();

	//Définition du destinataire
	$mail->setTo ("[email protected]");
	
	//Définition du sujet      		
	$mail->setSubject("Test 3");

	//Définition du contenu  		                   
	$mail->setBody("ceci est un test mail depuis php","TXT");   // pour une partie txt
	
	//Définition de l'emetteur  		                            				
	$mail->setFrom("[email protected]");

	//Définition de la priorité ( haute=1 ou 2 ou 3)	                            				   
	$mail->setPriority(1);  

	// Ajout de la piece jointe
	$mail->AddAttachement("favicon.ico");

	//Envoi du mail
	if($mail->sendMime())
		echo "Votre demande a bien été prise en compte";
	else
		echo "Une erreur est survenue lors de l\'envoi du formulaire par email";

?>
et mon ancien :


<?php 
{  
     
    $msg_ok = "Votre demande a bien été prise en compte."; 
        function decoder($msg) 
        {  
         
        $msg = stripslashes($msg); // évitete les anti-slashs d'échappement  
        $msg = trim($msg); // évite les '\n', '\r', '\t' etc  
        return $msg;  
        }  

    // Verification des champs laissé vide 
    if (empty($_POST['nom']) OR empty($_POST['prenom']) OR empty($_POST['adresse']) OR empty($_POST['codepostal']) OR empty($_POST[    'ville']) OR empty($_POST['email']))                      
  
    {
	echo "Erreur. Les champs suivants doivent être obligatoirement remplis <br/><br/>";
    }

    else 
	
    if(!empty($fichier))  
    {  
        $fich= $_FILES['fichier']['tmp_name'];  
        $ftaille = $_FILES['fichier']['size'];  
        $ftype = $_FILES['fichier']['type'];  
        $fnom = $_FILES['fichier']['name'];  

        // identifiant de séparateur, en principe unique 
        $limite = md5(uniqid(time() )); 
        // ajout d'un texte à la saisie  
        $mail_corps .= "\r\nNB: Ajout d'une pièce jointe : $fnom\r\n";  
        // ouverture du fichier joint uploadé en lecture 
        $f = fopen($fich, "r") or die("ouverture du fichier $fich impossible ..."); 
        // récupération du code du fichier joint 
        $code =fread($f, $ftaille); 
        // encodage standard 
        $code = chunk_split(base64_encode($code)); 
     
     
        

        if(strtoupper(substr(PHP_OS,0,3)=='WIN')) 
        {  
            $eol="\r\n";  
            $sol="\n";  
        } 
        else if(strtoupper(substr(PHP_OS,0,3)=='MAC')) 
        {  
            $eol="\r";  
        } 
        else 
        {  
            $eol="\n";  
        }  
        $destinataire = '[email protected]'; 
        $from_email  = trim(htmlentities($_POST['email'])); 
        $entetemail  = "From: $from_email \n"; // Adresse expéditeur  
        $entetemail .= "Cc: \n";   
        $entetemail .= "Bcc: \n"; // Copies cachées  
        $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour  
        $entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ; 
        $entetemail .= "Content-Type: multipart/mixed;\n"; // On indique que le mail est divisé en plusieurs parties  
        $entetemail .= "Content-Type: multipart/mixed;boundary=\"".$limite."\"".$eol;/*Mail divisé en plusieurs parties et séparateur   
                                                                                     utilisé*/
        // préparation du corps du mail 
        $mail_corps =  "Societe: ".$_POST['societe']."\n";  
        $mail_corps .= "Message de : ".$_POST['nom'].",".$_POST['prenom']."\n"; 
        $mail_corps .= "Fonction : ".$_POST['fonction']."\n"; 
        $mail_corps .= "Adresse : ".$_POST['adresse'].",,".$_POST['codepostal'].", ".$_POST['ville'].", ".$_POST['pays']."\n"; 
        $mail_corps .= "Son numero de telephone: (".$_POST['telephone']."), fax : (".$_POST['fax'].")\n"; 
        $mail_corps .= "Son site Internet : ".$_POST['site']."\n"; 
        $mail_corps .= "Langue source : ".$_POST['select']."\n"; 
        $mail_corps .= "Langue cible 1: ".$_POST['select2']."\n"; 
        $mail_corps .= "Langue cible 2 : ".$_POST['select3']."\n"; 
        $mail_corps .= "Langue cible 3 : ".$_POST['select4']."\n"; 
        $mail_corps .= "Langue cible 4 : ".$_POST['select5']."\n\n\n"; 
        $mail_corps .= "Domaine du projet : ".$_POST['projet']."\n\n\n"; 
        $mail_corps .= "CGV : ".$_POST['cgv'].""; 

        /* composition de l'en-tête du message : 
        * le message textuel suivi du code du fichier 
        *********************************************/ 
       
        // composition : le message textuel suivi du code du fichier  
        $msg = "";  
        $msg .= "--".$limite.$eol;  
        $msg .= "Content-type:text/plain;charset=us-ascii".$eol;  
        $msg .= "Content-transfer-encoding:8bit".$eol.$eol;  
        $msg .= $mail_corps.$eol;  

        $msg .= "--".$limite.$eol;  
        $msg .= "Content-type:$ftype;name=$fnom".$eol;  
        $msg .= "Content-transfer-encoding:base64".$eol;  
        $msg .= "Content-Disposition: attachment; filename=$fnom".$eol.$eol;  
        $msg .= $code.$eol.$eol;  
        $msg .= "--".$limite."--".$eol.$eol; 
         
        
    }
        // envoi du mail 
        if( @mail($destinataire, "Demande de devis", decoder($msg), $entetemail) ) 
        { 
        //Le mail est bien expédié 
        echo $msg_ok ; 
        }  
        else  
        { 

        //Le mail n'a pas été expédié 
        echo 'Une erreur est survenue lors de l\'envoi du formulaire par email'; 
        } 
     
} 
?> 
Je suis un peu perdu dans tout ca !! Si quelqu'un d'assez doué dans ce domaine pouvait m'expliquer un peu comment on peut integrer mon code au modele ça serait cool ! Surtout pour la piece jointe et le corps du message