elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Ayuda] Comprobar si usuario voto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Comprobar si usuario voto  (Leído 5,286 veces)
wirelesswifi

Desconectado Desconectado

Mensajes: 128



Ver Perfil WWW
[Ayuda] Comprobar si usuario voto
« en: 30 Octubre 2010, 00:39 am »

Buenas, tengo este codigo:

Código:
	//Comprobar si usuario voto.
$ip = $_SERVER['REMOTE_ADDR'];

if(mysql_query("SELECT ip FROM noticias WHERE id LIKE '%$ip%'")){
    
echo "Gracias por votar.";

}else{
    
echo "Usted ya ha votado.";  
}

Ok, cuando pulso el boton Votar va a votar.php donde tengo el codigo de arriba, luego me sale:

Gracias por votar.

Todo bien hay.

Pero cuando pulso de nuevo Votar sigue votando y sumando votos en la id de la noticia.

Ya registra la IP en la id de la noticia que es IP el campo.

Pero sigue votando cuando pulso Votar, que estara mal en el codigo de arriba?

Espero me ayuden

Saludos...


« Última modificación: 30 Octubre 2010, 01:39 am por wirelesswifi » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #1 en: 30 Octubre 2010, 02:39 am »

Ando un poco borrachín, así que puede ser una estupidez lo que voy a poner, pero...

Se supone qué el código que tienes hace lo siguiente, Si se realiza correctamente la sentencia SQL, entonces mostrar 'Gracias por votar.' de lo contrario mostrar 'Usted ya ha votado.'

Observaciones:
1. No veo donde se realiza el ingreso de la dirección IP a la base de datos (Clausula INSERT)
2. Considero que la QUERY debería ser así,
Código
  1. $sSQL = "SELECT ip FROM noticias WHERE id = '".$ip."'";


« Última modificación: 30 Octubre 2010, 02:41 am por Shell Root » En línea

Te vendería mi talento por poder dormir tranquilo.
Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #2 en: 30 Octubre 2010, 02:52 am »

usuario sin login? es tan efectivo como usar una cookie xD
En línea

