Foros del Web » Programando para Internet » PHP »

Restringir el votar solo una vez en encuesta

Estas en el tema de Restringir el votar solo una vez en encuesta en el foro de PHP en Foros del Web. Hola a todos: Primero que todo disculpas al moderador, pero pense que asi seria mejor. Error mío. Estoy buscando la forma de negar al usuario ...
  #1 (permalink)  
Antiguo 21/10/2006, 22:52
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Pregunta Restringir el votar solo una vez en encuesta

Hola a todos:

Primero que todo disculpas al moderador, pero pense que asi seria mejor. Error mío.

Estoy buscando la forma de negar al usuario a votar en una encuesta creada con mysql y php, más de una vez.

Atentamente
Pablo Araya.-
__________________
Adios ...!!!!
  #2 (permalink)  
Antiguo 21/10/2006, 23:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Ahora las preguntas de rigor:

Quien vota en tu sistema? .. usuarios registrados o usuarios No registrados (si es que dispones de algún sistema de registro/seguimiento de usuarios)?

Te comento que la única forma realmente efectiva de que un usuario no vote más que una vez es que este sea un usuario registrado en tu aplicación.

Otras técnicas como registrar IP, usar cookies y demás no sirven para mucho .. Cualquier usuario en esas condiciones que quiera saltarse tu sistema de validación lo hará. (Yo por ejemplo no invierto tiempo en esos desarrollos .. a no ser que el "margen de error" que esto tiene lo acepten .. Creo que si uno pide una encuesta es para que sea lo más veridica posible. Estos temas hay que plantearselos a quien corresponda).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/10/2006, 00:24
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
mmm ... son usuarios no registrados. Pero a pesar de ello me gustaría restringir de todas formas la encuesta a solo un voto. (a pesar que no sea 100% factible)

Muchas Gracias.-
__________________
Adios ...!!!!
  #4 (permalink)  
Antiguo 22/10/2006, 11:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Pues decide .. que vas a usar:

Cookies? .. registrar la IP? .. Conoces los prós y contras de estas opciones? (te las puedes imaginar?).

Podrías empezar por ir registrando la IP ... Se trata de que obtengas la IP del usuario que está usando (valga la rebundancia) tu script de proceso del registro del voto. Es ahí donde tomas dicho dato que lo tienes en:

