Formulaire: problème avec les cases à cocher !

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 : Formulaire: problème avec les cases à cocher !

par Stegue » 11 mai 2006, 20:21

Ah, tu me posais peut-être la question par que tu ne voyais pas d'apostrophes dans mon texte ?
En fait, les essais ont fait avec une partie du texte.

par Stegue » 11 mai 2006, 20:18

ex:
"N\'oubliez pas d\'ajouter ce site à vos favoris."

Les stripslashes sont supprimés.

par charabia » 11 mai 2006, 10:02

A quel niveau tu as les "\" ? Montres nous un morceau du mail reçu, ainsi que ton utilisation de stripslashes.

par Stegue » 10 mai 2006, 19:16

Merci Charabia, t'as résolu mon problème.
Reste qu'à faire un peu le ménage.
Sinon dans le mail reçu, des " \ " apparaissent avant les apostrophes.
Mais en utilisant " stripslashes ", ça bug.

par charabia » 10 mai 2006, 14:48

Tu peux t'en sortir avec les sessions. Tu déclares avant tout
session_start();
en début de page.

Tu fais ensuite un test sur tes variables :
$email_webmaster = "Citation à la Con";//// indiquer votre adresse email /////     
if(isset($_POST['texte']))
	$message = $_POST['texte'];
else
	$message = 'erreur';
Dans la déclaration de tes textes, utilises la session ouverte :
$texte1= "Bonjour,<br /><br />bravo, votre citation sera prochainement dans la base de données des citations perso sous le pseudo ".$_SESSION['titre']; 

$texte2= "Bonjour,<br /><br />Désolé, mais votre citation est déjà dans la liste. 
Mais, en cherchant bien, nous sommes sûrs que vous allez bientôt faire parti  de la grande famille des citateurs perso."; 

$texte3= "Bonjour,<br /><br />Et merci, cette  citation de ".$_SESSION['titre']." sera prochainement dans la base de données des citations 
célèbres.";
Et enfin tu déclares ta session lorsque tout est OK, donc juste après ton $etat="ok";
$etat="ok"; 
$_SESSION['titre'] = $_POST['titre'];
Tu as le principe. Corriges un peu ton code HTML, il est sale ;)

par Stegue » 09 mai 2006, 18:22

Exact. Avec $texte1, le pseudo apparait bien.
Mais crois-tu qu'il y a une solution pour ce formulaire ou ai-je tout à refaire ?

par charabia » 09 mai 2006, 10:30

Lorsque tu fais :
$email_webmaster = "Citation à la Con";//// indiquer votre adresse email /////     
if(isset($_POST['texte']))
	$message = $_POST['texte'];
else
	$message = 'erreur';

if(isset($_POST['titre']))
	$titre = $_POST['titre'];
else
	$titre = 'erreur';


$texte1= "Bonjour,<br /><br />bravo, votre citation sera prochainement dans la base de données des citations perso sous le pseudo ".$titre; 

$texte2= "Bonjour,<br /><br />Désolé, mais votre citation est déjà dans la liste. 
Mais, en cherchant bien, nous sommes sûrs que vous allez bientôt faire parti  de la grande famille des citateurs perso."; 

$texte3= "Bonjour,<br /><br />Et merci, cette  citation de ".$titre." sera prochainement dans la base de données des citations 
célèbres.";
Les variables n'existent pas au départ.

Quand tu valides ton formulaire, $message et $titre vont bien prendre la valeur de tes champs.

Le problème c'est que lors de ton envoi de mail tu affiches $message qui, à ce moment n'a pas la variable "titre", c'est pour ça que c'est vide.

Si tu affiches $texte1, tu verras bien le pseudo apparaître.

par Stegue » 08 mai 2006, 21:41

Ben celui là. Y'a le même pou l'email et ça marche bien.
<label for="titre">Pseudo</label>
            ou Auteur c&eacute;l&egrave;bre <br />
            <input type="text" size="50" name="titre" id="titre" value="<?php
        if (!empty($_POST['titre'])) { 
// le titre du message a été saisi: le réafficher
                echo htmlspecialchars($_POST['titre'],ENT_QUOTES);
        }

par charabia » 08 mai 2006, 21:24

Quel est donc le formulaire qui te permet de récupérer $_POST['titre']; ?

par Stegue » 08 mai 2006, 21:15

J'ai remis les ' mais... nan.

par charabia » 08 mai 2006, 21:04

Vu rapidement, tu as des erreurs : oublie de ''.

Exemple :
$_POST[titre]
devient
$_POST['titre']
Idem pour les autres déclarations.

par Stegue » 08 mai 2006, 21:00

Le Voilà:
<?php  //merci pour votre citation
$email_webmaster = "Citation à la Con";//// indiquer votre adresse email /////	
$message = $_POST[texte];

$texte1= "Bonjour, 
bravo, votre citation sera prochainement dans la base de données des citations perso sous le pseudo ".$_POST["titre"];

