Foros del Web » Programando para Internet » PHP »

Restringir votos por IP

Estas en el tema de Restringir votos por IP en el foro de PHP en Foros del Web. Hola a todos, mi pregunta es la siguiente: ¿como hago para restringir los los votos por ip quiero que los visitantes puedan votar una sola ...
  #1 (permalink)  
Antiguo 08/12/2005, 11:12
Avatar de lrunge  
Fecha de Ingreso: agosto-2005
Ubicación: En algun lugar de Caracas
Mensajes: 165
Antigüedad: 18 años, 9 meses
Puntos: 4
Restringir votos por IP

Hola a todos, mi pregunta es la siguiente: ¿como hago para restringir los los votos por ip

quiero que los visitantes puedan votar una sola vez.

mi spagina son las siguientes:

index.php
Código PHP:
<? 
$servidor
="localhost"
$usuario="root"
$password="pass"
$base="base_de_datos"
$SQLid mysql_connect($servidor,$usuario,$password); 
mysql_select_db($base,$SQLid); 
$SQLquery "SELECT * FROM encuesta order by encid desc"
$SQLresult mysql_query($SQLquery,$SQLid); 
$SQLrow mysql_fetch_array($SQLresult); 
?> 
<form name="form1" method="post" action="resultado.php"> 
  <div align="center"><font face="Arial, Helvetica, sans-serif">
    <input type=hidden name="encid" value="<? echo $SQLrow[0]?>"> 
    <font size="2">Encuesta valida a partir del 08/12/2005</font></font>
  </div>
  <table width="270" border="0" align="center" cellpadding="0" cellspacing="0"> 
<tr> 
   <td bgcolor="#006600"><div align="center"><font color="#FFFFFF" size="1" face="Arial, Helvetica, sans-serif">::::::::::::::::::::::::::::::::::::::</font></div></td> 
</tr> 
<tr> 
   <td bgcolor="#FFFFCC"> <div align="center"><font size="2" face="Arial, Helvetica, sans-serif"><strong> 
   <? echo $SQLrow[1]?> 
   </strong></font></div></td> 
</tr> 
<tr> 
    <td bgcolor="#FFFFCC"> <p> <font size="2" face="Arial, Helvetica, sans-serif"> 
    <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">
    </label>
    <? echo $SQLrow[5]?>    <br>
    <input type="radio" name="voto" value="5">
    <label>    <? echo $SQLrow[6]?></label>
    <br>
    <label>
    <input type="radio" name="voto" value="6">
    <? echo $SQLrow[7]?></label>
    <br>
    <label>
    <input type="radio" name="voto" value="7">
    <? echo $SQLrow[8]?></label>
    <br>
    <label>
    <input type="radio" name="voto" value="8">
    <? echo $SQLrow[9]?></label>
    <br> 
    <label>    </label> 
    <label>    </label>
    </font></p>
      <p><font size="2" face="Arial, Helvetica, sans-serif"><br> 
      </font></p></td> 
</tr> 
<tr> 
    <td bgcolor="#FFFFCC"> <div align="center"> 
      <font face="Arial, Helvetica, sans-serif">
      <input type="submit" name="Submit" value="Aceptar"> 
      </font></div></td> 
</tr> 
</table> 
<div align="left"></div>
</form>
resultado.php

Código PHP:
<? 
//recibo el voto 
$voto $_POST["voto"]; 
//recibo el id de la encuesta 
$encid $_POST["encid"]; 

