Page 1 sur 2

Formulaire php

Posté : 10 juin 2010, 16:41
par gmarcilly
Bonjour,

J'ai enrichi un formulaire de contact (que j'ai déjà utilisé sur d'autres sites) par un autre bout code qui permet de sélectionner le destinataire du message dans un menu déroulant. Le premier formulaire fonctionnait très bien. Le second code fonctionnait très bien également. Mais maintenant que je l'ai réuni, je reçois une erreur : Parse error: parse error in C:\wamp\www\Contacts.php on line 790 La ligne 790 correspond à la dernière ligne de mon code, c'est à dire le </html>. Impossible de trouver où se trouve l'erreur

Pour info, je ne voulais pas utiliser exclusivement le second code (ce qui aurait été bien plus simple) car il ne permettait pas de mémoriser les informations inscrits dans les champs du formulaire en cas d'erreur d'envoi.

Voici le code nettoyé pour garder que l'essentiel (j'ai volontairement supprimé les adresses mail dans le $listeDesMails = array ):

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <?php // On définit les destinataires possibles $listeDesMails = array ( '' => '', '' => '', '' => '', '' => '', '' => '', '' => '', '' => '', ); ?> </head> <body> <h1>CONTACTER LA MAIRIE PAR COURRIEL</h1> <hr><br /> <font><span class="indication"> Merci de sélectionner le destinataire de votre message et de remplir tous les champs du formulaire :</span></font> <br /><br /> <?php /* ******************************************************************************************** CONFIGURATION ******************************************************************************************** */ // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule // copie ? (envoie une copie au visiteur) $copie = 'oui'; // Action du formulaire (si votre page a des paramètres dans l'URL) // si cette page est index.php?page=contact alors mettez index.php?page=contact // sinon, laissez vide $form_action = ''; // Messages de confirmation du mail $message_envoye = "Merci ! Votre message nous est bien parvenu !<br /> Nous vous r&eacute;pondrons dans les plus brefs d&eacute;lais."; $message_non_envoye = "L'envoi du mail a échoué. <br />Vous n'avez peut-être pas rempli tous les champs du formulaire. <br />Merci de réessayer en cliquant <a href=\"http://www.marci.fr/contact.php\">ici</a>."; // Message d'erreur du formulaire $message_formulaire_invalide = "L'envoi du message a échoué. V&eacute;rifiez que tous les champs <br />soient bien remplis et que l'email soit sans erreur.<br /><br />"; /* ******************************************************************************************** FIN DE LA CONFIGURATION ******************************************************************************************** */ // On vérifit que la personne a bien choisi le destinataire if($_POST['choixMail'] === 'Tout le monde'){ $to = implode(', ', $listeDesMails); }elseif($_POST['choixMail'] && IsSet($listeDesMails[$_POST['choixMail']])){ $to = $listeDesMails[$_POST['choixMail']]; }else{ echo '<div style="text-align:center; color:#FF0000;">Veuillez choisir un destinataire ! Merci.<br /><br /></div>',"\r\n"; } /* * cette fonction sert à nettoyer et enregistrer un texte */ function Rec($text) { $text = trim($text); // delete white spaces after & before text if (1 === get_magic_quotes_gpc()) { $stripslashes = create_function('$txt', 'return stripslashes($txt);'); } else { $stripslashes = create_function('$txt', 'return $txt;'); } // magic quotes ? $text = $stripslashes($text); $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well $text = nl2br($text); return $text; }; /* * Cette fonction sert à vérifier la syntaxe d'un email */ function IsEmail($email) { $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$"; return (eregi($pattern,$email)) ? true : false; }; $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables. $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; $objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : ''; $message = (isset($_POST['message'])) ? Rec($_POST['message']) : ''; if (isset($_POST['envoi'])) { // On va vérifier les variables et l'email ... $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré $err_formulaire = (IsEmail($email)) ? false : true; // les 4 variables sont remplies, if (($nom != '') && ($email != '') && ($objet != '') && ($message != '')) { // On génère donc puis envoie le mail $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n"; // envoyer une copie au visiteur ? if ($copie == 'oui') { $cible = $destinataire.','.$email; } else { $cible = $destinataire; }; // Remplacement de certains caractères spéciaux $message = html_entity_decode($message); $message = str_replace(''',"'",$message); $message = str_replace('&#8217;',"'",$message); $message = str_replace('<br>','',$message); $message = str_replace('<br />','',$message); // Envoi du mail if (mail($cible, $objet, $message, $headers)) { echo '<p>'.$message_envoye.'</p>'."\n"; } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; }; } else { // une des 3 variables (ou plus) est vide ... echo '<p>'.$message_formulaire_invalide.' '."\n"; $err_formulaire = true; }; }; // fin du if (!isset($_POST['envoi'])) if (($err_formulaire) || (!isset($_POST['envoi']))) { // afficher le formulaire ?> <form id="contact" method="post" action="<?php echo($_SERVER['PHP_SELF']);?>"> <fieldset> <label for="choixMail">Destinataire <span class="rouge">*</span> :</label> <select id="choixMail" name="choixMail"> <option value="0" selected="selected">Choisissez un destinataire...</option> <option value="Tout le monde">Tout le monde</option> <?php foreach($listeDesMails as $prenom => $adresseMail){ echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n"; } ?> </select> <p>&nbsp;&nbsp;<label for="nom">Votre nom <span class="rouge">*</span> : </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" id="nom" name="nom" tabindex="1" value="<?php echo(htmlentities(stripslashes($_POST[nom]))); ?>"/></p><br /> <p>&nbsp;&nbsp;<label for="email">Votre mail <span class="rouge">*</span> : </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" id="email" name="email" tabindex="2" value="<?php echo(htmlentities(stripslashes($_POST[email]))); ?>" /></p><br /> </fieldset> <fieldset> <br /> <p>&nbsp;&nbsp;<label for="objet">Objet du message <span class="rouge">*</span> : </label> &nbsp;&nbsp;<input type="text" id="objet" name="objet" tabindex="3" size="40" value="<?php echo(htmlentities(stripslashes($_POST[objet]))); ?>"/></p><br /> <p>&nbsp;&nbsp;<label for="message">Message <span class="rouge">*</span> : </label> &nbsp;&nbsp; <textarea id="message" name="message" tabindex="4" cols="70" rows="8"><?php echo(htmlentities(stripslashes($_POST[message]))); ?></textarea> </p><br /> <p class="contenu">Merci de vérifier que vous avez rempli tous les champs <br />du formulaire.</p> <br /><br /><br /> </fieldset> <br /><br /> <div style="text-align:center;"><input type="submit" name="envoi" value="Valider" /></div> </form> </body> </html>

