Page 1 sur 1

Formulaire mail Undefined variable

Posté : 27 mai 2011, 12:06
par Ez3kiel
Bonjour, j'ai un formulaire de contact, avec différent filtrages avant l'envoi du mail, et j'aimerais que grâce aux cookies, le visiteur garde son message si il y a une erreur qui s'affiche. Mais le souci est qu'il me retourne "Undefined variable" au démarrage :
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoye']))
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {

      $nom	     	= stripslashes(trim($_POST['nom']));
      $expediteur	= stripslashes(trim($_POST['email']));
      $sujet		= stripslashes(trim($_POST['sujet']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {

      $nom		    = trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $sujet		= trim($_POST['sujet']);
      $message		= trim($_POST['message']);
    }
    
    /* Expression régulière permettant de vérifier si le 
    * format d'une adresse e-mail est correct */
    $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
    
    /* Expression régulière permettant de vérifier qu'aucun 
    * en-tête n'est inséré dans nos champs */
    $regex_head = '/[\n\r]/';
    
    /* Si le formulaire n'est pas posté de notre site on renvoie 
    * vers la page d'accueil */
    //if($_SERVER['HTTP_REFERER'] != 'http://www.monsite.com/send_email.php')
    //{
     // header('Location: http://www.monsite.com/');
   // }
    /* On vérifie que tous les champs sont remplis */
 if ( empty($nom) 
           || empty($expediteur) 
           || empty($sujet) 
           || empty($message))
    {
      $alert = 'Tous les champs doivent être renseignés';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      $alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
    }
    /* On vérifie qu'il n'y a aucun header dans les champs */
    elseif (preg_match($regex_head, $expediteur) 
            || preg_match($regex_head, $nom) 
            || preg_match($regex_head, $sujet))
    {
        $alert = 'En-têtes interdites dans les champs du formulaire';
    }
    /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
    elseif (!isset($_COOKIE['sent']))
    {
        /* Destinataire (votre adresse e-mail) */
        $to = '[email protected]';
      
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis monsite.com par '.$civilite.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message qui vous est adressé :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
        
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
        
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
            $alert = 'E-mail envoyé avec succès';
            
            /* On créé un cookie de courte durée (ici 120 secondes) pour éviter de 
            * renvoyer un mail en rafraichissant la page */
            setcookie("sent", "1", time() + 120);
            
            /* On détruit la variable $_POST */
            unset($_POST);
        }
        else
        {
            $alert = 'Erreur d\'envoi de l\'e-mail';
        }
          
    }
    /* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
    else
    {
        unset($_POST);
    }
}
?>

Et sur la même page, le formulaire :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="style.css" rel="stylesheet" type="text/css" />




</head>
<body>
<div class="main">
  <div class="blok_header">
    <div class="header">
      <div class="logo"><a href="index.html"><img src="images/logo.gif" width="359" height="99" border="0" alt="logo" /></a></div>
      <div class="menu">
        <ul>
          <li><a href="index.php"><span>Accueil</span></a></li>
          <li><a href="portfolio.php"><span>Produits</span></a></li>
          <li><a href="about.php"><span>A propos de nous</span></a></li>
          <li><a href="contact.php"><span>Contacts</span></a></li>
          <li><a href="Livredor.php"><span>Livre d'or</span></a></li>
        </ul>
        <div class="clr"></div>
      </div>
      <div class="clr"></div>
    </div>
    <div class="clr"></div>
  </div>
  <div class="clr"></div>
  <div class="header_text_bg2">
    <div class="header_text2">
      <h2>Contact</h2>
      
      <div class="clr"></div>
    </div>
    <div class="clr"></div>
  </div>
  <div class="body_resize">
    <div class="body">
	
	<?php 
	
	if (!empty($alert))
	{
    echo '<p style="color:red">'.$alert.'</p>';
	}
	?>
      <div class="left">
        <h2>Où sommes-nous ?</h2>
        <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.fr/maps?f=q&source=s_q&hl=fr&geocode=&q=12+rue+de+poulpatr%C3%A9&aq=&sll=48.22776,-4.455471&sspn=0.072044,0.209255&ie=UTF8&hq=&hnear=12+Rue+de+Poulpatr%C3%A9,+29160+Crozon,+Finist%C3%A8re,+Bretagne&ll=48.24669,-4.488424&spn=0.018005,0.052314&t=h&z=14&output=embed"></iframe><br /><small><a href="http://maps.google.fr/maps?f=q&source=embed&hl=fr&geocode=&q=12+rue+de+poulpatr%C3%A9&aq=&sll=48.22776,-4.455471&sspn=0.072044,0.209255&ie=UTF8&hq=&hnear=12+Rue+de+Poulpatr%C3%A9,+29160+Crozon,+Finist%C3%A8re,+Bretagne&ll=48.24669,-4.488424&spn=0.018005,0.052314&t=h&z=14" style="color:#0000FF;text-align:left">Agrandir le plan</a></small>
        <p>&nbsp;</p>
		
		
        <form action="contact.php" method="post" id="contactform" >
          <ol>
            <li>
              <label for="nom">Nom<span class="red">*</span></label>
              <input name="nom" class="text" value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>" />
            </li>
            <li>
              <label for="email">E-mail <span class="red">*</span></label>
              <input name="email" class="text" <input type="text" id="email" name="email" 
        	value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>" />
			
            </li>
			

            <li>
              <label for="sujet">Sujet <span class="red">*</span></label>
              <input type="text" id="sujet" name="sujet" 
        	value="<?php echo (isset($_POST['sujet'])) ? $sujet : '' ?>" />
            </li>
            <li>
              <label for="message">Message <span class="red">*</span></label>
                <textarea id="message" name="message" cols="50" rows="6">
			<?php echo (isset($_POST['message'])) ? $message : '' ?>
        </textarea>
            </li>
			
            <li class="buttons">
			<p><span>Les champs marqués d'un (*) sont obligatoires</span></p>

              <input type="image" name="envoye" id="envoye" src="images/send.gif" class="send" />
			  

              <div class="clr"></div>
            </li>
          </ol>
        </form>
      </div>
      <div class="right">
        <h2>Nous contacter</h2>
        <p>
		  <strong>Adresse</strong>:     12, rue de Poulpatré 29160 Crozon <BR/><BR/>
          <strong>Telephone</strong>:   02 98 17 39 61 (de 8h30 à 18h) <BR/><BR/>
          <strong>FAX</strong>:             02 98 17 39 62<BR/><BR/>
          <strong>E-mail</strong>:  [email protected]<BR/><BR/>
		  <strong>Jours d'ouverture des bureaux:</strong> Du lundi au vendredi. <BR/><BR/>
		  <strong>Horaires d'ouverture des bureaux:</strong> De 8h30 à 12h30<BR/><BR/> 
		</p>	
        <p>&nbsp;</p>
       
        <div class="clr"></div>
       
        <div class="clr"></div>
      </div>
      <div class="clr"></div>
    </div>
    <div class="clr"></div>
  </div>
</div>
<div class="FBG">
  <div class="FBG_resize">
      <div class="right">
    </div>
    <div class="left">
      <h2>Contact</h2>
      <ul>
        <li><a href="livredor.php">Livre d'or</a></li>
        <li><a href="contact.php">Localisation</a></li>
        <li><a href="contact.php">Mail</a></li>
        <li><a href="contact.php">Adresse</a></li>
      </ul>
    </div>

    <div class="right">
      <h2>What They Say</h2>
		<p> 
		<img src="images/Guillemets_F.gif" alt="picture" width="24" height="18" />
		"Il fait froid, parce que l'on regarde là où il n'y a pas de chaleur."
		<img src="images/Guillemets_O.gif" alt="picture" width="24" height="18" />
		</p>
      <p><i><b>Alexandra David-Néel</i></b></a></p>
    </div>
    <div class="clr"></div>
  </div>
  <div class="clr"></div>
</div>
<div class="footer">
  <div class="footer_resize"><a href="#"><img src="images/footer_logo.gif" alt="picture" width="214" height="84" border="0" /></a>
    <p class="leftt">© Copyright GUIGNER Fabien tous droits réservés <br /></p>
    <div class="clr"></div>
  </div>
 
</div>
</body>
</html>




Quelqu'un aurait une idée de quoi faire pour pas qu'il les champs texte restent vides à l'affichage 1er du formulaire ?

Merci bien !

Re: Formulaire mail Undefined variable

Posté : 27 mai 2011, 12:19
par moogli
yop,

c'est peu le foutoire ton code :)

tu sais déjà placer un cookie, tu fait pareil avec un tableau serialisé (serialize)

après tu peux l'utiliser dans ton formulaire !

au passage ceci n'est pas bon <?php echo (isset($_POST['nom'])) ? $nom : '' ?> mais <?php echo (isset($_POST['nom'])) ? $_POST['nom'] : '' ?>

Simplement parce que la condition n'implique pas l’existence de $nom.

a partir de la tu peux mixer avec le cookie !


@+

Re: Formulaire mail Undefined variable

Posté : 27 mai 2011, 12:21
par Jonathan
Bonjour,

En tant que novice, je sais que tu peux faire ça en mettant tes variables en sessions, mais avec les cookies, 'sais pas... Oui, je te suis d'une grande aide hein ! :D

Re: Formulaire mail Undefined variable

Posté : 27 mai 2011, 12:39
par Ez3kiel
Foutoir ? ^^
Je ne te montrerais pas les autres pages alors. :P


au passage ceci n'est pas bon <?php echo (isset($_POST['nom'])) ? $nom : '' ?> mais <?php echo (isset($_POST['nom'])) ? $_POST['nom'] : '' ?>
Pourtant $nom est déjà définie en haut de la page ... #-o
    if (get_magic_quotes_gpc())
    {

      $nom	     	= stripslashes(trim($_POST['nom']));
      $expediteur	= stripslashes(trim($_POST['email']));
      $sujet		= stripslashes(trim($_POST['sujet']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {

      $nom		    = trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $sujet		= trim($_POST['sujet']);
      $message		= trim($_POST['message']);
    }
    
Donc idem, je pensais comme toi qu'il ne trouvait pas la variable mais elle est là ...

Néanmoins j'ai essayé avec ta méthode, il ne m'affiche plus message, et me garde bien en mémoire les données.

MAIS (oui c'était trop beau pour être aussi simple), maintenant il passe outre la totalité du reste des filtres.

Même mon echo $nom; :(

Jonathan, toute aide est toujours bonne à prendre. :)

Re: Formulaire mail Undefined variable

Posté : 27 mai 2011, 14:51
par Ez3kiel
Problème résolu, c'est parce que j'avais mis un input type image pour envoyer le formulaire au lieu d'un submit ... Snif, moi qui voulait un joli bouton. :'(