$servidor="localhost"
$usuario="root"
$password="pass"
$base="base_de_datos"
$SQLid mysql_connect($servidor,$usuario,$password); 
mysql_select_db($base,$SQLid); 
$SQLquery "UPDATE encuesta SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid"
$SQLresult mysql_query($SQLquery,$SQLid); 
$SQLquery "SELECT * FROM mamasita where encid=$encid"
$SQLresult mysql_query($SQLquery,$SQLid); 
$SQLrow mysql_fetch_array($SQLresult); 
?> 
<P ALIGN="left"><font size="4" face="Arial, Helvetica, sans-serif"><strong><em>Asi van las votaciones hasta el momento </em></strong></font></P> 
<P ALIGN="left"><font face="Arial, Helvetica, sans-serif"><strong><font size="2"> 
<? 
echo $SQLrow["encprg"
?> 
</font></strong></font></P> 
<div align="left">
  <TABLE ALIGN="left" WIDTH="442" BORDER="1" CELLSPACING="1" CELLPADDING="1"> 
    <!--DWLayoutTable--> 
    <TR> 
    <TD ALIGN="left" WIDTH="35%"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt1"]?> 
    </font>
      <div align="left"></div></TD> 
    <TD width="49%"><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra1.gif"></font></TD> 
    <TD ALIGN="center" WIDTH="16%"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval1"]?> votos</font></TD> 
    </TR> 
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt2"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval2"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra2.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval2"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt3"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval3"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra3.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval3"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt4"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval4"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra4.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval4"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt5"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval5"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra1.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval5"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt6"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><img height="5" width="<? echo $SQLrow["encval6"]*100/$SQLrow["enctot"]?>%" src="imagenes/barra2.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval6"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt7"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval7"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra3.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval7"]?> votos</font></TD>
    </TR>
    <TR>
      <TD ALIGN="left"><font size="3" face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encrpt8"]?> </font>
          <div align="left"></div></TD>
      <TD><font face="Arial, Helvetica, sans-serif"><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval8"]*100/$SQLrow["enctot"]?>%" SRC="imagenes/barra4.gif"></font></TD>
      <TD ALIGN="center"><font face="Arial, Helvetica, sans-serif"><? echo $SQLrow["encval8"]?> votos</font></TD>
    </TR>
    <TR>
      <TD colspan="3" ALIGN="left"><div align="center"><font face="Arial, Helvetica, sans-serif">Total de votos emitidos: <? echo $SQLrow["enctot"]?></font></div></TD>
    </TR> 
  </TABLE>
</div>

<P ALIGN="left">&nbsp;</P>
y esta es mi BBDD MySQL:

Código PHP:
CREATE TABLE `encuesta` (
  `
encidint(11NOT NULL auto_increment,
  `
encprgvarchar(50) default NULL,
  `
encrpt1varchar(50) default NULL,
  `
encrpt2varchar(50) default NULL,
  `
encrpt3varchar(50) default NULL,
  `
encrpt4varchar(50) default NULL,
  `
encrpt5varchar(50) default NULL,
  `
encrpt6varchar(50) default NULL,
  `
encrpt7varchar(50) default NULL,
  `
encrpt8varchar(50) default NULL,
  `
encval1int(11NOT NULL default '0',
  `
encval2int(11NOT NULL default '0',
  `
encval3int(11NOT NULL default '0',
  `
encval4int(11NOT NULL default '0',
  `
encval5int(11NOT NULL default '0',
  `
encval6int(11NOT NULL default '0',
  `
encval7int(11NOT NULL default '0',
  `
encval8int(11NOT NULL default '0',
  `
enctotint(11NOT NULL default '0',
  
PRIMARY KEY  (`encid`)
TYPE=MyISAM AUTO_INCREMENT=
como hago para restringir los votos mediante la identificacion del IP del visitante?
  #2 (permalink)  
Antiguo 08/12/2005, 11:26
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
cuando alguien vota, escrives su IP en un archivo. Luego cuando alguien quiera votar, revisas que su ip no este en este archivo, si no esta lo dejas votar, si esta rechazas el voto.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #3 (permalink)  
Antiguo 08/12/2005, 12:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Ya que usas Base de datos .. se trata de que tengas una tabla más en tu BD .. donde registres la IP del cliente:

Con:
$_SERVER['REMOTE_ADDR']

Obtienes la IP de tu cliente (el que está visitando o intentando votar).

La registras en tu BD si no existe .. para eso:

Código PHP:
<?
// conectas a tu BD .. etc ...

// cuantas el n° de ocurrencias de la IP del cliente ..
$sql="SELECT COUNT(*) WHERE ip='".$_SERVER['REMOTE_ADDR']."
'"
;
$result=mysql_query($sql) or die (mysql_error());
// Si es 0 .. no existe .. la insertas en tu BD y dejas votar ...
if (mysql_result($result,0) == 0){
$sql="INSERT INTO ips (ip) VALUES ('".$_SERVER['REMOTE_ADDR']."')";
mysql_query($sql);

// Aquí iría tu actual código de registro de la votación.

} else {
  
// Si existe la IP .. sueltas el mensaje de erro Y no dejas votar.
 
echo "Su IP: ".$_SERVER['REMOTE_ADDR']." ya realizó una votación.";
}
?>
Y la tabla sería algo tipo:
Código PHP:
CREATE TABLE `ips` ( 
  `
ipvarchar(11) default NOT NULL
  
PRIMARY KEY  (`ip`) 
TYPE=MyISAM
Podrías registrar en que fecha votó tal IP, ... así podrías quitar el desbloqueo a dicha IP por tiempo.

Recuerda también y no discrimienes a las personas que votan pero su conexión pasa por un proxy (tomandos todos la misma IP) .. com proxys de empresas .. o de algunos ISP's que pasan a todos sus usuarios por una misma IP .. Eso te va a dar problemas. Realmente lo único seguro para evitar que vote una persona dos veces es obligar a un registro (con su usuario/password) y marcar a ese usuario cuando vote.

Un saludo,
  #4 (permalink)  
Antiguo 05/10/2006, 16:14
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Por favor, podría explicar esto con más detalle?

Si yo quiero que en vez de una IP, compruebe lo mismo con
$usuario = $userdata['username'];

que debería sustituir?

En mi base de datos, se supone que debería guardar el voto en la id correspondiente, pero no se cómo ponerlo...

$sql="INSERT INTO tabla (ip) VALUES ('".$_SERVER['REMOTE_ADDR'].") ";

y donde se supone que debería poner WHERE id='".$_GET[id]."' ?


Muchas gracias


Saludos cordiales
  #5 (permalink)  
Antiguo 06/10/2006, 04:52
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Pues, haber... he intentado hacerlo con la IP, de la siguiente forma:

Código PHP:
<? @mysql_connect('***','****','*****')or die ('Ha fallado la conexión: '.mysql_error()); 
@
mysql_select_db('IP')or die ('Error al seleccionar la BD: '.mysql_error()); 
$SSQL_=mysql_query("SELECT * FROM IP WHERE id='".$_GET[id]."'")or die(mysql_error()); 
$array_d=mysql_fetch_array($SSQL_); 
$valoracioN_total=@round($array_d[ptos]/$array_d[num_votos],2); 
$sql="SELECT COUNT(*) FROM IP WHERE ip='".$_SERVER['REMOTE_ADDR']."'"
$result=mysql_query($sql) or die (mysql_error());


if (
mysql_result($result,0) == 0){ 
if(isset(
$_POST[valor])){ 
 
$sql="INSERT INTO IP (ip) VALUES ('".$_SERVER['REMOTE_ADDR'].") "
mysql_query($sql); 
   if(
mysql_num_rows($SSQL_)==0){ 
   @
mysql_query("INSERT INTO IP VALUES('".$_GET[id]."','1','".$_POST[valor]."')")or die ('ERROR AL INSERTAR REGISTRO: '.mysql_error()); 
   }else{ 
   @
mysql_query("UPDATE IP SET num_votos=num_votos+1,ptos=ptos+".$_POST[valor]." WHERE id='".$_GET[id]."'")or die ('ERROR AL MODIFICAR REGISTRO: '.mysql_error()); 
   } 
   echo 
"Gracias por su voto<br><br>";


} else { 
  
// Si existe la IP .. sueltas el mensaje de error Y no dejas votar. 
 
echo "Su IP: ".$_SERVER['REMOTE_ADDR']." ya realizó una votación."


if (
$array_d[num_votos]=='') {
$array_d[num_votos]='0';
}
echo 
'<strong>Valoración Media : '.$valoracioN_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($valoracioN_total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[num_votos]; 

    
?> 
<form action="<? echo "valoracion.php?id=$id";?>" method="post"> 
Nueva valoración: 
<select name="valor" id="valor"> 
<? for ($i=1$i<=10 $i++) echo '<option value="'.$i.'">'.$i.'</option>';?> 
</select> 
<input type="submit" value="Votar" name="boton_submit"> 
</form> <?
}
?>

Pero simplemente, no guarda IP ninguna, con lo cual te deja votar las veces que te de la gana...


Por favor, diganme cual es el posible error. Y que así guarde en la Id correspondiente, la IP del que votó.


Muchas gracias
Un cordial saludo
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 11:36.