Merci infiniment de votre aide,
gmarcilly

Re: Formulaire php

Posté : 10 juin 2010, 16:42
par stealth35
c'est ici ton erreur
$message = html_entity_decode($message);
         $message = str_replace(''',"'",$message);
         $message = str_replace('’',"'",$message);
         $message = str_replace('<br>','',$message);
         $message = str_replace('
','',$message);
tu peux meme direct suprimer $message = str_replace(''',"'",$message); parce que ca sert a rien :wink:

Re: Formulaire php

Posté : 14 juin 2010, 12:06
par gmarcilly
Bonjour,

Merci Stealth pour ton aide. Désolé pour l'attente. Je ne pouvais pas te répondre plus tôt.

J'ai supprimé la ligne dont tu m'as parlé. Il y a toujours la même erreur. J'ai supprimé tout le paragraphe: pareil.

Peux-tu me dire quelle est exactement l'erreur car je ne suis pas très bon en php ?

Si quelqu'un a une autre idée ?

Merci d'avance

Re: Formulaire php

Posté : 14 juin 2010, 13:15
par stealth35
Bonjour,

Merci Stealth pour ton aide. Désolé pour l'attente. Je ne pouvais pas te répondre plus tôt.

J'ai supprimé la ligne dont tu m'as parlé. Il y a toujours la même erreur. J'ai supprimé tout le paragraphe: pareil.

Peux-tu me dire quelle est exactement l'erreur car je ne suis pas très bon en php ?

Si quelqu'un a une autre idée ?

Merci d'avance

utilises quelle éditeur ?

Re: Formulaire php

Posté : 14 juin 2010, 13:33
par gmarcilly
J'utilise notepad++

Re: Formulaire php

Posté : 14 juin 2010, 13:46
par stealth35
J'utilise notepad++
avec la coloration syntaxique tu dois bien voir que y'a un soucis quelque part :wink:

