Foros del Web » Programando para Internet » PHP »

Bloquear doble voto en encuestas

Estas en el tema de Bloquear doble voto en encuestas en el foro de PHP en Foros del Web. Hola, estoy armando un sistema de encuestas. Pero me encuentro con el problema que no puedo bloquear el doble (o triple ... etc) voto. Lo ...
  #1 (permalink)  
Antiguo 23/07/2005, 10:10
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Bloquear doble voto en encuestas

Hola, estoy armando un sistema de encuestas. Pero me encuentro con el problema que no puedo bloquear el doble (o triple ... etc) voto.
Lo tengo armado con una tabla en la BD que toma la ip, el id de la encuesta y el time() del voto y después, antes de gestionar el voto comparo esos datos con los actuales, dandole un tiempo de diferencia mínima de 24 horas (creo q son 86400 segundos). Ahora bien, con el tema que las ip van rotando por los proxys funciona si el tipo voto dos veces simultáneas pero si dejo pasar un rato ... pum, metí otro voto.
Había pensado en clavarle una cookie (de nombre por ejemplo "encuesta" y con el id de encuesta como valor) pero como hay más de una encuesta, al votar en la encuesta "B" sobreescribiría la cookie q se puso con el voto en la encuesta "A" y por ende podría volver a votar la "A" ... y así hasta el infinito.
Pego el código a ver si a alguno se le ocurre algnoa forma más efectiva y precisa.

<?
require_once("../../config.php");
if ($opcion != "") { // $opcion es la variable que votó
if (getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}
$bu = mysql_query("select * from encuestas_ip where encuesta_ip_encuesta='$id_encuesta' and encuesta_ip_ip='$ip'");
// encuesta_ip_encuesta es el id de las encuestas votadas
// encuesta_ip_ip son las ip relacionadas con los votos

$bus = mysql_fetch_array($bu);
$tiempo = time();
$diferencia = $tiempo - $bus[encuesta_ip_tiempo];
if ($bus[encuesta_ip_ip]=="$ip" and $diferencia < 86400) {
echo "<script LANGUAGE=\"javascript\"> alert(\"Disculpe, pero usted ya votó en esta encuesta. Inténtelo nuevamente más en 24 horas.\");</script>";
echo "<script languaje=\javascript\">history.go(-1)</script>";
exit;
}
else {
mysql_query("insert into encuestas_ip set encuesta_ip_ip='$ip', encuesta_ip_tiempo='$tiempo', encuesta_ip_encuesta='$id_encuesta'");
mysql_query("update encuestas_resp set encuesta_resp_votos=encuesta_resp_votos+1 where encuesta_resp_id='$opcion' and encuesta_resp_encuesta='$id_encuesta'");
header ("Location: ../../res.php?archivo=encuestas/perfil_publico.php&id_encuesta=$id_encuesta&pg=$pg ");
exit;
}
}
else {
echo "<script LANGUAGE=\"javascript\"> alert(\"No seleccionó ningún campo de la encuesta. Por favor inténtelo nuevamente.\");</script>";
echo "<script languaje=\javascript\">history.go(-1)</script>";
}
?>

Espero me puedan ayudar con ésto, necesito lanzar este módulo y estoy frenado por no poder resolver este tema.
Gracias
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE

Última edición por jpvilar; 23/07/2005 a las 10:10 Razón: Título poco descriptivo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:39.