Problème de cookies

Résolu
Fastoche -  
 Fastoche -
* Bonjour, j'ai un petit problème avec un site que je suis en train de créer. Pouvez-vous m'aider svp ? C'est un site où on vote Pour ou Contre des trucs. Il y a une seule page, avec deux paramètres dans la barre d'adresse : a, qui est l'identifiant du truc précédent, et b l'identifiant du truc en cours.
*
* Un cookie est posé à chaque vote. Si l'id est 3, le cookie s'appelle b3. Pour générer l'identifiant suivant, on prend un nombre aléatoire $ran et on le régénère autant de fois qu'il le faut pour qu'un cookie ne soit pas posé sur son nom.
*
* Voilà le problème : les cookies se posent bien (j'ai vérifié), mais l'id suivant peut très bien être un id attaché à un cookie déjà posé ! Par ailleurs, lorsque tous les cookies sont posés, la boucle while dure à l'infini, comme prévu cette fois-ci.
*
* En fait, tout se passe comme si la boucle while faisait à chaque fois une étape en plus ou en moins... mystérieux !
*
* En espérant que quelqu'un prendra le temps de lire tout ça et de m'aider ! ^^
*
* Voici le code du site, avec les trucs apparemment sans incidence enlevés :


  

 <?php
   $a = $_GET['a'];
   $b = $_GET['b'];
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
if (($_POST['vote']=='oui') || ($_POST['vote']=='non'))
{
setcookie('b'.$a, 'ok', time() + 10*365*24*3600);
}
?>


<?php $reponse2 = $bdd->query('SELECT * FROM nombre');
$donnees2 = $reponse2->fetch(); 
$ran=floor(rand(0, ($donnees2['nombre']-1)));
while (($_COOKIE['b'.$ran]=='ok') || ($ran==$b))
   {
   $ran=rand(0, ($donnees2['nombre']-1));
    }
;?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Titre à choisir</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
   </head>
   <body>
  

   <div class="for">
<form method="post" action=<?php echo "accueil.php?a=$b&b=$ran" ?>>
<input type="radio" name="vote" value="oui" id="oui" /> <label for="oui">Pour</label></br>
<input type="radio" name="vote" value="non" id="non" /> <label for="non">Contre</label></br>
<input type="submit" value="Valider" />
</form>
</div>
	</div>

   </body>
</html>



2 réponses

apprendreEtSeDevelopper Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   6
 
Bonjour,

De plus, j'aurais mis comme nom de l'ID le numéros de la question (numéros utilisé dans ta base), ensuite tout est plus facile !
Il faut aussi tester ton while, en effet il ne faut pas qu'il boucle à l'infinie.
et fait en Do...While ton code sera plus propre...
0
Fastoche
 
J'avais déjà essayé avec le numéro directement, sans "b" devant, mais ça ne marchait pas non plus.

[EDIT] Problème résolu seul (et j'ai pas très bien compris le pourquoi en fait...) !
0