remontre tout ton code (avec les baliste PHP sur le forum)

Re: Formulaire php

Posté : 14 juin 2010, 14:38
par gmarcilly
La coloration syntaxique ne met plus en évidence d'erreurs à cet endroit mais j'ai toujours une erreur :

Voici de nouveau le code (avec les lignes corrigés :) ):

Code : Tout sélectionner

<?php /* ******************************************************************************************** CONFIGURATION ******************************************************************************************** */ // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule // copie ? (envoie une copie au visiteur) $copie = 'oui'; // Action du formulaire (si votre page a des paramètres dans l'URL) // si cette page est index.php?page=contact alors mettez index.php?page=contact // sinon, laissez vide $form_action = ''; // Messages de confirmation du mail $message_envoye = "Merci ! Votre message nous est bien parvenu !<br /> Nous vous r&eacute;pondrons dans les plus brefs d&eacute;lais."; $message_non_envoye = "L'envoi du mail a échoué. <br />Vous n'avez peut-être pas rempli tous les champs du formulaire. <br />Merci de réessayer en cliquant <a href=\"http://www.marci.fr/contact.php\">ici</a>."; // Message d'erreur du formulaire $message_formulaire_invalide = "L'envoi du message a échoué. V&eacute;rifiez que tous les champs <br />soient bien remplis et que l'email soit sans erreur.<br /><br />"; /* ******************************************************************************************** FIN DE LA CONFIGURATION ******************************************************************************************** */ // On vérifit que la personne a bien choisi le destinataire if($_POST['choixMail'] === 'Tout le monde'){ $to = implode(', ', $listeDesMails); }elseif($_POST['choixMail'] && IsSet($listeDesMails[$_POST['choixMail']])){ $to = $listeDesMails[$_POST['choixMail']]; }else{ echo '<div style="text-align:center; color:#FF0000;">Veuillez choisir un destinataire ! Merci.<br /><br /></div>',"\r\n"; } /* * cette fonction sert à nettoyer et enregistrer un texte */ function Rec($text) { $text = trim($text); // delete white spaces after & before text if (1 === get_magic_quotes_gpc()) { $stripslashes = create_function('$txt', 'return stripslashes($txt);'); } else { $stripslashes = create_function('$txt', 'return $txt;'); } // magic quotes ? $text = $stripslashes($text); $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well $text = nl2br($text); return $text; }; /* * Cette fonction sert à vérifier la syntaxe d'un email */ function IsEmail($email) { $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$"; return (eregi($pattern,$email)) ? true : false; }; $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables. $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; $objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : ''; $message = (isset($_POST['message'])) ? Rec($_POST['message']) : ''; if (isset($_POST['envoi'])) { // On va vérifier les variables et l'email ... $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré $err_formulaire = (IsEmail($email)) ? false : true; // les 4 variables sont remplies, if (($nom != '') && ($email != '') && ($objet != '') && ($message != '')) { // On génère donc puis envoie le mail $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n"; // envoyer une copie au visiteur ? if ($copie == 'oui') { $cible = $destinataire.','.$email; } else { $cible = $destinataire; }; // Remplacement de certains caractères spéciaux $message = html_entity_decode($message); $message = str_replace('’',"'",$message); $message = str_replace('<br>','',$message); $message = str_replace('','',$message); // Envoi du mail if (mail($cible, $objet, $message, $headers)) { echo '<p>'.$message_envoye.'</p>'."\n"; } else { echo '<p>'.$message_non_envoye.'</p>'."\n"; }; } else { // une des 3 variables (ou plus) est vide ... echo '<p>'.$message_formulaire_invalide.' '."\n"; $err_formulaire = true; }; }; // fin du if (!isset($_POST['envoi'])) if (($err_formulaire) || (!isset($_POST['envoi']))) { // afficher le formulaire ?> <form id="contact" method="post" action="<?php echo($_SERVER['PHP_SELF']);?>"> <fieldset> <label for="choixMail">Destinataire <span class="rouge">*</span> :</label> <select id="choixMail" name="choixMail"> <option value="0" selected="selected">Choisissez un destinataire...</option> <option value="Tout le monde">Tout le monde</option> <?php foreach($listeDesMails as $prenom => $adresseMail){ echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n"; } ?> </select> <p>&nbsp;&nbsp;<label for="nom">Votre nom <span class="rouge">*</span> : </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" id="nom" name="nom" tabindex="1" value="<?php echo(htmlentities(stripslashes($_POST[nom]))); ?>"/></p><br /> <p>&nbsp;&nbsp;<label for="email">Votre mail <span class="rouge">*</span> : </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" id="email" name="email" tabindex="2" value="<?php echo(htmlentities(stripslashes($_POST[email]))); ?>" /></p><br /> </fieldset> <fieldset> <br /> <p>&nbsp;&nbsp;<label for="objet">Objet du message <span class="rouge">*</span> : </label> &nbsp;&nbsp;<input type="text" id="objet" name="objet" tabindex="3" size="40" value="<?php echo(htmlentities(stripslashes($_POST[objet]))); ?>"/></p><br /> <p>&nbsp;&nbsp;<label for="message">Message <span class="rouge">*</span> : </label> &nbsp;&nbsp; <textarea id="message" name="message" tabindex="4" cols="70" rows="8"><?php echo(htmlentities(stripslashes($_POST[message]))); ?></textarea> </p><br /> <p class="contenu">Merci de vérifier que vous avez rempli tous les champs <br />du formulaire.</p> <br /><br /><br /> </fieldset> <br /><br /> <div style="text-align:center;"><input type="submit" name="envoi" value="Valider" /></div> </form>

