FORMULAIRE qui cloche en PHP

Résolu/Fermé
Lrt88 Messages postés 930 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 - 12 févr. 2009 à 22:42
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 - 13 févr. 2009 à 09:05
Bonsoir,

j'ai un soucis avec un formulaire sur mon site. Le problème c'est que dans les cases du formulaire, il m'écrit toujours
<b>Notice</b>: Undefined variable: nom in <b>\\\public_html\contact.php</b> on line <b>80</b>
pour chaque case avec évidemment une variable différente.
Souvent quand il y a ça, on doit mettre un isset mais je pensais que le " if($_POST) " suffisait.

Voici le code (en majorité copier-coller d'un site de partage de code)

<?php
if($_POST){
//Récupération des données du formulaire----------------------------
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
$sujet = mysql_real_escape_string(htmlspecialchars($_POST['sujet']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
//------------------------------------------------------------------

//Gestion des erreurs de saisie-------------------------------------
$erreurs = array();
if( empty($nom)) $erreurs = "il manque votre nom";
if( empty($mail)) $erreurs = "il manque votre adresse email";
if( empty($sujet)) $erreurs = "il manque le sujet";
if( empty($message)) $erreurs = "il manque votre message";
//------------------------------------------------------------------

if(empty($erreurs)) {
$from = $mail;
$reply = $from;
$to = "fjc@fucam.ac.be"; //Mettez l'email de destination ici

//Mise en forme du contenu au format HTML-----------------------
$contenu = "message de : ".$nom;
$contenu .= "<br /> Message: <br />";
$contenu .= $message;
//--------------------------------------------------------------

//Entêtes de formatage de l'email en mode HTML------------------
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'From: '.$from."\n";
$reply = $headers."Reply-to: ".$reply."\n";
//---------------------------------------------------------------

//Déclenchement de l'email et reroutage vers une autre page-----
$resultat = mail($to, $sujet, $contenu, $reply);

if($resultat) {
echo "email envoyé";
} else {
echo "Echec de l'envoi de l'email";
}

} else {
$texte_erreur = implode("<br />",$erreurs);
print $texte-erreur;
}

}

?>

ensuite ZONE HTML sans intérêt

et voici le code mon formulaire
----------------------------------------------------------------
<form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
<strong><u> Formulaire de contact par email</u></strong><br/>
<label for="nom"> Votre nom: </label><br /><input type="text" name="nom" value="<?php print $nom; ?>" ><br />
<label for="mail">Votre adresse email : </label><br /><input type="text" name="mail" value="<?php print $mail; ?>" /><br />
<label for="sujet"> Sujet du message: </label><br /><input type="text" name="sujet" value="<?php print $sujet; ?>" />
<label for="message"> Votre message: </label><br /><textarea name="message" rows="10" cols="40">Votre message ici.</textarea><br />
<input type="submit" value="Envoyer" />
</form>


GRAND MERCI A TOUT CEUX QUI ESSYERONS DE M'AIDER
A voir également:

8 réponses

Salut,

le mode strict est activé sur ton serveur, ca te remonte des erreurs pas forcement importantes mais c'est bien car permet d'être plus rigoureux :)

Tu as raison il faut bien faire un isset, mais dans ce cas la variable "$nom" est definie uniquement dans le bloc "if",
ce qui n'est pas le cas lors du premier affichage du formulaire,il faut donc reprendre les variables POST pour que le formulaire conserve les données lors d'une erreur.

De plus, je ne voit pas l'interet des "mysql_real_escape' ici, je l'ai ai retiré mais tu pourra les remettre,
a condition de vouloir stocker dans une base de données avec une connexion ouvrte a ce moment du script,
donc inutile si tu envoie simplement les données par mail comme dans ton code.

voila ce que cela donne :

<html>
<head></head>
<body>

<?php
if($_POST){
//Récupération des données du formulaire----------------------------
$nom 	 = htmlspecialchars($_POST['nom']);
$mail 	 = htmlspecialchars($_POST['mail']);
$sujet 	 = htmlspecialchars($_POST['sujet']);
$message = htmlspecialchars($_POST['message']);
//------------------------------------------------------------------

//Gestion des erreurs de saisie-------------------------------------
$erreurs = array();
if( empty($nom)) 	 $erreurs[] = "il manque votre nom";
if( empty($mail)) 	 $erreurs[] = "il manque votre adresse email";
if( empty($sujet)) 	 $erreurs[] = "il manque le sujet";
if( empty($message)) $erreurs[] = "il manque votre message";
//------------------------------------------------------------------

if(empty($erreurs)) {
$from = $mail;
$reply = $from;
$to = "fjc@fucam.ac.be"; //Mettez l'email de destination ici

//Mise en forme du contenu au format HTML-----------------------
$contenu = "message de : ".$nom;
$contenu .= "<br /> Message: <br />";
$contenu .= $message;
//--------------------------------------------------------------

//Entêtes de formatage de l'email en mode HTML------------------
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'From: '.$from."\n";
$reply = $headers."Reply-to: ".$reply."\n";
//---------------------------------------------------------------

//Déclenchement de l'email et reroutage vers une autre page-----
$resultat = mail($to, $sujet, $contenu, $reply);

if($resultat) {
echo "email envoyé";
} else {
echo "Echec de l'envoi de l'email";
}
die();

} else {
$texte_erreur = implode("<br />",$erreurs);
print "<b style='color:red'>".$texte_erreur."</b><br><br>";
}

}

?>


<form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
<strong><u> Formulaire de contact par email</u></strong><br/>
<label for="nom"> Votre nom: </label><br /><input type="text" name="nom" value="<?php if (isset($_POST['nom'])) print $_POST['nom']; ?>" ><br />
<label for="mail">Votre adresse email : </label><br /><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) print $_POST['mail']; ?>" /><br />
<label for="sujet"> Sujet du message: </label><br /><input type="text" name="sujet" value="<?php if (isset($_POST['sujet'])) print $_POST['sujet']; ?>" />
<label for="message"> Votre message: </label><br /><textarea name="message" rows="10" cols="40"><?php if (isset($_POST['message'])) print $_POST['message']; ?>Votre message ici.</textarea><br />
<input type="submit" value="Envoyer" />
</form>

</body>
</html>


bon courage :)
0
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
13 févr. 2009 à 06:59
Ca bug à la ligne 80 .. Elle corespond à quoi dans ton code ???

