Problème livre d'or

Fermé
akio.j Messages postés 1 Date d'inscription samedi 25 juin 2011 Statut Membre Dernière intervention 25 juin 2011 - Modifié par akio.j le 25/06/2011 à 13:48
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 - 2 juil. 2011 à 17:53
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.

A voir également:

4 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
25 juin 2011 à 15:38
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
up
0
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
Petit up, s'il vous plait .
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
2 juil. 2011 à 17:53
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