Merci :)

Re: Formulaire php

Posté : 14 juin 2010, 14:46
par stealth35
regarde ligne 147, ta mis des virgules a l place des mettre des points
ligne 133 ton if n'est pas fermer

Re: Formulaire php

Posté : 14 juin 2010, 15:37
par gmarcilly
Merci beaucoup de ton aide ! En effet, c'était ballot :? La page s'affiche maintenant mais deux nouvelles erreurs sont apparues :

Notice: Undefined index: choixMail in C:\wamp\www\Contacts.php on line 472 (et 474)

Je crois que j'ai provoqué cette erreur en voulant réunir les deux code existants. Qu'en penses-tu ?

Comment puis-je définir choixMail ? Ou peut-être qu'il y a conflit entre deux termes ?

Merci de m'accorder du temps :)

Re: Formulaire php

Posté : 14 juin 2010, 15:39
par stealth35
Merci beaucoup de ton aide ! En effet, c'était ballot :? La page s'affiche maintenant mais deux nouvelles erreurs sont apparues :

Notice: Undefined index: choixMail in C:\wamp\www\Contacts.php on line 472 (et 474)

Je crois que j'ai provoqué cette erreur en voulant réunir les deux code existants. Qu'en penses-tu ?

Comment puis-je définir choixMail ? Ou peut-être qu'il y a conflit entre deux termes ?

Merci de m'accorder du temps :)
faut tester si les valeur existe avec un isset

Re: Formulaire php

Posté : 14 juin 2010, 16:02
par gmarcilly
J'ai testé la valeur choixMail avec ceci :

if (isset($choixMail)) {
echo 'Cette variable existe, donc je peux l\'afficher.';
}

et ça me retourne le message selon lequel la valeur existe bien et qu'elle peut s'afficher :) . Mais l'erreur concernant choixMail persiste !

Que faire ?
Merci

Re: Formulaire php

Posté : 14 juin 2010, 16:04
par stealth35
a un moment tu dois faire
$choixMail = $_POST['choixMail'];

c'est le $_POST['choixMail'] qui n'existe pas :wink:

Re: Formulaire php

Posté : 14 juin 2010, 16:14
par gmarcilly
Voilà ce que j'ai mis comme code :

$choixMail = $_POST['choixMail'];

if (isset($_POST['choixMail']) {
}

Je comprend rien, ça ne marche pas. J'ai tout testé, sans l'un sans l'autre... Je suis vraiment nul :(

Re: Formulaire php

Posté : 14 juin 2010, 16:19
par stealth35
ca serai
if (isset($_POST['choixMail']) {
$choixMail = $_POST['choixMail'];
}
else
{
 $choixMail ='';
}

Re: Formulaire php

Posté : 14 juin 2010, 16:25
par gmarcilly
Je ne comprend pas, il me met un parse error pour la première ligne du code que tu m'as envoyé :

Parse error: parse error in C:\wamp\www\Contacts.php on line 472

if (isset($_POST['choixMail']) {


Où est le blèm ?