Problème livre d'or

akio.j Messages postés 1 Statut Membre -  
avion-f16 Messages postés 19182 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

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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
    1. akio.j
       
      up
      0
  2. 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
  3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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