Probleme conditions fonction mail

Résolu
Bonjour à tous,

j'ai un problème avec ma fonction mail. C'est à dire que lorsque je met la condition if, le mail ne s'envoie pas, mais lorsque je l'enlève, il n'y a aucun problème il s'envoie. Je pense qu'il y a surement un problème de syntaxe mais je ne vois pas ou. Voici mon code :
// To
$to = $payer_email;

// Subject
$subject = " Objet ";

// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));

// Headers
$headers = 'From: exemple <mail@server.com>'."\r\n";
$headers .= 'Mime-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
$headers .= "\r\n";

// Message
$msg = 'Texte affiché par des clients mail ne supportant pas le type MIME.'."\r\n\r\n";

// Message HTML
$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type: text/html; charset=utf-8'."\r\n\r\n";
$msg .= ' 
<p style="font-size: 20px;"> Bonjour, </p>
<p> Voici le récapitulatif </p>
<br />
Nom  : ' .$first_name. ' ' .$last_name. '<br />
Adresse e-mail : ' .$payer_email. '<br /><br />
<hr /><br />

<strong> Détail de la commande </strong><br />


Objet en commande : '  .$item_name. '<br />
Numéro de lobjet : '  .$item_number. '<br />
Numéro de la facture : ' .$invoice. '<br /><br />'
if(!empty($objet2))
{'
Objet en commande : '  .$item_name2. '<br />
Numéro de lobjet : '  .$item_number2. '<br />';
}'


'."\r\n";


// Fin
$msg .= '--'.$boundary."\r\n";

// Function mail()
mail($to, $subject, $msg, $headers);


4 réponses

  1. Contributeur
    Est-ce qu'il est possible de mettre des fonctions lorsque l'on veut remplir une variable avec du texte? Enfin est-ce que PHP permet cela?

    Sinon

    if(!empty($objet2))
    {'
    Objet en commande : ' .$item_name2. '<br />
    Numéro de lobjet : ' .$item_number2. '<br />';
    }'

    Je suis pas sûr que PHP aime un ; tout seul au milieu d'une fonction.
    0
    1. Je pense que c'est autorisé, car l'utilisation de fonctions sur une fonction mail est très utilisé, même chez les prestataires e-commerce, je pense que c'est juste un problème de syntaxe au niveau de mon if.
      Oui effectivement, mais même en l'enlevant, le problème persiste :/
      0
      1. Contributeur
        Non ce que je voulais dire, c'est mettre une fonction dans l'attribution d'un texte, parce qu'ici à moins que je vois mal, le $msg est forgé directement avec la fonction if à l'intérieur.

        Moi j'aurais fait :

        $msg = première partie message;

        if(...)
        {
        $msg .= $msg.'.............';
        }

        Enfin c'est ma façon de voir, je ne sais pas programmer le PHP :-)
        0
        1. Bonsoir,

          Comportement normal car la condition se trouve à l'intérieur de la variable $msg
          Donc il faut modifier ton code afin de concaténer le résultat de la condition if si elle est évaluée. Exemple :
          // Message HTML
          $msg .= '--'.$boundary."\r\n";
          $msg .= 'Content-type: text/html; charset=utf-8'."\r\n\r\n";
          $msg .= '
          <p style="font-size: 20px;"> Bonjour,</p>
          <p>Voici le récapitulatif</p>
          <br />
          Nom  : ' .$first_name. ' ' .$last_name. '<br />
          Adresse e-mail : ' .$payer_email. '<br /><br />
          <hr /><br />
          
          <strong> Détail de la commande </strong><br />
          
          Objet en commande : ' .$item_name. '<br />
          Numéro de lobjet : ' .$item_number. '<br />
          Numéro de la facture : ' .$invoice. '<br /><br />';
          if(!empty($objet2)) {
          	$msg .= 'Objet en commande : ' .$item_name2. '<br />
          	Numéro de l\'objet : ' .$item_number2. '<br />';
          }
          $msg .= "\r\n";
          0
      2. Merci Beaucoup pour votre aide ! le problème est enfin résolue =D
        0