le 09/07/2008 à 16:05
pb avec un formulaire de contact en php
Bonjour,
j'ai récupéré un form php de contact auquel j'ai voulu ajouter 3 champs et là patatra !
Mon formulaire apparaît correctement, et quand je valide, j'ai cette erreur :
voici le formulaire d'origine :
voici ce que j'ai fais pour rajouter les champs $tel, $postal et *nom :
merci pour votre aide :)
Titi
j'ai récupéré un form php de contact auquel j'ai voulu ajouter 3 champs et là patatra !
Mon formulaire apparaît correctement, et quand je valide, j'ai cette erreur :
Warning: mail() expects at most 5 parameters, 7 given in /../../../../../assembler.php(402) : eval()'d code on line 63
voici le formulaire d'origine :
<?php
define( 'MAIL_TO', /* >>>>> */'utilisateur@domaine.tld'/* <<<<< */ ); //ajouter votre courriel
define( 'MAIL_FROM', 'utilisateur@domaine.tld' ); // valeur par défaut
define( 'MAIL_OBJECT', 'objet du message' ); // valeur par défaut
define( 'MAIL_MESSAGE', 'votre message' ); // valeur par défaut
$mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif
$errors = array(); // tableau des erreurs de saisie
if( filter_has_var( INPUT_POST, 'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]
{
$from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );
if( $from === NULL || $from === MAIL_FROM ) // si le courriel fourni est vide OU égale à la valeur par défaut
{
$errors[] = 'Vous devez renseigner votre adresse de courrier électronique.';
}
elseif( $from === false ) // si le courriel fourni n'est pas valide
{
$errors[] = 'L\'adresse de courrier électronique n\'est pas valide.';
$from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
}
$object = filter_input( INPUT_POST, 'object', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );
if( $object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT ) // si l'objet fourni est vide, invalide ou égale à la valeur par défaut
{
$errors[] = 'Vous devez renseigner l\'objet.';
}
/* pas besoin de nettoyer le message.
/ http://www.phpsecure.info/v2/article/MailHeadersInject.php
/ Logiquement, les parties message, To: et Subject: pourraient servir aussi à injecter quelque chose, mais la fonction mail()
/ filtre bien les deux dernières, et la première est le message, et à partir du moment où on a sauté une ligne dans l'envoi du mail,
/ c'est considéré comme du texte; le message ne saurait donc rester qu'un message.*/
$message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );
if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // si le message fourni est vide ou égale à la valeur par défaut
{
$errors[] = 'Vous devez écrire un message.';
}
if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs
{
if( mail( MAIL_TO, $object, $message, "From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
{
$mailSent = true;
}
else // échec de l'envoi
{
$errors[] = 'Votre message n\'a pas été envoyé.';
}
}
}
else // le formulaire est affiché pour la première fois, avec les valeurs par défaut
{
$from = MAIL_FROM;
$object = MAIL_OBJECT;
$message = MAIL_MESSAGE;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Contact</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="content-language" content="fr" />
<style type="text/css">
html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
body{ width:772px; margin:0 auto; padding:0; }
textarea{ width:772px; }
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
</style>
</head>
<body>
<h1>Contact</h1>
<hr />
<?php
if( $mailSent === true ) // si le message a bien été envoyé, on affiche le récapitulatif
{
?>
<p id="success">Votre message a bien été envoyé.</p>
<p><strong>Courriel pour la réponse :</strong><br /><?php echo( $from ); ?></p>
<p><strong>Objet :</strong><br /><?php echo( $object ); ?></p>
<p><strong>Message :</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
<?php
}
else // le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs
{
if( count( $errors ) !== 0 )
{
echo( "\t\t<ul>\n" );
foreach( $errors as $error )
{
echo( "\t\t\t<li>$error</li>\n" );
}
echo( "\t\t</ul>\n" );
}
else
{
echo( "\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );
}
?>
<form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
<p>
<label for="from">Courriel pour la réponse</label>
<input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
</p>
<p>
<label for="object">Objet</label>
<input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
</p>
<p>
<label for="message">Message</label>
<textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
</p>
<p>
<input type="reset" name="reset" value="Effacer" />
<input type="submit" name="send" value="Envoyer" />
</p>
</form>
<?php
}
?>
</body>
</html>
voici ce que j'ai fais pour rajouter les champs $tel, $postal et *nom :
<?php
define( 'MAIL_TO', 'monmail@monmail.com' ); //ajouter votre courriel
define( 'MAIL_FROM', '' ); // valeur par défaut
define( 'MAIL_OBJECT', 'Indiquez le sujet' ); // valeur par défaut
define( 'MAIL_MESSAGE', '' );
define( 'MAIL_TEL' , '');
define( 'MAIL_POSTAL', '' );
define( 'MAIL_NOM', '' );
$mailSent = false; // drapeau qui aiguille l'affichage du formulaire OU du récapitulatif
$errors = array(); // tableau des erreurs de saisie
if( filter_has_var( INPUT_POST, 'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]
{
$from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );
if( $from === NULL || $from === MAIL_FROM ) // si le courriel fourni est vide OU égale à la valeur par défaut
{
$errors[] = 'Vous devez renseigner votre adresse de courrier électronique.';
}
elseif( $from === false ) // si le courriel fourni n'est pas valide
{
$errors[] = 'L\'adresse de courrier électronique n\'est pas valide.';
$from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
}
//le sujet du message
$sujet = filter_input( INPUT_POST, 'sujet', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );
if( $sujet === NULL OR $sujet === false OR empty( $sujet ) OR $sujet === MAIL_OBJECT ) // si l'objet fourni est vide, invalide ou égale à la valeur par défaut
{
$errors[] = 'Vous devez renseigner l\'objet.';
}
//le telephone
$tel = filter_input( INPUT_POST, 'tel', FILTER_UNSAFE_RAW );
if( $tel === NULL OR $tel === false OR empty( $tel ) OR $tel === MAIL_TEL )
{
$errors[] = 'Vous devez indiquer votre téléphone.';
}
// le nom
$nom = filter_input( INPUT_POST, 'nom', FILTER_UNSAFE_RAW );
if( $nom === NULL OR $nom === false OR empty( $nom ) OR $nom === MAIL_NOM )
{
$errors[] = 'Vous devez indiquer votre nom.';
}
//le code postal
$postal = filter_input( INPUT_POST, 'postal', FILTER_UNSAFE_RAW );
if( $postal === NULL OR $postal === false OR empty( $postal ) OR $postal === MAIL_POSTAL )
{
$errors[] = 'Vous devez indiquer votre code postal.';
}
$message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );
if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // si le message fourni est vide ou égale à la valeur par défaut
{
$errors[] = 'Vous devez écrire un message.';
}
if( count( $errors ) === 0 ) // si il n'y a pas d'erreurs
{
if( mail( MAIL_TO, $sujet, $nom, $tel, $postal, $message, "From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
{
$mailSent = true;
}
else // échec de l'envoi
{
$errors[] = 'Votre message n\'a pas été envoyé.';
}
}
}
else // le formulaire est affiché pour la première fois, avec les valeurs par défaut
{
$from = MAIL_FROM;
$sujet = MAIL_OBJECT;
$nom = MAIL_NOM;
$tel = MAIL_TEL;
$postal = MAIL_POSTAL;
$message = MAIL_MESSAGE;
}
?>
<style type="text/css">
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
</style>
<h1>Contact particuliers </h1>
<hr />
<?php
if( $mailSent === true ) // si le message a bien été envoyé, on affiche le récapitulatif
{
?>
<p id="success">Votre message a bien été envoyé.</p>
<p><strong>Courriel pour la réponse :</strong><br /><?php echo( $from ); ?></p>
<p><strong>Votre demande :</strong><br /><?php echo( $sujet ); ?></p>
<p><strong>Votre nom :</strong><br /><?php echo( $nom ); ?></p>
<p><strong>Votre numéro de téléphone :</strong><br /><?php echo( $tel ); ?></p>
<p><strong>Votre code postal :</strong><br /><?php echo( $postal ); ?></p>
<p><strong>Message :</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
<?php
}
else // le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs
{
if( count( $errors ) !== 0 )
{
echo( "\t\t<ul>\n" );
foreach( $errors as $error )
{
echo( "\t\t\t<li>$error</li>\n" );
}
echo( "\t\t</ul>\n" );
}
else
{
echo( "\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );
}
?>
<form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
<table width="550" border="0" align="center" cellpadding="5" cellspacing="5">
<tr>
<td width="177" valign="top"><label for="sujet">Votre demande </label></td>
<td width="338"><input name="sujet" type="text" id="sujet" value="<?php echo( $sujet ); ?>" size="40" /></td>
</tr>
<tr>
<td valign="top"><label for="nom">Votre nom </label></td>
<td><input name="nom" type="text" id="nom" value="<?php echo( $nom ); ?>" size="40" /></td>
</tr>
<tr>
<td valign="top"><label for="from">Votre téléphone </label></td>
<td><input name="tel" type="text" id="tel" value="<?php echo( $tel ); ?>" size="40" /></td>
</tr>
<tr>
<td valign="top"><label for="from">Votre code postal </label></td>
<td><input name="postal" type="text" id="postal" value="<?php echo( $postal ); ?>" size="40" /></td>
</tr>
<tr>
<td valign="top"><label for="from">Votre email * </label></td>
<td><input name="from" type="text" id="from" value="<?php echo( $from ); ?>" size="40" /></td>
</tr>
<tr>
<td valign="top"><label for="from">Votre message </label></td>
<td><textarea name="message" id="message" cols="40" rows="6"><?php echo( $message ); ?></textarea></td>
</tr>
<tr>
<td valign="top"> </td>
<td><input type="submit" name="send" value="Envoyer" /></td>
</tr>
<tr>
<td colspan="2" valign="top">
<p>* Veuillez entrer une adresse e-mail valide (de type vous@fournisseur.com).</p>
<p><small>Conformément à la loi Informatique et Libertés, vous disposez d’un droit d’accès et de rectification et de suppression des données vous concernant (art. 34 de la loi "Informatique et libertés"). SARL.</small></p>
</td>
</tr>
<tr>
<td valign="top"> </td>
<td> </td>
</tr>
</table>
</form>
<?php
}
?>
merci pour votre aide :)
Titi