Foros del Web » Programando para Internet » PHP »

Cookies y Encuesta

Estas en el tema de Cookies y Encuesta en el foro de PHP en Foros del Web. Hola q tal ? vamos a ver, tengo una encuesta en mi web y quiero evitar que alguien vote mas de 1 vez ! estuve ...
  #1 (permalink)  
Antiguo 30/11/2003, 14:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 10
Antigüedad: 20 años, 6 meses
Puntos: 0
Exclamación Cookies y Encuesta

Hola q tal ?
vamos a ver, tengo una encuesta en mi web y quiero evitar que alguien vote mas de 1 vez ! estuve mirando por le foro y encontre el temas de las cookies, pero claro yo uso las encuestas en es plan

encuestas.php?id=$id

y claro no ve la manera q si alguien que vote en la encuesta

encuestas.php?id=4

pueda votar en la

encuestas.php?id=6 (o la que sea, todas menos las 4)

estuve probando.. pero na
alguien sabe como hacer ?

gracias de antemano

salu2
  #2 (permalink)  
Antiguo 30/11/2003, 14:48
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
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

    //aqui ejecutas el +1 en la encuesta

        
$_SESSION['id_encuesta']= $_GET['id'];//añadimos un dato como que ya ha votado

        
echo"se acava de votar!";

    } else {
//si la session existe...

        
switch ($_SESSION['id_encuesta']){//iniciamos swhich con las diferentes encuestas
            
case '1':
                echo
"Ya has votado esta encuesta!, no puedes mas!";
            return;

            case 
'2':
                echo
"Ya has votado esta encuesta!, no puedes mas!";
            return;

            case 
'3':
                echo
"Ya has votado esta encuesta!, no puedes mas!";
            return;

        }
//termino switch
    
}//termino if

?>
saludos
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 30/11/2003 a las 14:53
  #3 (permalink)  
Antiguo 30/11/2003, 14:50
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
podrias capturar el id desde la variable global $_GET['id']

Código PHP:
       $_SESSION['id_encuesta']= $_GET['id'];//añadimos un dato como que ya ha votado 
__________________
3w.valenciadjs.com
3w.laislatv.com
  #4 (permalink)  
Antiguo 30/11/2003, 16:51
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 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
  #5 (permalink)  
Antiguo 30/11/2003, 19:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 10
Antigüedad: 20 años, 6 meses
Puntos: 0
muchas gracias a los 2, voy a estudiar el codigo y ya les dire q tal :)

gracias
  #6 (permalink)  
Antiguo 30/11/2003, 20:18
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 21 años, 4 meses
Puntos: 0
una pregunta, no las sesiones se borraban cuando cierras el navegador?
__________________

la vida es bella cuando no es culera
  #7 (permalink)  
Antiguo 01/12/2003, 06:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En general si .. sdf23 (así es como se suelen configurara las sesiones) .. pero podrían durar el tiempo que quieres .. sobre todo si propagas el SID en una cookie definiendo el tiempo de expiración de esta y el de la própia sesión en el servidor (ver php.ini para más detalles).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 16:57.