[Résolu] formulaire simple

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] formulaire simple

Re: formulaire simple

par 3arly » 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

Re: formulaire simple

par 3arly » 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-|

Re: formulaire simple

par AB » 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é';
?>

Re: formulaire simple

par 3arly » 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 :?

Re: formulaire simple

par xTG » 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. :)

[Résolu] formulaire simple

par 3arly » 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,