Problème livre d'or

akio.j Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
avion-f16 Messages postés 19253 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai réaliser un livre d'or dont le commentaire est traité une fois sur cinq. Exemple: je rentre le pseudo,message,réponse a la question et bien le message arrive une fois sur cinq a la BDD (voir jamais parfois). J'ai chercher plusieurs jour,testé plusieurs technique et sans succé . Je suis debutant, merci de votre aide.
<form method="post" action="<?$PHP_SELF;?>">  
 <fieldset>  
  <legend> Livre d'or </legend>  
   <label  for="textbox1">Pseudo : </label>  
   <input  type="text" id="textbox1" name="pseudo" />  
   <br></br>  
   <label for="textarea1">Commentaire : </label>  
   <textarea id="textarea1" name="commentaire" rows="2" cols="20"> </textarea>  
<?php  

     
$question = rand(0,4);  

$reponse = array (25, 15,'chat', 'chien', 5);  

switch ($question)  
{  
        case 0: echo '<label for="textbox2">Question : Combien font 5 x 5 ? </label>';  
                         
        break;  
        case 1: echo '<label for="textbox2">Question : Combien font 10 + 5 ? </label>';  
                         
        break;  
        case 2: echo '<label for="textbox2">Question : Quel animal miaule ? le : </label>';  
                         
        break;  
        case 3: echo '<label for="textbox2">Question :  Quel animal aboie ? le :</label>';  
                         
        break;  
        case 4: echo '<label for="textbox2">Question : Combien de doigts possede une main ? </label>';                         
        break;  
}  
?>  

<input id="textbox2" name="antibot"/>  

<input type="submit" name="valide" value="Envoyer"/>  
     
<?php  
extract($_POST);  

if ((isset($antibot)) && ($antibot == $reponse[$question]) && (!empty($antibot)))  
{   
    if ((isset($pseudo)) && (isset($commentaire)) && (!empty($pseudo)) && (!empty($commentaire)) )  
    {   
          


        $sql = "INSERT INTO livreor ( pseudo, message ) VALUES ('".$pseudo."', '".$commentaire."');";  
        $req = mysql_query($sql);  
        if (!$req)  
        {  
         die ('l\'envoie au serveur n\'a pas fonctionné :'.mysql_error());  

        }else echo "<br> <br> <strong> le commentaire a bien etais envoyer </strong>";  

    }  
    else echo 'les champs pseudo et commentaire doient obligatoirement etre remplie';  
                    }  

        
  ?>  

 </fieldset>  
</form>  


PS:(j'ai mis que la partie du code d'où le problème pourrais venir) je crois que le probleme vient de la variable $reponse.

4 réponses

avion-f16 Messages postés 19253 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut,

Le nombre de la question est généré deux fois :
- La première lors de l'affichage du formulaire
- La seconde après l'envoie, lors du deuxième chargement.
Le nombre ne sera pas toujours le même.

De plus, je te déconseille l'usage de extract()
En ajoutant manuellement des champs, on peut réécrite $question et $reponse.
0
akio.j
 
up
0
akio.j
 
Yo,

Merci avion-f16 pour ton aide. Alors j'essaye de régler le problème de la re-génération de la question a l'envoie, avec "if(isset($_POST) && !empty($_POST))" comprendre "si j'envoie un formulaire". Donc je genere ma question avec rand(); dans le else le probleme c'est que la variable $question disparais lors de l'envoie du formulaire donc plus de comparaison possible avec $antibot :/

<?php 

if(isset($_POST) && !empty($_POST)) 
{ 
    $antibot = $_POST['antibot']; 
    $commentaire = $_POST['commentaire']; 
    $pseudo = $_POST['pseudo']; 

    if ((isset($antibot)) && ($antibot == $reponse[$question]) && (!empty($antibot))) 
    {    
        if ((isset($pseudo)) && (isset($commentaire)) && (!empty($pseudo)) && (!empty($commentaire)) ) 
        {  
  



            $sql = "INSERT INTO livreor ( pseudo, message ) VALUES ('".$pseudo."', '".$commentaire."');"; 
            $req = mysql_query($sql); 
            if (!$req) 
            { 
             die ('l\'envoie au serveur n\'a pas fonctionné :'.mysql_error()); 

            } 
            else echo "<br> <br> <strong> le commentaire a bien etais envoyer </strong>"; 
        } 
        else echo 'les champs pseudo et commentaire doient obligatoirement etre remplie'; 
    } 
} 
else
{
$question = rand(0,4); 
$reponse = array (25, 15,'chat', 'chien', 5); 

switch ($question) 
{ 
        case 0: echo '<label for="textbox2">Question : Combien font 5 x 5 ? </label>'; 
                        
        break; 
        case 1: echo '<label for="textbox2">Question : Combien font 10 + 5 ? </label>'; 
                        
        break; 
        case 2: echo '<label for="textbox2">Question : Quel animal miaule ? le : </label>'; 
                        
        break; 
        case 3: echo '<label for="textbox2">Question :  Quel animal aboie ? le :</label>'; 
                        
        break; 
        case 4: echo '<label for="textbox2">Question : Combien de doigts possede une main ? </label>';                        
        break; 
}
} 
?> 
0
akio
 
Petit up, s'il vous plait .
0
avion-f16 Messages postés 19253 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut,

Les vérifications isset() que tu fais sur les variables que tu déclares avant ($pseudo, $antibot) ne servent à rien : forcément que les variables existent, puisque tu les crées avant.

Tu peux stocker la réponse en session lors de l'affichage du formulaire, et ensuite, comparer cette variable de session avec la variable POST quand le formulaire est envoyé.
0