Problème formulaire

Petit nouveau ! | 6 Messages

08 nov. 2016, 11:51

Bonjour,
J'ai le message d'erreur suivant avec mon formulaire lors de l'envoi :

Code : Tout sélectionner

<br /> <b>Notice</b>: Undefined variable: mime_boundary in <b>/public_html/c/email.php</b> on line <b>17</b><br /> <br /> <b>Notice</b>: Undefined variable: mime_boundary in <b>/public_html/c/email.php</b> on line <b>24</b><br /> J G5: Merci pour votre message.
Voici le code de mon formulaire php :

Code : Tout sélectionner

<?php //----------------------------------------------------- //-----------change address to xxx@yourdomainname ---------------------- $address= "xxx@yourdomainname"; //----------------------------------------------------- //----------------------------------------------------- $name = $_POST["name"]; $email = $_POST["mail"]; $subject = $_POST["subject"]; $message_content = $_POST["message"]; $headers = "From: $name <$email>\r\n"; $headers .= "Reply-To: $subject <$email>\r\n"; $message = "--$mime_boundary \r\n"; $message .= "Vous avez re&ccedil;u un E-mail sur le site www.fr: \r\n"; $message .= "Name: $name \r\n"; $message .= "Email: $email \r\n"; $message .= "Subject: $subject \r\n"; $message .= "Message: $message_content \r\n"; $message .= "--$mime_boundary--\r\n"; $mail_sent = mail($address, $subject, $message, $headers); if($mail_sent) { echo $name. ": Merci pour votre message."; }
Visiblement la variable mime_boudary n'est pas définie ...

A quoi sert cette variable ? Comment la définir ?

Merci d'avance pour vos messages

Mammouth du PHP | 1967 Messages

08 nov. 2016, 12:11

Où as tu récupéré ce code? C'est là qu'il faut poser la question.

A priori cela devait fonctionner en retirant les lignes 17 et 24

Je pense que cette variable est utile quant on veut inclure une pièce jointe dans un mail, mais dans ce cas là, je conseille de passer par une bibliothèque dédié comme phpmailer par exemple.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 nov. 2016, 13:12

Ce message d'erreur apparait car tu utilises une variable dans ton code qui n'a pas été défini auparavant.
Il faut probablement que tu vérifies son existence avec isset() avant de l'utiliser.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 6 Messages

09 nov. 2016, 11:04

Merci pour vos réponses
Où as tu récupéré ce code? C'est là qu'il faut poser la question.

A priori cela devait fonctionner en retirant les lignes 17 et 24

Je pense que cette variable est utile quant on veut inclure une pièce jointe dans un mail, mais dans ce cas là, je conseille de passer par une bibliothèque dédié comme phpmailer par exemple.
C'est le formulaire d'un template html.
Lorsque je supprime les lignes 17 et 24, j'ai le message suivant

Code : Tout sélectionner

<br /> <b>Notice</b>: Undefined variable: message in <b>/public_html/c/email.php</b> on line <b>18</b><br /> JG: Merci pour votre message.
Ce message d'erreur apparait car tu utilises une variable dans ton code qui n'a pas été défini auparavant.
Il faut probablement que tu vérifies son existence avec isset() avant de l'utiliser.
Je ne l'ai pas précisé mais je connais un peu le html et css mais pas du tout php et js. Du coup, qu'entends-tu par vérifier son existence avec isset()

Enfin, je ne l'avais pas précisé mais malgré ces messages d'erreur, le formulaire fonctionne correctement, les messages sont bien transmis

Mammouth du PHP | 1967 Messages

09 nov. 2016, 11:23

C'est le propre des message d'erreur du type notice, il n'empèche pas le fonctionnement du script.

tester l'éxistence d'une variable avec isset se fait avec une condition if
par exemple
if (isset($mime_boundary)) $message = "--$mime_boundary \r\n";

la variable $message ne sera créer et remplie que si $mime_boundary existe
Dans ton cas, elle n'existera jamais à moins que tu la crée (mais je vois pas trop pourquoi tu ferais cela)

Maintenant pour ta nouvelle Notice,
Le fait est que en supprimant la ligne 17, tu as aussi retiré l'endroit du code où la variable $message est créé. tu l'utilise ensuite pour la remplir avec la syntaxe .= (note la présence du point). PHP considère que lors de l'utilisation de la syntaxe .= la variable doit dèjà être défini. sinon il affiche une Notice. Mais PHP est malin, l'utilisation d'une variable non défini n'est pas vraiment un problème puisqu'il lui suffit de la créer.
C'est d'ailleurs la même chose qui se produisait dans ton premier code, $mime_boundary n'éxistait pas mais php remplissait par un texte vide qui ne génait pas l'éxécution du script.
Pour une raison de bonne pratique, et car même une Notice peut aider à débugger, il est conseillé de définir chaque variable avant de les utiliser ou lors de leur première utilisation.

Dans ton cas, je modifierais juste la nouvelle ligne 17 comme ceci
$message = "Vous avez re&ccedil;u un E-mail sur le site www.fr: \r\n";
En enlevant le point la première fois que tu utilise la variable, tu la défini et tu la rempli d'un texte.
Ne supprime pas le point des autres lignes, sinon tu écrasera la variable à chaque fois et ton texte sera tronqué.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 6 Messages

09 nov. 2016, 11:42

Dans ton cas, je modifierais juste la nouvelle ligne 17 comme ceci
$message = "Vous avez re&ccedil;u un E-mail sur le site http://www.fr: \r\n";
Merci Spols pour le conseil mais on revient au 1er message d'erreur :

Code : Tout sélectionner

<br /> <b>Notice</b>: Undefined variable: mime_boundary in <b>/public_html/c/email.php</b> on line <b>17</b><br /> <br /> <b>Notice</b>: Undefined variable: mime_boundary in <b>/public_html/c/email.php</b> on line <b>24</b><br />

Mammouth du PHP | 1967 Messages

09 nov. 2016, 12:59

On va tourner en rond si tu ne repars pas du code déjà modifié.

repars de ceci
<?php

   //-----------------------------------------------------
   //-----------change address to xxx@yourdomainname ----------------------
   $address= "xxx@yourdomainname";
   //-----------------------------------------------------
   //-----------------------------------------------------

   $name = $_POST["name"];
   $email = $_POST["mail"];
   $subject = $_POST["subject"];
   $message_content = $_POST["message"];
   
   $headers = "From: $name <$email>\r\n";
   $headers .= "Reply-To: $subject <$email>\r\n";
   
   $message = "Vous avez re&ccedil;u un E-mail sur le site www.fr: \r\n";
   $message .= "Name: $name \r\n";
   $message .= "Email: $email \r\n";
   $message .= "Subject: $subject \r\n";
   $message .= "Message: $message_content \r\n";
   $mail_sent = mail($address, $subject, $message, $headers);
   if($mail_sent)
   {   
      echo $name. ": Merci pour votre message.";
   }
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube