Un souci dans formulaire php avec récup champ msql

Un souci dans formulaire php avec récup champ msql Formulaire PHP avec test champs vides [Résolu] » Forum - PHP [php] garder historique champs d'un formulair (Résolu) » Forum - PHP Vérification des champs d'un formulaire PHP (Résolu) » Forum - PHP Vérifier les champs d' un formulaire PHP (Résolu) » Forum - PHP Ajouter un champ dans un formulaire php (Résolu) » Forum - PHP

Bonjour à tous,

Jusqu'à présent nous avions un formulaire simple général pour transmettre les erreurs dans la base de données à l'administrateur... çà tourne!
Maintenant on veut que le formulaire récupère pour chaque item les données de la base et que le membre corrige le texte de la base dans le formulaire puis l'envoie à l'administrateur (c'est mieux!)
On a fait (en étant aidé!) la partie MySql (çà tourne en LocalHost avec 2 items, Current trinominal name et Subfamily, voir code) et on a copié la partie de code du précédent formulaire dans le nouveauen l'adaptant (et il n'y a pas d'erreur de code en localhost).
Malheureusement c'est pas possible de vérifier en localhost le fonctionnement du nouveau formulaire, en l'envoyant, bien sûr.
Donc il faut télécharger le nouveau la nuit très tard 1 ou 2 minutes sur le site (en gardant le vieux en archive) pour tester et revenir à l'ancien si erreur vite fait.
On a testé une fois et on a 2 lignes d'erreur qui s'affichent sur Internet losrque l'on clique sur le bouton "send":


Warning: mail() expects at least 3 parameters, 2 given in /homepages/1/htdocs/xxxx/blabla.php on line 143

Warning: mail() expects at least 3 parameters, 2 given in /homepages/1/htdocs/xxxx/blabla.php on line 143

En prenant le code source de la page, la ligne 143 est sans rapport avec notre partie du code.

Donc il y a une erreur dans notre code, mais où... est-ce que quelqu'un peut nous donner un coup de pousse?
Merci d'avance!

Seb

         $recipient = '[email protected]';         $copy = 'yes';         $form_action = '';         $message_sent = "Your message has been well received, thank you.";         $message_not_sent = "An error occurred during processing your message, please try again.";         $message_invalid_form = "Please check all fields are filled and syntax of e-mail is correct.";         function Rec($text)     {         $text = htmlspecialchars(trim($text), ENT_QUOTES);         if (1 === get_magic_quotes_gpc())         {             $text = stripslashes($text);         }               $text = nl2br($text);         return $text;     };         function IsEmail($email)     {         $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);         return (($value === 0) || ($value === false)) ? false : true;     }     $name_of_member    = (isset($_POST['name_of_member']))    ? Rec($_POST['name_of_member'])    : '';     $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';     $email = (IsEmail($email)) ? $email : '';     $err_form = false;     if (isset($_POST['send']))     {         if (($name_of_member != '') && ($email != ''))         {             $headers  = 'From:'.$name_of_member.' <'.$email.'>' . "\r\n";             if ($copy == 'yes')             {                 $target = $recipient.';'.$email;             }             else             {                 $target = $recipient;             };             $num_emails = 0;             $tmp = explode(';', $target);             foreach($tmp as $email_recipient)             {                 if (mail($email_recipient, $headers))                 $num_emails++;             }                   if ((($copy == 'yes') && ($num_emails == 2)) || (($copy == 'no') && ($num_emails == 1)))             {                 echo '<p>'.$message_sent.'</p>';             }             else             {                 echo '<p>'.$message_not_sent.'</p>';             };         }         else         {             echo '<p>'.$message_invalid_form.'</p>';             $err_form = true;         };     };     if (($err_form) || (!isset($_POST['send'])))     {         echo '<form id="contact" method="post" action="' . $form_action . '">';         echo '<input type="hidden" name="Rk_Hist" value="' . $_GET["Rk_Hist"] . '">';         echo '<input type="hidden" name="form_modif" value="1">';         echo '<input type="hidden" name="modifier" value="1">';         echo 'Name of member: <input type="text" size="100" id="name_of_member" name="name_of_member" value="' .stripslashes($name_of_member). '" tabindex="1"><br>';         echo 'E-mail: <input type="text" size="100" id="email" name="email" value="' .stripslashes($email). '" tabindex="2"><br><br><br><br>';         echo 'Current trinominal name (no change): <input type="text" size="100" name="Current_trinom_name" value="' . $result[0]["Current_trinom_name"] . '"><br>';         echo 'Subfamily: <textarea style="vertical-align: top;" rows="10" cols="100" wrap="virtual" name="Subfamily">' . $result[0]["Subfamily"] . '</textarea><br>';         echo '<div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>';         echo '</form>';         }  



Forum

Un souci dans formulaire php avec récup champ msql Formulaire PHP avec test champs vides [Résolu] » Forum - PHP [php] garder historique champs d'un formulair (Résolu) » Forum - PHP Vérification des champs d'un formulaire PHP (Résolu) » Forum - PHP Vérifier les champs d' un formulaire PHP (Résolu) » Forum - PHP Ajouter un champ dans un formulaire php (Résolu) » Forum - PHP

Web: www.shapebootstrap.net

15 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour

Le message d'erreur semble pourtant clair : il faut passer 3 paramètres à la fonction mail, et tu n'en passes que 2.
Si tu regardes la doc : http://php.net/manual/fr/function.mail.php, il faut indiquer au moins le destinataire, le sujet et le message.
Toi, tu n'indiques que le destinataire et les en-têtes, tu oublies le sujet et le message.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Ah oui merci, Le Père.
Je vais ajouter le title que j'avais supprimé.
Comme cela?
$title = (isset($_POST['title'])) ? Rec($_POST['title']) : '';
Mais pour le message je ne sais pas quoi faire... je vais avoir une cinquantaine de input type text et autant de textarea, tous extraits de champs de la BDD éventuellement à modifier par le formulaire du moins certains d'entre eux.
Dis moi, je dois faire autant de variables comme?
$name_of_member = (isset($_POST['name_of_member'])) ? Rec($_POST['name_of_member']) : '';

Désolé, je suis un peu paumé et pas du tout à l'aise avec les formulaires... merci de ton aide.
Comme çà je pourrai faire des tests ce WE quand le site est moins visité.
A+, Seb

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

En supposant que $_POST['title'] représente le sujet (et pas le titre, il n'y a pas de notion de titre dans la fonction mail) du message, qu'il n'y ait pas dedans de caractères bizarres et que tu mettes bien $title dans l'appel à la fonction mail, ça a l'air correct.
Pour ce qui est du message, ce n'est pas à moi de te dire ce que tu dois faire. Je n'ai aucune idée de ce que tu veux dire aux destinataires du message (tu leur écris pour leur dire quelque chose, non ?). Si tu as besoin d'extraire des données de toute une ribambelle de champs du même type, ça doit pouvoir se faire avec une simple boucle 'for', mais ça n'a aucun rapport avec les messages d'erreur que tu avais cités.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Après de multiples tentatives en ligne ces dernières nuits, j'avance (je n'ai plus de message d'erreur) mais le problème n'est pas réglé.

Je vais être méthodique pour mieux expliquer.
Donc 2 étapes (dans mes tentatives) en modifiant le code précédent de 2 manières).

1. je ne fais qu'un formulaire partiel avec seulement nom expéditeur, adresse-mail et sujet/titre - ici Current_trinom_name) (donc c'est pas un vrai formulaire, car sans boîte de message à remplir) et les lignes de codes suivantes:

 $name_of_member    = (isset($_POST['name_of_member']))    ? Rec($_POST['name_of_member'])    : ''; $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : ''; $Current_trinom_name   = (isset($_POST['Current_trinom_name']))   ? Rec($_POST['Current_trinom_name'])   : ''; //etc. if (($name_of_member != '') && ($email != '') && ($Current_trinom_name != '')) //etc. if (mail($email_recipient, $Current_trinom_name, $headers)) //etc. echo '<form id="contact" method="post" action="' . $form_action . '">';         echo '<input type="hidden" name="Rk_Hist" value="' . $_GET["Rk_Hist"] . '">';         echo '<input type="hidden" name="form_modif" value="1">';         echo '<input type="hidden" name="modifier" value="1">';         echo 'Name of member: <input type="text" size="100" id="name_of_member" name="name_of_member" value="' .stripslashes($name_of_member). '" tabindex="1"><br>';         echo 'E-mail: <input type="text" size="100" id="email" name="email" value="' .stripslashes($email). '" tabindex="2"><br><br><br><br>';         echo 'Current trinominal name (do not change !): <input type="text" size="100" name="Current_trinom_name" value="' . $result[0]["Current_trinom_name"] . '"><br>';         echo '<div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>';         echo '</form>'; 


