¿Variables temporales?

Xav0

Muy buenas y feliz año 2006 a todos :).
Bueno tengo una duda, tengo una galeria de imagenes, dentro de ella puedes votar a cualquier foto, pero claro... esa foto la puedes votar infinitas veces al dia por ejemplo...
Yo e pensado:

  • Guardar en una tabla los usuarios que han votado ese dia, y a las 24H borrarlos... pero claro eso supone que yo, cada dia, los borre...

Hay alguna otra solucion que sea algo temporal que al cabo de 24h se borren?

Las variables de sesiones se borran si cierran ventana y vuelven a entrar... asi que es muy facil burlarlas.

Gracias a todos de antemano!

BlisZ

guarda las IP y cada vez q alguien entre a la pagina haz q compruebe si han pasado 24h y si es asi que borre

B

Guarda en un campo de la tabla la hora a la que votó, y comprueba con el siguiente voto si han pasado 606024 segundos desde ese momento.

PD: No entiendo la relación del título con el post xD

Xav0

Es verdad, no había caido... puedo guardar la fecha (02/01/2006) y hacer un if que si la fecha es = que la de hoy... denegar y sino borrar...

Gracias ;)

RedHat

$date = VARIABLE TIME
$today = time();

if($date == $today){
echo "Ya has votado"
}else{

ejecutas el query.

}

erdanblo

o cookies... la creas para que se borren a las 24 horas y ya esta.

En este caso puede que sea más efectivo, aunque quien no las tenga activada podrá botar todas las veces que quieras..., aunque bien pensado, con la ip, casi todas son dinámicas y con apagar el router/modem ya tienes ip nueva.

Xav0

Gracias a todos.

Al final lo que hice es...
Cuando uno vota, en la base de datos se guarda la fecha en que voto el usuario (logeado), entonces a la hora de votar de nuevo, mira si ese campo es = a date(). Si es igual se queja, sino, vota y guarda en el campo la fecha del voto.

Saludos! :)

BlasterN

la forma de hacer un borrado "automático" es poner unos simples IFs al principio de un script que se incluye siempre.
Algo asi como update.php.

// por poner y que no sirve el códgo.

$lastupdate //(día) definido por ejemplo en un txt o una base de datos.

if( $diaactual > $lastupdate || ( $lastupdate>1 && $diaactual==1))
{
//actualizas la base de datos o lo que sea.
}

con esto se actualiza la base de datos cada 24 horas.

La verdadera forma de hacer estas cosas es hacerlo con un CGI que ejecute un PHP cada 24horas, así se ahorran recursos en la máquina si es que estas limitado...

see ya!

Y

En vez de estar comprobando y demás, es mucho más rápido, eficiente y cómodo hacer que el mysql (por general cualquier base de datos sql) impida la introducción de registros repetidos.

Imaginemos la siguiente estructura de una tabla:

id_usuario //del usuario a votar
id_foto //de la foto a ser votada
fecha_voto //la fecha del día que se vota (sin la hora)
.
. //demás información que quieras meterle
.

creamos unas key

key(id_usuario)
key(id_foto)
key(fecha_voto)
.
.
.
.
y a continuación un únique con estos datos:

unique(id_usuario,id_foto,fecha_voto)

con esto, lo que ocurre, es que, el servidor de sql va a impedir que metas un registro nuevo con el mismo usuario, foto y fecha. Por lo tanto, si el mismo usuario quiere votar la misma foto, hasta el día siguiente no podrá.

Al únique le puedes poner más campos, pero será más restrictivo, piensa que con estos tres campos ya obligas la votación al día siguiente.

De esta manera, por mucho que intentes insertar un registro con los tres (como minimo) campos iguales en contenido, mysql lo impedirá, ahorrando un huevo de recursos. Puesto que usar los condicionales if consumen más recursos al ser lenguajes interpretados que poner restricciones al sql, que trabaja en binario.

Así no hay que etar comprobando nada, solamente un insert y punto.

Luego, para saber cuantos votos a recibido tal foto, simplemente con un count: select count(*) from votaciones where id_foto=23; el valor resultante es el numero de votos recibidos por dicha foto.

Xav0

Gracias a todos :)

PD: rs.recordcount :)

Usuarios habituales