
11/09/2006, 15:19
|
 | | | Fecha de Ingreso: marzo-2005 Ubicación: madrid
Mensajes: 119
Antigüedad: 20 años Puntos: 0 | |
Creo q he dado con la solución pero no termina de funcionar y no se porq...
He tratado de hacer una funcion con la q antes de insertar un nuevo ip, compruebe antes si este existe ya en la bd, y si es asi , no lo actualiza y devuelve una variable. pero sencillamente no me hace caso...
Os paso el codigo porq necesito vuestra ayuda urgente, y os la agradezco muchisimo desde ya.
(he omitido en le codigo los detalles de la conexion, como imaginareis)
<?php
$IP2 = $REMOTE_ADDR;
class Usuariosenlinea
{
var $e_rror;
//Segundos para borrar de la base de datos a los usuarios inactivos 900 =15 min
var $segundos = 900;
var $ahora = 0;
//CONSTRUCTOR
function Usuariosenlinea() {
$this->recargar();
}
function cuantos() {
return $this->ahora;
}
function enlinea() {
if($this->ahora == 1) {
echo $this->ahora ." Usuario en linea";
}
else
{
echo $this->ahora ." Usuarios en linea";
}
}
function ipreal(){
if ($real_ip = getenv('HTTP_X_FORWARDED_FOR')){
$explode_real_ip = explode(",", $real_ip);
return trim($explode_real_ip[0]);
}
else
{
return getenv('REMOTE_ADDR');
}
}
function error(){
return $this->e_rror = mysql_error();
}
// esta es la funcion q me he inventado para comprobar si existe la ip, pero no va
function comprobar(){
$sql = "SELECT ip FROM usuariosenlinea WHERE ip='".$IP2."'";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result))
{
echo "<br>Error, ya votastes!<br>";
$sumavoto = -1;
}
else
{
echo "<br>Puedes votar!<br>";
$sumavoto = -1;
}
}
function recargar()
{
$tiempo_actual = time();
$tiempo_final = $tiempo_actual - $this->segundos;
$ip = $this->ipreal();
@mysql_connect($this->servidor, $this->usuario, $this->pass)
or die('Error al Intentar Conectar con la base de datos '.$this->error().'');
@mysql_select_db($this->basededatos)
or die('Error Seleccionando la base de datos '.$this->error().'');
$result = mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
or die('Error de lectura en la base de datos '.$this->error().'');
if(mysql_num_rows($result) == 0){
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
or die('Error al Insertar en la base de datos '.$this->error().'');
}
else
{
// aqui es donde llamo a mi función
$this->comprobar();
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
or die('Error al Insertar en la base de datos '.$this->error().'');
}
mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
or die('Error al intentar borrar en la base de datos '.$this->error().'');
$result = mysql_query("SELECT ip FROM $this->nombredb")
or die('Error de lectura en la base de datos '.$this->error().'');
$this->ahora = mysql_num_rows($result);
mysql_close();
}
}
?>
Espero vuestra ayuda
Por cierto xmistol, gracias por el aviso, no sabia q fuera obligatorio advertir, y menos cuando el registro de ips es temporal y se borra alos 15 minutos. menos mal q me has avisado! |