Avec ce test, le formulaire en ligne envoyé (send) retourne le message
Your message has been well received, thank you.
Et dans la boîte mail de l'expéditeur, le title ou subject comme vous voudrez est bien repris.
Et dans la boîte mail du destinataire, le title ou subject comme vous voudrez est bien repris.
Ce qui est curieux c'est que dans les 2 cas, l'expéditeur est :
CGI-Mailer <[email protected]>
Et dans le texte du message il y a From:Non Expéditeur, Prénom <[email protected]>
Autrement dit, dans le mail, il n'y a pas l'expéditeur de précisé mais [email protected] (l'hébergeur)

2. je m'engage dans le formulaire complet avec nom expéditeur, adresse-mail, sujet titre, et en plus un text-area de subfamily (donc juste un imput text pour le sujet-titre, Current_trinom_name, et un seul texte area, Subfamily, alors qu'il y en aura une centaine) et les lignes de codes suivantes:

 $name_of_member    = (isset($_POST['name_of_member']))    ? Rec($_POST['name_of_member'])    : ''; $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : ''; $Current_trinom_name   = (isset($_POST['Current_trinom_name']))   ? Rec($_POST['Current_trinom_name'])   : ''; $Subfamily = (isset($_POST['Subfamily'])) ? Rec($_POST['Subfamily']) : ''; //etc. if (($name_of_member != '') && ($email != '') && ($Current_trinom_name != '') && ($Subfamily != '')) //etc. if (mail($email_recipient, $Current_trinom_name, $Subfamily, $headers)) //etc.         echo '<form id="contact" method="post" action="' . $form_action . '">';         echo '<input type="hidden" name="Rk_Hist" value="' . $_GET["Rk_Hist"] . '">';         echo '<input type="hidden" name="form_modif" value="1">';         echo '<input type="hidden" name="modifier" value="1">';         echo 'Name of member: <input type="text" size="100" id="name_of_member" name="name_of_member" value="' .stripslashes($name_of_member). '" tabindex="1"><br>';         echo 'E-mail: <input type="text" size="100" id="email" name="email" value="' .stripslashes($email). '" tabindex="2"><br><br><br><br>';         echo 'Current trinominal name (do not change, please !): <input type="text" size="100" name="Current_trinom_name" value="' . $result[0]["Current_trinom_name"] . '"><br>';         echo 'Subfamily: <textarea style="vertical-align: top;" rows="10" cols="100" wrap="virtual" name="Subfamily">' . $result[0]["Subfamily"] . '</textarea><br>';         echo '<div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>';         echo '</form>'; 


Dans ce cas, le formulaire en ligne envoyé (send) retourne le message
Your message has been well received, thank you.
MAIS il n'y a rien, ni dans la boïte mail de l'expéditeur ni dans la boïte mail du destinataire !
Rien!

Bien sûr j'ai testé auparavant les 2 étapes dans le localhost de wampserver, et il n'y a pas d'erreur qui ressort.

Je ne vois pas quoi faire de plus après ces 2 étapes de tests méthodiques.

Je suis parti d'un formulaire standard repris d'Internet (sans receuil extrait de la BDD) et qui marche depuis longtemps.
Puis j'ai ajouté les codes qui extraits les données de la BDD et j'ai adapté le code du formulaire en conséquence (c'est probablement là qu'il y a un souci, donc dans le code du 1er message?).

A+

Merci d'avance,

Seb

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Tu le fais exprès ?

if (mail($email_recipient, $Current_trinom_name, $headers))