$texte2= "Bonjour,

Désolé, mais votre citation est déjà dans la liste.
Mais, en cherchant bien, nous sommes sûrs que vous allez bientôt faire parti  de la grande famille des citateurs perso.";

$texte3= "Bonjour,

Et merci, cette  citation de ".$_POST[titre]. " sera prochainement dans la base de données des citations 
célèbres.";


// === traitement des données du formulaire ============================================================
if (isset($_POST[envoyer])){ 
// le formulaire a été soumis
        $etat = "erreur"; 
	    

// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
        if (isset($_POST[email_expediteur])) {
                 $_POST[email_expediteur]=trim(stripslashes($_POST[email_expediteur]));
        }
        if (isset($_POST[titre])) {
                 $_POST[titre]=trim(stripslashes($_POST[titre]));
        }
      
        // --- test de la validité des champs saisis ---
        if (empty($_POST[email_expediteur])) { 
// il manque l'email de l'expéditeur
                 $erreur="Saisissez votre adresse email...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$",$_POST[email_expediteur])){ 
// l'adresse e-mail n'est pas valide
                 $erreur="Votre adresse e-mail n'est pas valide...";
        }
       
        else { 
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
                 $etat="ok";
        }
}
else { 
// --- le formulaire n'a pas été soumis ---
           $etat="attente";
}
// === fin de traitement des données du formulaire =======================================================


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formulaire de remerciement</title>
</head>
<body>
<div align="center">
<h1> </h1>
<h1> </h1>
<h1> </h1>
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
         if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
                         echo "<p><strong>".$erreur."</strong></p>\n"; 
// afficher le message d'erreur
         }
?>
        <form method="post" action="<?php echo $_SERVER[PHP_SELF]; ?>">
		<h2>Remerciement de l'exp&eacute;diteur </h2>
		<!-- mettre le nom de votre site ou autre -->
        <blockquote>
          <p>
            <label for="email_expediteur">          E-mail:</label>
            <br />
            <input name="email_expediteur" type="text" class="minuscule" id="email_expediteur" value="<?php
        if (!empty($_POST[email_expediteur])) { 
// l'adresse email de l'expéditeur a été saisie: la réafficher
                echo htmlspecialchars($_POST[email_expediteur],ENT_QUOTES);
        }
        ?>" size="50" />
          </p>
          <p>
            <label for="titre">Pseudo</label>
            ou Auteur c&eacute;l&egrave;bre <br />
            <input type="text" size="50" name="titre" id="titre" value="<?php
        if (!empty($_POST[titre])) { 
// le titre du message a été saisi: le réafficher
                echo htmlspecialchars($_POST[titre],ENT_QUOTES);
        }
        ?>" />
          </p>
          
          <p>
            <label></label>
            <label>
            <input name="texte" type="checkbox" id="texte" value="<?php echo $texte1; ?>" />
            Merci pour votre citation</label>
			
          </p>
          <p>
            <label>
            <input name="texte" type="checkbox" id="texte" value="<?php echo $texte2; ?>" />
            Désolé, cette citation existe déjà</label>
			
          </p>
          <p>
            <label>
            <input name="texte" type="checkbox" id="texte" value="<?php echo $texte3; ?>" />
            Merci pour cette citation de...</label>
			
          </p>
          <div align="center">
            <p>
              <input name="envoyer" type="submit" id="envoyer" value="Envoyer" />
              
            </p>
            <p>&nbsp;</p>
          </div>
          <p><br />
          </p>
        </blockquote>
        </form>
        <?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: \"Citation à la Con\"<[email protected]> \n";
        $entete .= "MIME-Version: 1.0";
        if (@mail($_POST[email_expediteur],"envoi d'une citation", $message ,$entete)){ 
// mail envoyé
                echo "Votre message a été envoyé.<br />\n";
                echo "<a href=\"".$_SERVER[PHP_SELF]."\">Retour...</a>\n";

        }
        else { 
// erreur lors de l'envoi du mail
                echo "Un problème s'est produit lors de l'envoi du message.\n";
                echo "<a href=\"".$_SERVER[PHP_SELF]."\">Réessayez...</a>\n";
        }
}
?>
</body>
</html>

par charabia » 08 mai 2006, 20:53

Ton problème se situe donc ailleurs.

Montres nous ton code complet.

par Stegue » 08 mai 2006, 20:52

Non, je ne la reçoie pas:
"Bonjour, bravo, votre citation sera prochainement dans la base de données des citations perso sous le pseudo ."

par charabia » 08 mai 2006, 20:39

Reçois-tu une valeur pour $_POST["titre"]; ?

Si oui, essaies d'enlever les retours chariot :
$texte1= "Bonjour, bravo, votre citation sera prochainement dans la base de données des citations perso sous le pseudo ".$_POST["titre"];