Comment ne pas afficher le style d'une alerte php vide ?

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 : Comment ne pas afficher le style d'une alerte php vide ?

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 06 août 2015, 10:31

Pourquoi ne pas prendre le bout de code, le dupliquer, puis remplacer $error par $success ?
Vous vous compliquez la vie en faisant des choses que vous ne comprenez pas j'ai l'impression.

Pour votre message précédent, une affectation de variable ne va en aucun cas afficher son contenu.
Il faut pour cela un echo ou un print.

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 17:05

J'ai bien essayé ça :
if (!empty($error))
{
    echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$error.'</p></div></div>';
}
else 
 echo '<p class="alert-success"><i class="fa fa-smile-o"></i>&nbsp;&nbsp;Merci pour votre message, j\'y r&eacute;pondrai d&egrave;s que possible.</p>';
?>
sans succès

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 17:02

Ben il y a ça
/* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
            $success = 'Merci pour votre message';
qui fonctionnait avec le $alert
Désolé pour mon ignorance :(

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 04 août 2015, 16:49

Il y a ça pour afficher le $error :
if (!empty($error))
{
    echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$error.'</p></div></div>';
}
Pourquoi n'y a-t-il rien pour le $success ? ;)

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 16:42

Je creuse le sujet dans tous les sens mais je ne vois pas ce qui diffère des $error du $success.
Et je ne sais vraiment pas comment faire...
Encore un petit coup de main, ce serait très sympa, merci

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 04 août 2015, 15:52

Vous n'avez rien qui permet d'afficher la variable $success.
Il faut faire comme pour $error, anciennement $alert. ;)

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 15:49

Yes ! J'ai testé la solution avec une variable pour chaque type de message qui me parait plus facilement maitrisable pour le simple designer que je suis, enfin j'ai tenté d'adapter cette solution à mon code...
Ça fonctionne presque bien, les erreurs (champs vides, pb sur format mail) apparaissent bien, le mail est bien envoyé mais le message success n'apparait pas :?
En fait j'ai remplacé les $alert par $error sur les messages d'erreurs et remplacé $alert par $success sur le message de validation, comme ceci
if (mail($to, $msg, $headers))
        {
            $success = 'Merci pour votre message';
je dois avoir un problème de logique que je ne comprend pas.
Voilà mon code, nettoyé de l'inutile :
<?php

if (isset($_POST['envoye']))
{
    if (get_magic_quotes_gpc())
    {
      $nom	     	= stripslashes(trim($_POST['nom']));
      $expediteur	= stripslashes(trim($_POST['email']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {
      $sujet 		= "Demande de contact depuis http://www.wambaugh.us";
      $nom		= trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $message		= trim($_POST['message']);
      $message 		= utf8_decode($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 les 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')
    {
      header('Location: http://www.monsite.com/'&#41;;
    }
    /* On vérifie que tous les champs sont remplis */
    elseif (empty($nom) 
           || empty($expediteur) 
           || empty($message))
    {
      [b]$error[/b] = 'Oups, vous avez du oublier quelque chose';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      [b]$error[/b] = 'Oups, il doit y avoir une erreur sur l\'adresse : '.$expediteur.'';
    }
    /* 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))
    {
        [b]$error[/b] = 'En-t&ecirc;tes interdites';
    }
    /* 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  = ''."\r";
        $msg .= 'Ce mail a été envoyé depuis http://www.monsite.com par :'."\r\n\r\n";
        $msg .= ''.$nom."\r\n\r\n";
        $msg .= 'Voici son message :'."\r\n";
        $msg .= ''."\r";
        $msg .= $message."\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, $msg, $headers))
        {
            [b]$success[/b] = 'Merci pour votre message';
            /* On crée un cookie de courte durée (ici 120 secondes) pour éviter de 
            * renvoyer un mail en rafraichissant la page */
            setcookie("sent", "1", time() + 60);
 
            /* On détruit la variable $_POST */
            unset($_POST);
        }
        else
        {
            $error = 'Erreur d\'envoi de l\'e-mail';
        }
    }
    /* Cas ou le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
    else
    {
        unset($_POST);
    }
}
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Contact</title>
  </head>
<body>
        <div class="contenuContact">
<form action="contact.php" method="post">
	<div class="col-sm-12"><div class="contact"><input type="text" id="nom" name="nom"  class="form-control" placeholder="Nom" 
        	value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>" 
        /></div></div>
	<div class="col-sm-12"><div class="contact"><input type="text" id="email" name="email"  class="form-control" placeholder="Adresse email"
        	value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>"
        /></div></div>
	<div class="col-sm-12"><div class="contact"><textarea style="width:100%" id="message" name="message" class="textarea" placeholder="Message"><?php echo (isset($_POST['message'])) ? $message : '' ?></textarea></div></div> 
	<div class="col-sm-12"><div  class="contact" style="text-align:center"><input  class="btn btn-default" type="submit" name="envoye" value="Envoyer" /></div>
</div>
</form>
<?php
if (!empty([b]$error[/b]))
{
    echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$error.'</p></div></div>';
}
?>
  </body>
</html>
Merci encore de votre aide

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 13:59

oui je pense aussi que c'est le problème... alors je vais faire des tests avec vos méthodes
Merci infiniment

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 04 août 2015, 13:40

Ah je viens de comprendre avec ça...
Tu utilises en fait la même variable pour afficher les erreurs et le succès de l'opération.
C'est possible, mais auquel cas il faut que tout le style soit contenu dans la variable.

Exemple de ce que tu fais :
if( ... )
{
   $alert = '<b>OK</b>'
}
else
{
   $alert = 'KO';
}

if( !empty($alert) )
{
   echo '<i>' . $alert . '</i>';
}
Ici le KO est bien en italique, mais le OK est en gras + italique. ;)

Il faut donc faire ainsi :
if( ... )
{
   $alert = '<b>OK</b>'
}
else
{
   $alert = '<i>KO</i>';
}

if( !empty($alert) )
{
   echo $alert;
}
Ainsi chaque message a son propre style.

Ou bien utiliser une variable pour chaque type de message :
if( ... )
{
   $success= 'OK'
}
else
{
   $error= 'KO';
}

if( !empty($error) )
{
   echo '<i>' . $error. '</i>';
}
if( !empty($success) )
{
   echo '<b>' . $success . '</b>';
}

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 12:12

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 12:09

J'ai fait un nouvel essai en plaçant le var_dump ici :
<?php
var_dump($alert);
if (!empty($alert))
{
    echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$alert.'</p></div></div>';
}
?>
Le formulaire me renvoi alors un
string(141) "
qui semble correspondre au message de validation d'envoi du mail, voir capture ci-dessous :
Image

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 04 août 2015, 11:34

A priori la chaine est vide.
Donc votre balise ne doit plus s'afficher. ;)

Si elle s'affiche c'est que ce n'est pas cette portion de code qui s'exécute.
Vous pouvez utiliser la commande echo pour afficher des traces pour vérifier où vous vous trouvez et ce qui s'exécutes ou non.

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 10:58

J'ai ajouté
$alert = '';
juste après le <?php

et j'ai testé ceci, Je ne sais pas si c'est le bon endroit pour insérer le var-dump :
/* Envoi de l'e-mail */
        var_dump($alert);
        if (mail($to, $sujet, $msg, $headers))
        {
Résultat, il s'affiche :
string(0) ""

Au même endroit, j'ai testé de mettre
var_dump($_POST['alert']);
var_dump($_GET['alert']);
var_dump($_COOKIE['alert']);
var_dump($_SESSION['alert']);
et j'obtiens
NULL NULL NULL NULL

Re: Comment ne pas afficher le style d'une alerte php vide ?

par xTG » 04 août 2015, 10:35

Je n'ai rien vu dans votre code qui permettrai d'avoir cet espace.
Au pire elle n'est pas initialisée, vous pouvez donc rajouter en début de page :
$alert = '';
Histoire d'être plus propre.

Le var_dump est à mettre juste avant votre if de test pour afficher le contenu de cette variable à cet instant du script.

Ce qui peut arriver aussi c'est que vous ayez l'option du php.ini (dont je n'ai plus le nom en tête) qui permet d'appeler les globales par leur nom d'index ($_POST['test'] => $test).

Essayez ceci pour en être sûr :
var_dump($_POST['alert']);
var_dump($_GET['alert']);
var_dump($_COOKIE['alert']);
var_dump($_SESSION['alert']);
Si l'un de ces affichages renvoie une variable contenant un caractère vide c'est une piste.

Re: Comment ne pas afficher le style d'une alerte php vide ?

par pierrewebaster » 04 août 2015, 09:53

Bonjour et merci xTG de vous intéresser à mon problème

Ou devrais-je insérer la ligne
var_dump($alert);
Mais en effet, quand je regarde le source de ma page une fois que le message a été envoyé, j'ai bien un espace dans le <p>

Code : Tout sélectionner

<p style="color:#a69a91; background-color:#660000;...."> </p>
mais je ne vois pas d’où vient cet espace...
Je ne sais pas si ça peut venir de là, mais cette $alert doit servir à différents message : Email non valide, champs vide, Message envoyé...

J'ai vérifié tout mon code, je ne vois pas ou il pourrait y avoir un espace...
Voici ma page contact.php :
<?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']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {
      $sujet 		= "Demande de contact depuis mon site";
      $nom		= trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $message		= trim($_POST['message']);
      $message 		= utf8_decode($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 les 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/contact.php')
    {
      header('Location: http://www.monsite.com'&#41;;
    }
    /* On vérifie que tous les champs sont remplis */
    elseif (empty($nom) 
           || empty($expediteur) 
           || empty($message))
    {
      $alert = 'Tous les champs doivent &eacute;tre renseign&eacute;s';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      $alert = 'L\'adresse email : '.$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&ecirc;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  = ''."\r";
        $msg .= 'Ce mail a été envoyé depuis http://www.wambaugh.us par :'."\r\n\r\n";
        $msg .= ''.$nom."\r\n\r\n";
        $msg .= 'Voici son message :'."\r\n";
        $msg .= ''."\r";
        $msg .= $message."\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 = '<p class="alert-success">Merci pour votre message, j\'y r&eacute;pondrai d&egrave;s que possible.</p>';
 
            /* On crée 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 = '<p class="alert-info">Erreur d\'envoi de l\'e-mail</p>';
        }
     }
    /* Cas ou le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
    else
    {
        unset($_POST);
    }
}
?>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="favicon.ico">

    <title>Contact</title>

    <!-- Bootstrap core CSS -->
    <link href="bootstrap/css/bootstrap.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="bootstrap/css/navbar-fixed-top.css" rel="stylesheet">

    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="../../assets/js/ie-emulation-modes-warning.js"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="index.html"><img src="images/logo.png" width="142" height="60"></a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li><a class="Linknav" href="sculptures.html">Sculptures</a></li>
            <li><a class="Linknav" href="installations.html">Installations</a></li>
            <li><a class="Linknav" href="dessin.html">Dessins</a></li>
            <li><a class="Linknav" href="projets.html">Projets</a></li>
            <li><a class="Linknav" href="redidences.html">Résidences</a></li>
            <li><a class="Linknav" href="prix.html">Prix</a></li>
            <li><a class="Linknav" href="bio.html">Bio</a></li>
            <li><a class="Linknav" href="lien.html">Liens</a></li>
            <li class="active"><a class="Linknav" href="contact.php">Contact</a></li>
            </ul>    
        </div><!--/.nav-collapse -->
      </div>
    </nav>
    <div class="container">
        <div class="contenuContact">
<?php
if (!empty($alert))
{
    echo '<div class="col-sm-12"><div class="contact"><p style="color:#a69a91; background-color:#660000; text-align:center; font-size:16px; border-radius: 4px; margin: 10px 0; padding:10px;">'.$alert.'</p></div></div>';
}
?>
<form action="contact.php" method="post">
	<div class="col-sm-12"><div class="contact"><input type="text" id="nom" name="nom"  class="form-control" placeholder="Nom" 
        	value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>" 
        /></div></div>
	<div class="col-sm-12"><div class="contact"><input type="text" id="email" name="email"  class="form-control" placeholder="Adresse email"
        	value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>"
        /></div></div>
	<div class="col-sm-12"><div class="contact"><textarea style="width:100%" id="message" name="message" class="textarea" placeholder="Message"><?php echo (isset($_POST['message'])) ? $message : '' ?></textarea></div></div> 
	<div class="col-sm-12"><div  class="contact" style="text-align:center"><input  class="btn btn-default" type="submit" name="envoye" value="Envoyer" /></div>
</div>
</form>
  </div> 
</div><!-- /container -->
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="bootstrap/js/bootstrap.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
</script>
  </body>
</html>
Merci encore