Le premier paramètre c'est le destinataire
le second c'est le sujet
le troisième c'est le message
comme je te l'ai déjà dit et comme il est indiqué dans la doc de la fonction mail, pour laquelle je t'ai fourni le lien.
Et tu te dis étonné de retrouver dans le message ce que tu as mis dans la variable headers ? C'est pourtant exactement ce que dit la doc.

Ceci dit, la deuxième version, où tu passes 4 paramètres à la fonction mail a l'air plus correcte.
Mets des "echo" immédiatement avant l'appel à mail pour voir les valeurs réelles de $email_recipient,, $Current_trinom_name, $Subfamily et $headers.
Et vérifie si le message ne se retrouve pas dans les spams du destinataire.
Autre cause de problème possible: ton hébergeur ne veut peut-être pas envoyer de mail avec un "From:" d'un autre domaine, voire même d'un autre domaine que le titulaire du compte.

Pour éviter ces problèmes et de nombreux autres, depuis longtemps, je n'utilise plus directement la fonction mail de PHP, mais une bibliothèque (PhpMailer) faite par des gens qui ont de vraies compétences dans ce domaine.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour le Père, bonjour le Forum,

Je suis désolé de t'avoir énervé.
Rien n'est fait exprès.
Dans le message j'ai pris soin de préciser que je suis parti d'un formulaire récent pris sur Internet (sans extraits de BDD) qui marche.
Je viens de re-vérifier en ligne et c'est nickel et il n'y a pas de souci, comme avec la 1ère étape, de type CGI-Mailer <[email protected]> (l'expéditeur est nommé comme envoyeur du mail, normal).
Ensuite j'avais déjà vérifié les dossiers spams avec le test de la 2ème étape et il n'y avait rien (de toute façon le mail reçu avec le test de la première étape même imparfait n'était pas en spam).
Que le formulaire proposé sur Internet ne te convienne pas dans sa construction, je le comprend mais je n'en sais rien : c'est une querelle entre experts (si tu préfères changer le formulaire par un autre équivalent qui te convient, pas de souci pour moi, les stripslash et autre magic ne sont pas importants... nous sommes dans un espace membre protégé par ID/PW).
Mon projet, je le rappelle, c'est un formulaire qui permet, avec une centaine de type-text et de text-area pré-remplis avec des extraits de la BDD, aux membres de faire des corrections et de les envoyer à une adresse mail (et pas de corriger en direct la BDD... trop risqué!)
Bon, avançons, s'il te plait.
Tu proposes de mettre des "echo php" pour tester les variables mais précisément quel code dois-je mettre et où?
Comme cela?
echo '<p>Contenu Headers:' .$headers. '</p>';
sachant qu'il y a déjà des tests d'eereur dans la page php du type:
error reporting (e_ALL)
echo 'Erreur:' $e, etc...


Merci de ta compréhension.
Ton aide est vraiment appréciée.

A+
Seb

ci-dessous, pour info, le code complet du formulaire initial (sans extraction de la BDD) qui marche:

 //derived from php-astux.info/script-formulaire-contact (thank you)     $recipient = '[email protected]';     $copy = 'yes';     $form_action = '';     $message_sent = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Your message has been well received, thank you.";     $message_not_sent = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>An error occurred during processing your message, please try again.";     $message_invalid_form = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Please check all fields are filled and syntax of e-mail is correct.";     function Rec($text)     {         $text = htmlspecialchars(trim($text), ENT_QUOTES);         if (1 === get_magic_quotes_gpc())         {             $text = stripslashes($text);         }               $text = nl2br($text);         return $text;     };     function IsEmail($email)     {         $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);         return (($value === 0) || ($value === false)) ? false : true;     }     $name    = (isset($_POST['name']))    ? Rec($_POST['name'])    : '';     $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';     $title   = (isset($_POST['title']))   ? Rec($_POST['title'])   : '';     $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';     $email = (IsEmail($email)) ? $email : '';     $err_form = false;     if (isset($_POST['send']))     {         if (($name != '') && ($email != '') && ($title != '') && ($message != ''))         {             $headers  = 'From:'.$name.' <'.$email.'>' . "\r\n";             if ($copy == 'yes')             {                 $target = $recipient.';'.$email;             }             else             {                 $target = $recipient;             };                   $message = str_replace("'","'",$message);             $message = str_replace("’","'",$message);             $message = str_replace(""",'"',$message);             $message = str_replace('<br>','',$message);             $message = str_replace('<br />','',$message);             $message = str_replace("<","<",$message);             $message = str_replace(">",">",$message);             $message = str_replace("&","&",$message);                $num_emails = 0;             $tmp = explode(';', $target);             foreach($tmp as $email_recipient)             {                 if (mail($email_recipient, $title, $message, $headers))                     $num_emails++;             }                   if ((($copy == 'yes') && ($num_emails == 2)) || (($copy == 'no') && ($num_emails == 1)))             {                 echo '<p>'.$message_sent.'</p>';             }             else             {                 echo '<p>'.$message_not_sent.'</p>';             };         }         else         {             echo '<p>'.$message_invalid_form.'</p>';             $err_form = true;         };     };     if (($err_form) || (!isset($_POST['send'])))     {         echo '         <form id="contact" method="post" action="'.$form_action.'">         <fieldset><legend>Your coordinates</legend>             <p><label for="name">Name of member:</label><input type="text" size="100" id="name" name="name" value="'.stripslashes($name).'" tabindex="1" /></p>             <p><label for="email">Email :</label><input type="text" size="100" id="email" name="email" value="'.stripslashes($email).'" tabindex="2" /></p>         </fieldset>               <fieldset><legend>Your message :</legend>             <p><label for="title">title :</label><input type="text" size="100" id="title" name="title" value="'.stripslashes($title).'" tabindex="3" /></p>             <p><label for="message">Message :</label><textarea id="message" name="message" style="vertical-align: top;" tabindex="4" cols="60" rows="8">'.stripslashes($message).'</textarea></p>         </fieldset>               <div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>         </form>'; 

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Le formulaire proposé sur Internet me convient parfaitement, il n'y a aucune "querelle d'expert" là-dessus.
Mais passons.
Les 'echo' que je te propose, je t'ai déjà dit de manière suffisamment précise où les mettre : immédiatement avant l'appel à mail. Si je te le demande, c'est pour t'assurer que la fonction est bien appelée avec les bonnes valeurs pour les paramètres. Tout ceci n'a aucun rapport avec le "error_reporting".

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour Le Père,

A mon niveau de compréhension la phrase n'est pas évidente.
Mais je tente le code suivant, avec des echos sur les 4 variables que tu as mentionnées:

 //jusque là, inchangé dans étape 2 echo 'Subfamily: <textarea style="vertical-align: top;" rows="10" cols="100" wrap="virtual" name="Subfamily">' . $result[0]["Subfamily"] . '</textarea><br>';         echo '<p>variable 1'.$email_recipient.'</p>';         echo '<p>variable 2'.$Current_trinom_name.'</p>';         echo '<p>variable 3'.$Subfamily.'</p>';         echo '<p>variable 4'.$headers.'</p>';         echo '<div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>';         //echo "<input type='submit' name='send' value='Send !'>";         echo '</form>'; 

Dans local host de Wampserver, j'ai effectivement 2 érreurs qui apparaissent, des erreurs "génériques" de type undefined variable qui ne (me) disent rien (avec undefined variable cela peut être plein de choses)
Les 2 variables semblent pourtant définies par:
$tmp = explode(';', $target);
foreach($tmp as $email_recipient)
et:
$headers = 'From:'.$name_of_member.' <'.$email.'>' . "\r\n";


Notice: Undefined variable: email_recipient in C:\_xxxxxxx.php on line 175
Call Stack
# Time Memory Function Location
1 0.0030 349352 {main}( ) ..\xxxxxxx.php:0

variable 1

variable 2

variable 3

Et la ligne 175 est:
echo '<p>variable 1'.$email_recipient.'</p>';


( ! ) Notice: Undefined variable: headers in C:\_xxxxxxx.php on line 178
Call Stack
# Time Memory Function Location
1 0.0030 349352 {main}( ) ..\xxxxxxx.php:0

variable 4

Et la ligne 178 est:
echo '<p>variable 4'.$headers.'</p>';

Voilà j'espère que cela peut t'aider à progresser.
Si je ne me suis pas planté dans l'endroit où ajouter les 4 nouvelles lignes de code!

A+

Seb

PS: par curiosité, j'ai ajouté les 2 lignes de code suivant, juste après:
echo '<p>variable 5'.$name_of_member.'</p>';
echo '<p>variable 6'.$email.'</p>';
Pas de nouvelles erreurs... juste:
variable 5
variable 6
toujours avant le bouton 'Send!'

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

IMMEDIATEMENT AVANT L'APPEL A MAIL
Ce n'est pas une question de compétences en informatique, mais de langue française.
À moins que ... Tu sais ce que ça veut dire, "appel à mail" ?

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Je me permet d'intervenir dans cette discussion....

Avant de continuer à écrire ton code... je t'invite FORTEMENT à appliquer ce qui est conseillé ici :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Puis à nous reposter (en un seul morceau) l'entièreté de ton code qu'on puisse voir (suite aux diverses modifications apportés depuis le début de cette discussion) les modifications réalisées.
Cela nous permettra également de mieux nous rendre compte de la façon dont tu as écris (et positionné) ton code.
NB: Le code que l'on veut voir... c'est celui qui te génère les divers messages d'erreur... pas un ancien code obscure qui fonctionnait à peu prêt.

Reply
réponses:
  • Sebas22

    Bonjour Jordane,

    Merci de ta proposition d'aide (je me rappelle que tu m'as déjà bien aidé).
    Tu m'as surtout appris à tout mettre et précisément.
    C'est ce que je crois avoir fait dans le 1er message.
    Le formulaire initial (sans recours à l'extraction de la BDD fonctionne vraiment à 100% et les membres l'utilisent régulièrement).
    Cela dit avec le nouveau formùulaire intégrant des extraits de la BDD on peut faire plus simple, oublier les tripslashes, caractères particuliers etc. car là on est dans la section protégée (ID/PW) et les membres ne s'amuseraiten pas à corrompre leur message sous peine d'exclusion.
    Et sur le site la plupart des messages se font via direct e-mail avec adress Javascript cryptée.
    Donc aucune attache au formulaire si l'on veut le simplifier.

  • jordane45

    Tu parles de données provenant de la base de données.... mais je ne vois aucun code lié à la BDD......
    Je ne vois pas non plus les instructions qui imposent l'affichage des erreurs PHP dans ton code....
    Je pense sincèrement qu'il manque tout le début de ton code... il n'est donc pas ENTIER.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour le Père,

Désolé la réponse est non.
Mais je ne me suis pas laissé abattre et j'ai googelisé la phrase "appel à mail".
J'ai trouvé sur un forum qqchose qui pouvait s'appliquer donc j'ai déplacé mes 6 echos avant le if(mail($...

 foreach($tmp as $email_recipient)             {                 echo '<p>variable 1'.$email_recipient.'</p>';                 echo '<p>variable 2'.$Current_trinom_name.'</p>';                 echo '<p>variable 3'.$Subfamily.'</p>';                 echo '<p>variable 4'.$headers.'</p>';                 echo '<p>variable 5'.$name_of_member.'</p>';                 echo '<p>variable 6'.$email.'</p>';                 if (mail($email_recipient, $Current_trinom_name, $Subfamily, $headers)) 

Donc si c'est bien çà, on gagne une étape.
Avec ce code, dans Wampserver localhost plus d'erreur.
Ensuite le test en ligne affiche toujours "Your message has been well received, thank you.", mais le mail n'est pas reçu par le destinataire (nous), ni par l'expéditeur en copie (et rien en spam).
Sur la page web après avoir fait send, je lis tel quel:
xxxxxxxxxxxxxxxxx
variable 1 [email protected] (le bon destinataire)
variable 2 le sujet (bien extrait de la BDD pour Current_trinom_name)
variable 3 le textarea (bien extrait de la BDD pour Subfamily)
variable 4 From:nom et prénom remplis
variable 5 à nouveau nom et prénom remplis (mais sans from)
variable 6 [email protected] (le bon expéditeur)

puis à nouveau (une 2ème fois), les variables de 1 à 6, mais pour la 1ère c'est l'expéditeur qui est repris pas le destinataire (j'ai vérifié 2 fois)

variable 1 [email protected] (le bon expéditeur)
variable 2 le sujet (bien extrait de la BDD pour Current_trinom_name)
variable 3 le textarea (bien extrait de la BDD pour Subfamily)
variable 4 From:nom et prénom remplis
variable 5 à nouveau nom et prénom remplis (mais sans from)
variable 6 [email protected] (le bon expéditeur)
xxxxxxxxxxxxxxxxx

Par sécurité j'ai fait un autre test en déplaçant le bloc de code de 6 echos d'une ligne vers le haut (avant l'accolade), et là je n'ai plus qu'une seule série de résultats:
variable 1 [email protected] (le bon destinataire)
variable 2 le sujet (bien extrait de la BDD pour Current_trinom_name)
variable 3 le textarea (bien extrait de la BDD pour Subfamily)
variable 4 From:nom et prénom remplis
variable 5 à nouveau nom et prénom remplis (mais sans from)
variable 6 [email protected] (le bon expéditeur)

Voilà j'espère que cette fois c'est éclairant (encore pardon!), sinon dis-moi stp précisément où je dois mettre ces 6 lignes (ou moins) de code!

A+, Seb

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour Jordane45,

Pas de souci... voici tout le code concerné de la page:

 <?php include 'session_start.php'; ?> <!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> //etc.     <?php     error_reporting(E_ALL);     require ("../connect.php");     try {         $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(     PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));     } catch (Exception $e) {         echo 'Erreur : ' . $e->getMessage() . '<br />';         echo 'N° : ' . $e->getCode();     }          echo '<body><div id="header">'; //etc.     echo '<div id="center">';          $Reversed_name = null;     if (empty($result[0])) {         include 'xxxwelcomexxx.txt';       }        elseif (isSet($_GET["modifier"]) and $_GET["modifier"] == 1) {                      // Herein is section "modifier" direct to database then by electronic form           // Check if form has been submitted           if (isSet($_GET["form_modif"])) {                  echo "Change Profile of : " . $result[0]["Reversed_name"] . "<br>";                                  $update = "UPDATE taxabase1 SET Family='"  . $_GET["Family"] . "', Subfamily='"  . $_GET["Subfamily"] . "' WHERE taxabase1.Rk_Hist = :id";                 // to neutralize update in database add respectively /* and */ just below on lines 76 to 79                 /*echo "Changed contents has been received for  " . $_GET["Family"] . " to replace previous contents " .$result[0]["Family"] . ". Request update with : " .  $update . " <br>";                 $requete = $connexion->prepare($update);                 $requete->bindParam(':id', $_GET["Rk_Hist"], PDO::PARAM_INT);                 $requete->execute();*/                 echo "<p>";                 echo "<a href='samepage.php?Rk_Hist=" . $_GET["Rk_Hist"] . "'>Back to modified Profile</a>";                 echo "</p>";           }           else {         echo "<h6>Additions and Corrections Form for  " . $result[0]["Reversed_name"] . "</h6>";         echo '<p>Please type hereafter your additions [text to be added] (between +++ +++) and your corrections [text to be deleted] (between --- ---) </p><p>Simple… if no text is mentioned in between --- ---, then you mean it is a simple addition<br>           if no text is mentioned in between +++ +++, then you mean it is a simple suppression<br>           if text is mentioned both in between --- --- and in between +++ +++, then you mean it is a simple replacement<br>           if no text is mentioned between --- --- or between +++ +++, then you mean the text is not to be modified.</p><p> </p>';         // to be modified for a form sent by e-mail         $recipient = '[email protected]';         $copy = 'yes';         $form_action = '';         $message_sent = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Your message has been well received, thank you.";         $message_not_sent = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>An error occurred during processing your message, please try again.";         $message_invalid_form = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Please check all fields are filled and syntax of e-mail is correct.";         function Rec($text)     {         $text = htmlspecialchars(trim($text), ENT_QUOTES);         if (1 === get_magic_quotes_gpc())         {             $text = stripslashes($text);         }               $text = nl2br($text);         return $text;     };         function IsEmail($email)     {         $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~][email protected](?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);         return (($value === 0) || ($value === false)) ? false : true;     }     $name_of_member    = (isset($_POST['name_of_member']))    ? Rec($_POST['name_of_member'])    : '';     $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';     $Current_trinom_name   = (isset($_POST['Current_trinom_name']))   ? Rec($_POST['Current_trinom_name'])   : '';     $Subfamily = (isset($_POST['Subfamily'])) ? Rec($_POST['Subfamily']) : '';     $email = (IsEmail($email)) ? $email : '';     $err_form = false;     if (isset($_POST['send']))     {         //if (($name_of_member != '') && ($email != '') && ($title != '') && ($message != ''))         if (($name_of_member != '') && ($email != '') && ($Current_trinom_name != '') && ($Subfamily != ''))         {             $headers  = 'From:'.$name_of_member.' <'.$email.'>' . "\r\n";             if ($copy == 'yes')             {                 $target = $recipient.';'.$email;             }             else             {                 $target = $recipient;             };                   /*$message = str_replace("'","'",$message);             $message = str_replace("’","'",$message);             $message = str_replace(""",'"',$message);             $message = str_replace('<br>','',$message);             $message = str_replace('<br />','',$message);             $message = str_replace("<","<",$message);             $message = str_replace(">",">",$message);             $message = str_replace("&","&",$message);*/                $num_emails = 0;             $tmp = explode(';', $target);             foreach($tmp as $email_recipient)             {                 echo '<p>variable 1'.$email_recipient.'</p>';                 echo '<p>variable 2'.$Current_trinom_name.'</p>';                 echo '<p>variable 3'.$Subfamily.'</p>';                 echo '<p>variable 4'.$headers.'</p>';                 echo '<p>variable 5'.$name_of_member.'</p>';                 echo '<p>variable 6'.$email.'</p>';                 if (mail($email_recipient, $Current_trinom_name, $Subfamily, $headers))                 //if (mail($email_recipient, $title, $message, $headers))                     $num_emails++;             }                   if ((($copy == 'yes') && ($num_emails == 2)) || (($copy == 'no') && ($num_emails == 1)))             {                 echo '<p>'.$message_sent.'</p>';             }             else             {                 echo '<p>'.$message_not_sent.'</p>';             };         }         else         {             echo '<p>'.$message_invalid_form.'</p>';             $err_form = true;         };     };     if (($err_form) || (!isset($_POST['send'])))     {         echo '<form id="contact" method="post" action="' . $form_action . '">';         //echo "<form action='samepage.php' method='post'>";         echo '<input type="hidden" name="Rk_Hist" value="' . $_GET["Rk_Hist"] . '">';         echo '<input type="hidden" name="form_modif" value="1">';         echo '<input type="hidden" name="modifier" value="1">';         //echo '<p><label for="name">name :</label><input type="text" size="100" id="name" name="name" value="'.stripslashes($name).'" tabindex="1" /></p>';         echo 'Name of member: <input type="text" size="100" id="name_of_member" name="name_of_member" value="' .stripslashes($name_of_member). '" tabindex="1"><br>';         echo 'E-mail: <input type="text" size="100" id="email" name="email" value="' .stripslashes($email). '" tabindex="2"><br><br><br><br>';         echo 'Current trinominal name (do not change, please !): <input type="text" size="100" name="Current_trinom_name" value="' . $result[0]["Current_trinom_name"] . '"><br>';         echo 'Subfamily: <textarea style="vertical-align: top;" rows="10" cols="100" wrap="virtual" name="Subfamily">' . $result[0]["Subfamily"] . '</textarea><br>';         echo '<div style="text-align:center;"><input type="submit" name="send" value="Send !"></div>';         //echo "<input type='submit' name='send' value='Send !'>";         echo '</form>';         };           }           } else {     //etc.     


Merci encore de toute l'aide!
A+
Seb

Reply
réponses:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed