[Résolu] formulaire simple

Petit nouveau ! | 4 Messages

16 août 2010, 12:54

Bonjour,

J'aimerais ajouter un formulaire de contact, sur une page web, ce formulaire ce situe sur une page et ne renvois pas à une autre page mais reste toujours sur la page d'index (site d'une seul page).

Mais connaissances en PHP son très très limiter pour le moment, j'ai trouver le moyen de faire plus ou moins ce que je veux, mais le problème c'est qu'on peut cliquer 100 fois sur le bouton envoyer une fois le formulaire rempli, alors comment éviter une utilisation abusive de ce formulaire, je vous donne le code que j'ai fais temps bien que mal :?

Code : Tout sélectionner

<html> <head>     <title>Formulaire</title> </head> <body>     <?php         $erreur = '';              if (isset($_POST['email'])){             if (trim($_POST['email']) != ''){                 $email = $_POST['email'];             }else{                 $erreur = $erreur . 'Email Obligatoire!<br/>';             }                          if (isset($_POST['message']) && trim($_POST['message']) != ''){                 $message = $_POST['message'];             }else{                 $erreur = $erreur . 'Message Obligatoire!<br/>';             }                          if ($erreur != ''){                 echo $erreur;             }else{                 echo 'Message envoyer: ' . $_POST['email'] . ' ' . $_POST['message'];                 mail('[email protected]', 'message', $message, 'From:' . $email);             }                     }     ?>     <hr/>     <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">         Votre Email:<br/>         <input type="text" name="email" value="<?php echo $email ?>" /><br/>         Votre message:<br/>         <textarea rows="10" cols="50" name="message"><?php echo $message ?></textarea><br/>         <input type="submit" value="Envoyer" />     </form> </body> </html>
Ce que je voudrais c'est une fois le formulaire envoyer, sa vide toutes les informations de manière à éviter des envois en excessif.

Quand j'actualise la page il renvois automatiquement le message, et sa 1000 fois de suite :roll:

Cordialement,
Modifié en dernier par 3arly le 16 août 2010, 18:20, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

16 août 2010, 14:05

echo 'Message envoyer: ' . $_POST['email'] . ' ' . $_POST['message'];
mail('[email protected]', 'message', $message, 'From:' . $email);
$email = "";
$message = "";
En vidant les variables. :)

Petit nouveau ! | 4 Messages

16 août 2010, 14:13

Bonjour et merci,

Sa vide le formulaire, mais en réactualisant la page sa renvoi le formulaire encore et encore :?

ViPHP
AB
ViPHP | 5818 Messages

16 août 2010, 14:20

A la fin de ton traitement php d'envoi de mail utilises la fonction header suivi d'un exit :

<?php
//...
//...
else
{
               
     if(mail('[email protected]', 'message', $message, 'From:' . $email))
       {
           header("Location:".$_SERVER['PHP_SELF'].'?mes=ok');
           exit;  
      }
}

if(isset($_GET['mes'])) echo 'message envoyé';
?>

Petit nouveau ! | 4 Messages

16 août 2010, 15:21

Merci pour ta solution, mais j'ai du louper un truc.

Donc à force de chercher, j'ai finit par un copier coller :

Code : Tout sélectionner

