Foros del Web » Programando para Internet » PHP »

Encuesta con IP

Estas en el tema de Encuesta con IP en el foro de PHP en Foros del Web. Estimados Junto con saludarles les cuento mi problema Esty desarrollando una encuesta con HTML, PHP Y MYSQL y quiero que el usuario vote una sola ...
  #1 (permalink)  
Antiguo 19/08/2010, 09:02
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Encuesta con IP

Estimados

Junto con saludarles les cuento mi problema

Esty desarrollando una encuesta con HTML, PHP Y MYSQL y quiero que el usuario vote una sola vez desde el PC.

Tengo dos tablas en mysql: Una tiene la encuesta y la otra el identificador de la encuesta y la ip, de tipo INT según lo que he leido.

El recuento de votos lo hace bien, pero la IP no la graba en la segunda tabla, no se si la tabla debe estar vacia o tener algo, la idea es que se vayan guardando todas las ip y cuando alguien vaya a votar se busque si para esa encuesta esa IP ya voto.

Este es parte del codigo que he ido modificando si alguien me puede echar una manito, coloque comentarios para guiar:

<?
//recibo el voto
$voto = $_POST["voto"];

//recibo el id de la encuesta
$encid = $_POST["encid"];

//obtiene la ip del usuario
$_SERVER['REMOTE_ADDR'];
$ip = $REMOTE_ADDR;
//Estoy usando este servidor de pruebas
$servidor="mysql16.000webhost.com";

$usuario="*******";
$password="*********";
$base="********";
$SQLid = mysql_connect($servidor,$usuario,$password);
mysql_select_db($base,$SQLid);
$SQLquery2 = "SELECT id, encip FROM direccion WHERE id='$encid'";
$SQLresult2 = mysql_query($SQLquery2,$SQLid) or die(mysql_error());
$SQLrow2 = mysql_fetch_array($SQLresult2);

//Aqui quiero preguntar si la IP ya existe, ESTARA BIEN?
if(@mysql_fetch_array($SQLresult2))
?>
<strong>USTED YA VOTO, SU IP ES: <? echo $ip ?> </strong>
<?

} else{
///USUARIO PUEDE VOTAR.

//aqui quiero insertar la IP, quieor usas funcion "inet_aton" para pasar IP a INT
$SQLquery3 = "INSERT INTO 'direccion' ('id', 'encip') VALUES('$encid','inet_aton('.$ip.')')";

//Esta bien usar $SQLResult3 y SQLrow3, o puedo usar las anteriores?
$SQLresult3 = mysql_query($SQLquery3,$SQLid);
$SQLrow3 = @mysql_fetch_array($SQLresult3);
?>

//Uso una tabla para ver lo que esta almacenando, pero no muestra nada.
<table width="50%" border="1">
<tr><td width="200"><? echo $SQLrow3["id"]?></td>
</tr>
<tr>
<td width="200"><? $SQLrow3["encip"]?></td>
</tr>
<tr>
<td width="200"><? $ip ?></td>
</tr>
</table>
<?

//ACTUALIZO LA TABLA DE LOS VOTOS , ESTO LO HACE BIEN!!
$SQLquery = "UPDATE encuesta SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
$SQLresult = mysql_query($SQLquery,$SQLid);
$SQLquery = "SELECT * FROM encuesta where encid=$encid";
$SQLresult = mysql_query($SQLquery,$SQLid);
$SQLrow = mysql_fetch_array($SQLresult);
?>

Lo que viene de codigo esta bien!!
  #2 (permalink)  
Antiguo 19/08/2010, 09:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 6 meses
Puntos: 2534
Respuesta: Encuesta con IP

todo debes hacerlo desde la consulta...
Cita:
WHERE columna_ip = 'x.x.x.x'
ahora, esto no es lo correcto:
Código PHP:
// MAL
$_SERVER['REMOTE_ADDR'];
$ip $REMOTE_ADDR

// BIEN
$ip $_SERVER['REMOTE_ADDR']; 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/08/2010, 09:19
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 8 meses
Puntos: 177
Respuesta: Encuesta con IP

que es esto 'inet_aton('.$ip.')'

aca

$SQLquery3 = "INSERT INTO 'direccion' ('id', 'encip') VALUES('$encid','inet_aton('.$ip.')')";
__________________
la la la
  #4 (permalink)  
Antiguo 19/08/2010, 09:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 6 meses
Puntos: 2534
Respuesta: Encuesta con IP

Cita:
Iniciado por truman_truman Ver Mensaje
que es esto 'inet_aton('.$ip.')'

aca

$SQLquery3 = "INSERT INTO 'direccion' ('id', 'encip') VALUES('$encid','inet_aton('.$ip.')')";
Google: MySQL INET_ATON
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 19/08/2010, 09:25
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Encuesta con IP

Esto:

$_SERVER['REMOTE_ADDR'];
$ip = $REMOTE_ADDR;

igual me funciona porque despliego la variable $ip por pantalla y me muestra la direccion correcta

Pero esto:

WHERE columna_ip = 'x.x.x.x'

No lo entiendo.

Podrias detallarlo un poco mas si no es mucha la molestia,
Estoy hace poco trabajando con php y Mysql

De antemano muchas gracias.
  #6 (permalink)  
Antiguo 19/08/2010, 09:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 6 meses
Puntos: 2534
Respuesta: Encuesta con IP

si mira...

en tu consulta para verificar el voto, lo haces tan solo por ID... cuando también, en la misma consulta puedes especificar el IP/INT del cliente...
Código PHP:
$sql "SELECT id, encip FROM direccion WHERE id='$encid' AND encip = '$ip'"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 19/08/2010, 09:30
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Encuesta con IP

pateketrueke

Esa funcion de MySQL lei por ahi que permite transformar una direccion ip en un entero, pero no se si la puedo aplicar dentro de INSERT y de esa forma.

Hay otra que es: INET_NTOA hace el proceso inverso, alguien me podría mostrar como hacer las transformaciones?

Eso es uno de los errores, creo yo!!
  #8 (permalink)  
Antiguo 19/08/2010, 09:33
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Encuesta con IP

Ok, entiendo tengo el diseño para varias encuesta y el id y el IP permiten saber si el usuario voto ya en la encuesta indicada por id.

Voy a partir por eso

Gracias
  #9 (permalink)  
Antiguo 19/08/2010, 10:12
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Encuesta con IP

Tengo este codigo:

$SQLquery3 = "INSERT INTO direccion (id,encip) VALUES('$encid','INET_ATON('.$ip.')')";
$SQLresult3 = mysql_query($SQLquery3,$SQLid);
$SQLrow3 = mysql_fetch_array($SQLresult3);

Me da el siguiente Warning:

mysql_fetch_array(): supplied argument is not a valid MySQL result resource.
  #10 (permalink)  
Antiguo 19/08/2010, 10:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 6 meses
Puntos: 2534
Respuesta: Encuesta con IP

debes aprender a depurar tus consultas:
Código PHP:
mysql_query(/* tu consulta */) or die(mysql_error()); 
así, cualquier error que ocurra te lo muestra...

además... se nota que concatenas la variable $ip, pero no tiene sentido... deberías reflexionar eso!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 19/08/2010, 19:38
Lba
 
Fecha de Ingreso: febrero-2004
Ubicación: Concepción
Mensajes: 156
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Encuesta con IP

Estimado pateketrueke y demases

Logre grabar la ip en la tabla, pero en formato varchar, deseo grabarla como INT, por ahorro de espacio. Era una cosa de diseño de la base de datos, a la tabla le había puesto como clave el "id" de la encuesta y como era primaria no dejaba grabar otro registro con esa clave. Se puede dejar como Indice?

El problema ahora es No permitir votar si esa IP existe ya, para esa encuesta.

Cuando tenga algo les envío novedades y si se me complica les pediré su ayuda.

Gracias

Etiquetas: encuesta, ip
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 01:06.