Ojo por ojo, y el mundo acabará ciego.
[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #3 en: 30 Octubre 2010, 03:44 am »

En todo casi si lo que queres evitar es que una misma ip vote dos veces podes hacer:

Código
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $result = mysql_query("SELECT ip FROM noticias WHERE id='".$ip."' LIMIT 1");
  3. if(!mysql_num_rows($result)){
  4.   echo "Gracias por votar.";
  5. }else{
  6.    echo "Usted ya ha votado.";  
  7. }
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
wirelesswifi

Desconectado Desconectado

Mensajes: 128



Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #4 en: 30 Octubre 2010, 04:20 am »

usuario sin login? es tan efectivo como usar una cookie xD


Como seria por cookie Nakp

Gracias Shell Root y unsigned, lo que pasa es que las ips las guardo por comas.

Un ejemplo:

190.265.157.154,190.657.12.647 y asi por cada noticia. No por row

Gracias igual

Saludos...
En línea

tragantras


Desconectado Desconectado

Mensajes: 465


Ver Perfil
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #5 en: 30 Octubre 2010, 12:17 pm »

puedes hacer un select de las ips asociadas a la noticia, luego, haces un explode() según las comas (,) y con un foreach recorres el array buscando la ip!

o directamente haces el select de las ips asociadas a la noticia y buscas la subcadena ip dentro de la ristra de ips con strstr()

de todas formas, la logica if-else que has seguido es incorrecta, sería todo lo contrario, además select devuelve false cuando se ha producido un error, deberías pasarselo a mysql_num_rows como apuntaban por ahi arriba

el uso de cookies yo no lo pondría, pueden borrar la cookie y votar mil veces, o directamente no aceptar las cookies y hacer magia...
En línea

Colaboraciones:
1 2
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #6 en: 30 Octubre 2010, 15:47 pm »

..., lo que pasa es que las ips las guardo por comas.
What the fuck?. Entonces para qué el motor de base de datos?
En línea

Te vendería mi talento por poder dormir tranquilo.
wirelesswifi

Desconectado Desconectado

Mensajes: 128



Ver Perfil WWW
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #7 en: 30 Octubre 2010, 16:53 pm »

puedes hacer un select de las ips asociadas a la noticia, luego, haces un explode() según las comas (,) y con un foreach recorres el array buscando la ip!

o directamente haces el select de las ips asociadas a la noticia y buscas la subcadena ip dentro de la ristra de ips con strstr()

de todas formas, la logica if-else que has seguido es incorrecta, sería todo lo contrario, además select devuelve false cuando se ha producido un error, deberías pasarselo a mysql_num_rows como apuntaban por ahi arriba

el uso de cookies yo no lo pondría, pueden borrar la cookie y votar mil veces, o directamente no aceptar las cookies y hacer magia...

Si, es mejor por mysql_num_rows entonces crearia una tabla llamada votos con los campos id_noticia e IP.

Luego en el PHP de votos guardaria la IP de cada noticia en el campo IP y la ID de la noticia.

Todo bien, pero como haria para mostrar los votos en cada noticia los que ya votaron por mysql_num_rows?

Gracias por la ayuda

Disculpa haberlos molestado

Saludos.
En línea

juancho77


Desconectado Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: [Ayuda] Comprobar si usuario voto
« Respuesta #8 en: 2 Noviembre 2010, 05:42 am »

Sin ofender, pero estas tratando de empezar a manejar sin andar en bici primero.

Una solución bastante elegante seria decir:
Una noticia tiene cero o mas votos. Un usuario puede votar cero o mas noticias, pero cada noticia una sola vez.
Entonces agarras tu base de datos y creas una tabla que se llame news_vote o algo asi, que tenga campos ID, IP, ID_NOTICIA.
La sentencia SQL te queda algo asi:

"SELECT * FROM NEWS_VOTES WHERE IP=ip del usuario AND ID_NOTICIA=identificador de la noticia que se quiere votar"
(hace mucho que no uso raw sql, seguro que a lo de arriba le faltan comillas y eso)

Esa sentencia te devuelve un ResultSet, un objeto con las filas de resultado.
La funcion mysql_num_rows() lo unico que hace es contar el numero de resultados obtenidos. Lo que vos tenes que hacer es decir

si mysql_num_rows()>0 entonces YA HA VOTADO, sino GRACIAS POR VOTAR.

Eso de anotar todas las ips separadas por coma es imposible de mantener sencillo y una implementacion muy mala. Creeme que una tabla con 100 filas o una con 1000 se procesan casi en el mismo tiempo.

Tanto la implementacion con Cookies como usando la variable REMOTE_ADDR son malas por el hecho que son "fakeables". Todo es fakeable digamos, pero tener un user system es mucho mas fuerte que usar ip. Ademas, gran parte de los usuarios usan ips aleatorias dinamicas asi que te estarian engañando sinb darse cuenta.

Para mostrar los votos de cada noticia no usas mysql_num_rows()!!!! Haces un select where id_noticia=noticia!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Un solo voto por usuario en PHP « 1 2 3 »
PHP
wirelesswifi 23 11,214 Último mensaje 8 Mayo 2011, 23:32 pm
por wirelesswifi
Una web ciudadana ayuda a los electores a decidir su voto
Noticias
wolfbcn 1 2,394 Último mensaje 12 Mayo 2011, 23:58 pm
por k1k0_o
[BASH] Comprobar grupo de un usuario
Scripting
ccrunch 2 4,126 Último mensaje 3 Marzo 2013, 18:49 pm
por ccrunch
[C] Ayuda Comprobar cadena que cambia
Programación C/C++
Goddamn 5 2,431 Último mensaje 24 Agosto 2016, 11:53 am
por Goddamn
[Ayuda] Comprobar Símbolos en un string.
.NET (C#, VB.NET, ASP)
**Aincrad** 2 2,319 Último mensaje 4 Noviembre 2019, 16:58 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines