Cookies

Hola!
Tengo hecho un sistema de votaciones. Es simple, varios checkbox que mandan el nombre de un jugador si han sido clickeados y agrega 1 a una bbdd.
Para limitar a que los usuarios puedan votar solo 1 vez por semana, he creado unas cookies. El problema es que el valor de la Cookie votos se me reinicializa cada vez. El echo me da siempre 1.
Por otro lado, en el formulario, he puesto lo que ves abajo. ¿Esta bien así?
Gracias!
Cookie:
//Debe ir al principio del archivo
setcookie("votos",$votando,time()+60*60*7); //Para que dure una semana
setcookie("jugadores",null,time()+60*60*7);
if($_POST['box']){
if($_COOKIE['votos']>3){
echo 'No puedes votar mas de 3 veces';
}
else{
$_COOKIE['votos']++;
}
/* Lo hago separado, por si quieres ponerlo en otra parte, siempre y cuando cumplan el if() de arriba */
if(in_array($_POST['box'],$_COOKIE['jugadores'])){
echo 'Lo sentimos, pero ya has votado por este jugador';
}
else{
$_COOKIE['jugadores'][] = $_POST['box']; //Suponiendo que $_POST['voto'] trae el value del radio
}
}
?>
Formulario:
if($_COOKIE['votos']>0){
echo 'No puedes votar mas de 3 veces';
echo "
<td>"."<input name='box[]' disabled='disabled' type='checkbox' value='$row[Jugador]' onclick='setChecks(this)'/>"."</td>
";
}
else{
echo "
<td>"."<input name='box[]' type='checkbox' value='$row[Jugador]' onclick='setChecks(this)'/>"."</td>
";
echo "hola".$_COOKIE['votos'];
echo "
</tr>
";
}

1 Respuesta

Respuesta
1
La matriz de cookies no es como una matriz normal para que operes con ella.
Te explico: las cookies o galletas se almacenarán en el ordenador del usuario cuando la página se envíe.
Por lo tanto, no tiene sentido consultar el valor, cambiarlo, volverlo a consultar, etc. mientras te encuentres ejecutando PHP.
Antes que nada, deberías averiguar si la cookie tiene algún valor. Puede ser, además, que el usuario las haya deshabilitado, con lo cual no se almacenaría nunca.
Por ejemplo, deberías comprobar:
if (empty($_COOKIE['votos']))
Durante el trabajo con PHP, puedes manejar una variable $votos por ejemplo.
Y al finalizar, assignar el valor a :
$_COOKIE['votos'] = $votos;
NO CONSULTES el valor de la Cookie en la misma página en la que la acabas de asignar, porque su valor no tendrá sentido hasta que la página haya finalizado y se guarde en el ordenador del cliente.
Comprendo.
- ¿Pero crees que quitando la consulta debería funcionar?
- ¿También la parte del formulario en la que inhabilito el checkbox?
Gracias!
Lo que quiero decir es que la cookie no actúa como una variable. No es de fiar desde ese punto de vista. Es una variable pospuesta en el tiempo: le puedes asignar un valor para leer en el futuro, pero no para leer ahora mismo que se lo acabas de asignar.
Desde ese punto de vista, no debes consultar el valor de hoy, si no el de la última vez que lo usaste.
No sé si me explico.
Si quieres usar el valor al que la pones hoy, usa una variable si lo quieres consultar ahora mismo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas