Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/11/2003, 16:51
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
La única forma de evitar que alguien vote más de una vez es tener un sistema de autentificación con usuarios registrados y guardar en la BD (o txt) las encuestas por las que ya votó...

Lo que dice en las FAQ's y el código que te puso nuevo sirve para que un mismo usuario* no pueda votar en la misma encuesta dentro de las próximas 24 horas... O sea que mañana regresa y vuelve a votar...

*El problema es se toma en cuenta como que votó el ordenador, no el usuario. O sea que si yo voto ahora.. nadie más que utilice esta máquina puede votar (en 24 horas)... El mismo problema se tendría utilizando cookies en lugar de sesiones.

Ahora... algo que no contempla el código de nuevo, es que un usuario vote por varias encuestas en la misma sesion. Por eso creo que $_SESSION['id_encuesta'] debería ser un array. O sea algo así:
Código PHP:
<?php
    session_name
('tu_nombre');//pon un nombre a la session
    
session_start();//inicio sessiones
    
session_cache_limiter('nocache,private');//regulo la cache, para no dar error
    
ini_set("session.cache_limiter","86400");//las sessiones caducan cada 24h


    
if (empty($_SESSION['id_encuesta'])){//si el dato de la session esta vacio, ejecuta if
        
        //Acá añades el voto: UPDATE tabla SET... etc, etc

        //aqui ejecutas el +1 en la encuesta
        
$_SESSION['id_encuesta'][]= $_GET['id'];//añadimos un dato como que ya ha votado
        
        //E imprimes el mensaje:
        
echo "Se acaba de votar...";

    } else {
//si el array existe...
        
        //Recorremos el array buscando alguna coincidencia entre las encuestas votadas en esta 
        //sesión y la que se pretende votar ahora.
        
        
$encontrado=0;
        foreach(
$_SESSION['id_encuesta'] as $valor){
            if(
$valor==$_GET['id']){//Si se encuentra coincidencia es que ya se votó en esta encuesta
                
$encontrado=1;
                break;
            }
        }
        if(
$encontrado=1){
            echo 
"Usted ya había votado en esta...";
        }else{
            
//Añades el voto: UPDATE tabla SET...

             //Guardas el id de la encuesta en el array (sesion)
             
$_SESSION['id_encuesta'][]= $_GET['id'];
            
            
//E imprimes el mensaje:
            
echo "Se acaba de votar...";
        }
    }
?>
Saludos

Última edición por jpinedo; 30/11/2003 a las 19:16