$_SERVER['REMOTE_ADDR"]

Dicho dato lo almacenas en una tabla de tu BBDD, pero antes verificas que no esté dicho dato en tu BBDD, si no está .. contabilizas el voto y registras el dato.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/10/2006, 12:28
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Si, conozco los pro y los contra de cookies e ip ... me gustaria hacer una restriccion via IP .. vi en las faqs que existe una pero no me funciono ... me podrias ayudar en ello por favor?
__________________
Adios ...!!!!
  #6 (permalink)  
Antiguo 22/10/2006, 12:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por BLAH !! Ver Mensaje
Si, conozco los pro y los contra de cookies e ip ... me gustaria hacer una restriccion via IP .. vi en las faqs que existe una pero no me funciono ... me podrias ayudar en ello por favor?
Y dale ..

Si dices que algo que pruebas NO te funciona .. debes indicar lo que probastes y explicar que problemas concretos tuvistes!!!!!!!!!!!!. No sirven de nada comentarios como "no me funciona" .. "probé esto" o "probé lo otro" sin -especificar- que es lo que realmente -usastes-.

Si hay mensajes de error del código que usas o comportamiento inesperado -debse- describirlo al detalle .. date cuenta que no estamos ante tu "PC" y condiciones de pruebas para verlo por nosostros mismos!!!!.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 22/10/2006, 13:32
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
De acuerdo ...

La verdad en este momento no te puedo señalar el error ... tengo mi encuesta que funciona perfectamente pero quiero hacer lo del bloqueo de ip ... con este tabla de BD

CREATE TABLE `ips` (
`ip` varchar(11) NOT NULL,
PRIMARY KEY (`ip`)
) TYPE=MyISAM;

se me perdio el codigo que tenia para realizarlo asi es que estoy desde cero ... no se como se puede hacer ni tampoco puedo señalar el error
__________________
Adios ...!!!!
  #8 (permalink)  
Antiguo 22/10/2006, 17:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Bueno .. ya te he comentado que debes usar la variable $_SERVER['REMOTE_ADDR'] que te dá la IP . . ese dato lo ingresas a tu BBDD si no está ya en ella. Sabes hacer una consulta SQL condicional? (WHERE ...)

Pretendo que lo vayas haciendo tu y no hacerlo yo mismo .. realmente es bien sencillo, pero si no vas "pensando" así nunca sacaras nada por tí mismo (espero que me entiendas ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 22/10/2006, 23:26
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Codigo
Código PHP:
$ip=$_SERVER['REMOTE_ADDR'];
$encuesta=$_GET['idencuesta'];
$consulta=mysql_query("SELECT ip FROM tabla_ips WHERE ip='$ip' AND idencuesta='$encuesta'",$conection);

if(
$num=mysql_num_rows($consulta) != 0){
echo
"Tu ya votaste esta encuesta";
exit;
}

//En este punto, se identifica que el user no ah votado
//ponemos el codigo para contabilizar voto...

//ahora enviamos la ip ala tabla para banearla
mysql_query("INSERT INTO tabla_ips (ID, ip, idencuesta) VALUES ('', '$ip', '$encuesta')",$conection);

/*
ya insertamos el registro de IP para banearla por si el user kiere votar otra vez, este codigo como todos los demas, se puede complementar, agregando envio y verificacion de cookies, una funcion de tiempo para volver a votar en (1 hora, 1 dia, etc.)
y muchisimas cosas mas...
*/ 
Saludos
  #10 (permalink)  
Antiguo 22/10/2006, 23:28
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
jeje, haz caso a Cluster, empeze con su Autentificador, y ahora, se mucho PHP, incluso ya genere 2 Paginas Dinamicas para empresas en menos de 1 año 1/2
  #11 (permalink)  
Antiguo 28/10/2006, 12:17
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
ya ok ... esta el codigo pero en la BD debo crear otra tabla llamada "tabla_ips" con 3 variables :
ID
ip
idencuesta

pero que atributos doy a estas variables?
__________________
Adios ...!!!!
  #12 (permalink)  
Antiguo 28/10/2006, 12:58
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Exclamación aqui esta el codigo

CODIGO PHP

Código HTML:
<? 
$servidor="localhost"; 
$usuario="user"; 
$password="**"; 
$base="base_encuesta"; 
$SQLid = mysql_connect($servidor,$usuario,$password); 
mysql_select_db($base,$SQLid); 
$SQLquery = "SELECT * FROM tblenc order by encid desc"; 
$SQLresult = mysql_query($SQLquery,$SQLid); 
$SQLrow = mysql_fetch_array($SQLresult); 
?> 
		<form name="encuesta" method="post" action="encuesta.php"> 
		<input type=hidden name="encid" value="<?echo $SQLrow[0]?>"> 
		<table border="0" align="center" cellpadding="0" cellspacing="0"> 
		<tr> 
		   <td> <div align="center"><font color="000000" face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 12px"><strong> 
		   <? echo $SQLrow[1]?> 
		   </strong></font></div></td> 
		</tr> 
		<tr> 
		    <td> <p> <font color="000000" face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9px"> 
		    <label> 
		    <input type="radio" name="voto" value="1"> 
		    <? echo $SQLrow[2]?></label> 
		    <br> 
		    <label> 
		    <input type="radio" name="voto" value="2"> 
		    <? echo $SQLrow[3]?></label> 
		    <br> 
		    <label> 
		    <input type="radio" name="voto" value="3"> 
		    <? echo $SQLrow[4]?></label> 
		    <br> 
		    <label> 
		    <input type="radio" name="voto" value="4"> 
		    <? echo $SQLrow[5]?></label> 
		    <br><br>
		    </font></p></td> 
		</tr> 
		<tr> 
		    <td> <div align="center"> 
		    <input type="submit" name="Submit" value="Votar" style="color: #003366; background-color: #FFFFFF; font-family:verdana; font_size:xx-small"> 
		    </div></td> 
		</tr> 
		</table> 
		</form> 
CODIGO TABLA BD
Código HTML:
CREATE TABLE `tblenc` (
  `encid` int(11) NOT NULL auto_increment,
  `encprg` varchar(50) default NULL,
  `encrpt1` varchar(50) default NULL,
  `encrpt2` varchar(50) default NULL,
  `encrpt3` varchar(50) default NULL,
  `encrpt4` varchar(50) default NULL,
  `encval1` int(11) NOT NULL default '0',
  `encval2` int(11) NOT NULL default '0',
  `encval3` int(11) NOT NULL default '0',
  `encval4` int(11) NOT NULL default '0',
  `enctot` int(11) NOT NULL default '0',
  PRIMARY KEY  (`encid`),
  FULLTEXT KEY `encprg` (`encprg`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

He intentado hacer lo que me dices y no me funcionó, tampoco sale error. Me gustaría saber donde coloco el codigo que me has dado y como creo la tabla BD 'tabla_ip' (cuantos valores y que atributos)
__________________
Adios ...!!!!

Última edición por BLAH !!; 28/10/2006 a las 13:00 Razón: faltó la pregunta
  #13 (permalink)  
Antiguo 28/10/2006, 15:17
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
eske utiliza un poco tu logica, si vas a restringir la encuesta, por favor, pon un poco de logica para lo ke hace el script, como interactua con SQL

yo utilizo ese script, por ke yo lo hice (en mi caso no lo descargue ni lo copie) pero sake toda la logica ke kize

haz lo mismo...

  #14 (permalink)  
Antiguo 28/10/2006, 16:56
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
De acuerdo

Cita:
Iniciado por MoDoRrO Ver Mensaje
eske utiliza un poco tu logica, si vas a restringir la encuesta, por favor, pon un poco de logica para lo ke hace el script, como interactua con SQL. Yo utilizo ese script, por ke yo lo hice (en mi caso no lo descargue ni lo copie) pero sake toda la logica ke kize
Ok señor Lógico . xD . Primero que todo hice lo que dices tu, traté de usar la "logica", he hice esto:

Código HTML:
<?
$servidor="localhost"; 
$usuario="user"; 
$password="**"; 
$base="base_encuesta"; 
$SQLid = mysql_connect($servidor,$usuario,$password); 
mysql_select_db($base,$SQLid); 
$SQLquery = "SELECT * FROM tblenc order by encid desc"; 
$SQLresult = mysql_query($SQLquery,$SQLid); 
$SQLrow = mysql_fetch_array($SQLresult); 
$ip = $_SERVER['REMOTE_ADDR']; 
$resultados = $_GET['idencuesta']; 
$consulta = mysql_query("SELECT ip FROM tabla_ips WHERE ip='$ip' AND idencuesta='$resultados'",$SQLid); 

if($num=mysql_num_rows($consulta) != 0){ 
echo"Tu ya votaste esta encuesta"; 
exit; 
} 
mysql_query("INSERT INTO tabla_ips (ID, ip, idencuesta) VALUES ('', '$ip', '$resultados')",$SQLid);

?> 

<form name="encuesta" method="post" action="encuesta.php">
....
__________________
Adios ...!!!!
  #15 (permalink)  
Antiguo 29/10/2006, 12:07
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
pues, el codigo esta bien, pero como lo estas trabajando en el formulario de encuesta?

el codigo php ya esta listo

  #16 (permalink)  
Antiguo 29/10/2006, 14:10
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Se estan olvidando de algo...

Holas, no soy experto en esto, pero creo que la solucion planteada de registrar las ips no es la mas indicada, pongo un caso:
Juan y Maria son esposos, y visitan la pagina mipagina.com, ellso tienen un pc, en casa, por lo cual los dos acceden a la internet desde el mismo lugar, por lo cual si uno de ellos vota, digamos juan vota, su ip sera registrada, por lo cual si maria desea votar en la misma pagina, atraves de su pc, pues no podra, pues ya ha sido registrado la ip, por lo cual se estaria perdiendo voto, y por lo cual esto es un caso general, comprendo que diran pero creo un script que me cada una hora desregistre la ip, y que pasa si en esa hora hay 10 votantes, que estan intentanto acceder desde el mismo pc, el tiempo para votar de nuevo es algo tedioso de manejar, y otro pues creo que al final los votantes terminarian aburriendose, pues al no poder votar simplemente se van.
Creo que se podria tomar en cuenta lo siguiente, que los usuarios esten registrados (como ya lo dijeron que esta ok entonces), es asi mas facil impedir, que un usuario vuelva a votar dos veces, pues simplemente se crearia un registro de los usuarios que votan y pues se restringiria de manera facil, y se podria crear un script que cada dia vacee, esta tabla de usuarios que han votado, y asi permitirle votar al usuario otra ves (ojo no estoy deacuerdo con esto, por que simplemente es fraude, no se puede concebir a un usuario votar dos veces creo yo ).
En el caso de que los usuarios no esten registrados, pues podrias crear un codigo autogenerado no identico, que el usuario deba ingresar, al momento de votar, cosa que registras a travez de ese codigo autogenerado, y asi permites que mas de un usuario puede votar desde una misma ip, sin restringirle el mismo. Ahor el detalle es que un mismo votante puede hacerlo mas de una vez, jaja y creo que volvemos a lo mismo y creo que hable de mas en fin nos vemos, seguire pensando en una solucion
  #17 (permalink)  
Antiguo 31/10/2006, 23:40
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
pero aqui vamos de rapido, si keremos una encuesta abierta (a todo el publico (debido a el tiempo de registro)) es mejor usar tablas ke eliminen el registro cuando el usuario salga de la pagina (eso es mejor) jeje

  #18 (permalink)  
Antiguo 01/11/2006, 13:39
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Mensaje mmm...

Primero que todo muchas gracias.
Lo del "problema" que se plantea, lo tengo claro, y no me complica porque tenía pensado hacer lo que Bellenger dice (desregistre la ip despues de un tiempo).
mi problema consiste en mi base de datos ... tengo lista la tabla "tblenc", pero no se ocmo crear o que poner en la tabla "tabla_ips"

Ademas en el codigo PHP que puse arriba me lanza este error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/.../.../encuesta/index.php on line 27

La linea 27 es :
$consulta = mysql_query("SELECT ip FROM tabla_ips WHERE ip='$ip' AND idencuesta='$resultados'",$SQLid);
__________________
Adios ...!!!!

Última edición por BLAH !!; 01/11/2006 a las 13:50
  #19 (permalink)  
Antiguo 01/11/2006, 14:02
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
ya ... ese error era porque no tenia creada la tabla_ips ahora la cree con dos campos
1) ip ---> primario
2) idencuesta

pero la duda es que debo poner en Field (ip y idencuesta), Type, Collation, Attributes, Null, Default, Extra
__________________
Adios ...!!!!
  #20 (permalink)  
Antiguo 02/11/2006, 00:23
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
no, chiko,
te recomiendo ke tu tabla contenga:
ID (tipo INT con 10 chrs) <- primario y autoincrement
ip (tipo varchar con 25 chrs)
idencuesta (tipo int con 5 chrs)

entonces, para ke subas a tu tabla un registro, sacas en una variable el IP de la makina, en este caso seria:
$ip=$_SERVER["REMOTE_ADDR"];

es todo
  #21 (permalink)  
Antiguo 02/11/2006, 01:42
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
lo mejor es por sesiones y registro de ips. Echale una leida a phpsessid y la recomendación de Cluster y modorro va bien. Respecto al ejemplo de ESPOSO y ESPOSA esta bien planteado pensando en los café-internet. Asi que te recomiendo mejor usar phpsessid de esta forma es una sesión para cada usuario y puedes hacer que expire determinado tiempo sin afectar a otros usuarios. Saludos
__________________
Hospedaje Web al mejor costo!
  #22 (permalink)  
Antiguo 18/11/2006, 21:22
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Pregunta no funciona...

mmm... apesar de seguir los pasos que me dijiste no me funciona ... esta es la tabla_ips creada en mi MySql.

Código HTML:
-- 
-- Table structure for table `tabla_ips`
-- 

CREATE TABLE `tabla_ips` (
  `ID` int(10) NOT NULL auto_increment,
  `ip` varchar(25) character set utf8 collate utf8_unicode_ci NOT NULL default '0',
  `idencuesta` int(5) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

-- 
-- Dumping data for table `tabla_ips`
-- 
__________________
Adios ...!!!!
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:00.