0
Lrt88 Messages postés 930 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 267
13 févr. 2009 à 08:49
Les 3 lignes de code qui pause problème sont la 80 (dans la case 1)
La ligne 81 (dans la case 2)
la ligne 82 (dans la case 3)

les voici:

<label for="nom"> Votre nom: </label><br /><input type="text" name="nom" value="<?php if (isset($_POST['nom'])) print $_POST['nom']; ?>" ><br />

<label for="mail">Votre adresse email : </label><br /><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) print $_POST['mail']; ?>" /><br />

<label for="sujet"> Sujet du message: </label><br /><input type="text" name="sujet" value="<?php if (isset($_POST['sujet'])) print $_POST['sujet']; ?>" />
0
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
13 févr. 2009 à 08:51
Essaye ca, si ca marche pas jte donnerais une otre recette ... Le print il te servai a koi ???

<label for="nom"> Votre nom: </label><br /><input type="text" name="nom" value="<?php if (isset($_POST['nom'])) echo $_POST['nom']; ?>" ><br />

<label for="mail">Votre adresse email : </label><br /><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) echo $_POST['mail']; ?>" /><br />

<label for="sujet"> Sujet du message: </label><br /><input type="text" name="sujet" value="<?php if (isset($_POST['sujet'])) echo $_POST['sujet']; ?>" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lrt88 Messages postés 930 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 267
13 févr. 2009 à 08:53
oki j'essaie tout de suite,

le print sert quand la personne n'a pas entièrement rempli le questionnaire; l'echo est censé servir à remettre dans les cases ce que la personne a déjà rempli.
0
Lrt88 Messages postés 930 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 267
13 févr. 2009 à 09:00
T'as solution marche ! Grand merci

(ya encore des couilles dans mon formulaires mais ce premier problème est résolu. Pour les autres,je vais d'abord essayer de me débrouiller seul)
0
Lrt88 Messages postés 930 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 267
13 févr. 2009 à 09:02
Oh je viens seulement de remarquer le message de Boost. Merci d'essayer de m'aider, c'est super sympa. Je regarderai si dans ce que tu me proposes me permet de résoudre d'autres problèmes

MERCI A TOUS LES 2
0
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
13 févr. 2009 à 09:05
Ok pas d'probleme !!!

0