<?php session_start(); if(!empty($_POST) OR !empty($_FILES)) {     $_SESSION['sauvegarde'] = $_POST ;     $_SESSION['sauvegardeFILES'] = $_FILES ;          $fichierActuel = $_SERVER['PHP_SELF'] ;     if(!empty($_SERVER['QUERY_STRING']))     {         $fichierActuel .= '?' . $_SERVER['QUERY_STRING'] ;     }          header('Location: ' . $fichierActuel);     exit; } if(isset($_SESSION['sauvegarde'])) {     $_POST = $_SESSION['sauvegarde'] ;     $_FILES = $_SESSION['sauvegardeFILES'] ;          unset($_SESSION['sauvegarde'], $_SESSION['sauvegardeFILES']); } ?> <html> <head>     <title>Formulaire</title> </head> <body>     <?php         $erreur = '';              if (isset($_POST['email'])){             if (trim($_POST['email']) != ''){                 $email = $_POST['email'];             }else{                 $erreur = $erreur . 'Email Obligatoire!<br/>';             }                          if (isset($_POST['message']) && trim($_POST['message']) != ''){                 $message = $_POST['message'];             }else{                 $erreur = $erreur . 'Message Obligatoire!<br/>';             }                          if ($erreur != ''){                 echo $erreur;             }else{                 echo 'Message envoyer: ' . $_POST['email'] . ' ' . $_POST['message'];                 mail('[email protected]', 'message', $message, 'From:' . $email);                 $email = "";                 $message = "";             }                                  }     ?> <hr/>     <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">         Votre Email:<br/> <span id="sprytextfield1">         <input type="text" name="email" value="<?php echo $mail ?>" />       <span class="textfieldRequiredMsg">Une valeur est requise.</span></span><br/>         Votre message:<br/>         <span id="sprytextarea1">         <textarea rows="10" cols="50" name="message"><?php echo $message ?></textarea>       <span class="textareaRequiredMsg">Une valeur est requise.</span></span><br/>         <input type="submit" value="Envoyer" />     </form> </body> </html>
Sa résous le problème, mais à vrai dire j'ai toujours pas vraiment compris, mais bon c'est bien pour sa qu'existe le forum PHP France 8-|

Petit nouveau ! | 4 Messages

16 août 2010, 18:19

Bon, le tout revu et corriger.

Code : Tout sélectionner

<?php  session_start(); // Uniquement pour afficher -éventuellement- les infos du mail qui a été envoyé    // Initialisation ou récupération des variables  $email = !empty($_POST['email']) ? trim($_POST['email']) : '';  $message = !empty($_POST['message']) ? trim($_POST['message']) : '';    $erreurs = array();    function VerifierAdresseMail($mail)    {       $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';       if(preg_match($Syntaxe,$mail))          return true;       else         return false;    }    if($_SERVER['REQUEST_METHOD']=='POST') {      // email obligatoire      if(empty($email)) {          $erreurs[] = 'Email obligatoire.';      } else if(!VerifierAdresseMail($email)) {          $erreurs[] = 'Email invalide.';      }      // message obligatoire      if(empty($message)) {          $erreurs[] = 'Message obligatoire.';      }      // Aucune erreur...      if(empty($erreurs)) {          // envoi du mail...          $_SESSION['email'] = $email;          $_SESSION['message'] = $message;         mail('[email protected]', 'message', $message, 'From:' . $email);         header('Location: '.htmlspecialchars($_SERVER['PHP_SELF'])); // Redirection vers la même page          exit();      }  }  ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>Test</title>  <style type="text/css" media="screen">  .alerte {      color: #FF0033;      font-weight: bold;  }  </style>  </head>  <body>  <?php  if(!empty($erreurs)) {      foreach($erreurs as $erreur) {          echo '<p class="alerte">'.$erreur."</p>\n";      }  }  ?>  <?php if(!empty($_SESSION['email'])) : ?>  <p>Merci pour votre message :</p>  <p><strong>Email :</strong> <?php echo htmlspecialchars($_SESSION['email']); ?></p>  <p><strong>Message :</strong> <?php echo nl2br(htmlspecialchars($_SESSION['message'])); ?></p>  <?php  unset($_SESSION['email']);  unset($_SESSION['message']);    else:  ?>  <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">         Votre Email:<br/> <input type="text" name="email" value="<?php echo $mail ?>" /><br/>         Votre message:<br/>                  <textarea rows="10" cols="50" name="message"><?php echo $message ?></textarea><br/>         <input type="submit" value="Envoyer" />     </form> <?php endif; ?>  </body>  </html>
Merci à Heyoan, en espérant que sa puisse servir à d'autre :D