Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/02/2013, 19:46
Avatar de catpaw
catpaw
 
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
registrar accesos al sistema, me duplica registros

necesito registrar los accesos al sistema

guardar la ip, el nombre de usuario, nombre completo y la fecha, para esto tengo la siguiente tabla

t_accesos
-------------
id_acceso
ip_acceso
fecha_accesp
nom_user
nombre

las condiciones de este proceso serian:

- si la ip no esta en la tabla haga el insert llenando todos los campos de la tabla
- si la ip esta registrada, compare el nom_user
-- si el nom_user se encuentra en la tabla solo que actualice la fecha_accesp
-- si el nom_user no es el mismo (aunque la ip sea la misma) inserte en un campo aparte

la idea es que puedan entrar diferentes usuarios desde la misma maquina (misma ip) y que se registren sus accesos 1 sola vez, si vuelven a entrar solo que se actualice su fecha de acceso (osea las ips podrian repetirse pero los nom_user no deberian repetirse)

Por lo que tengo el siguiente codigo:

al momento de loguearse, despues que se ha comprado el usuario y su contraseña pongo:
Código PHP:
$ip $_SERVER['REMOTE_ADDR']; //tomo la ip que hace la peticion
$existe mysql_num_rows(mysql_query("select ip_acceso from t_accesos where ip_acceso='$ip'")); //consulto si hay almenos una ip igual a la que hace la peticion
if($existe!="0"){ //si la ip esta registrada
    
$cons mysql_query("select * from t_accesos where ip_acceso='$ip'") or die(mysql_error());
    
$ban "0";
    while(
$reg mysql_fetch_array($cons,MYSQL_ASSOC)){ //hago el ciclo que recorre las ips que sean las mismas que la que hace la peticion
        
$ip_existe $reg['ip_acceso']; //guardo en variable la ip registrada en la bd
        
$id_existe $reg['id_acceso']; //guardo en variable el id de la ip registrada en la bd
        
$nom_user_existe $reg['nom_user']; //guardo en variable el nom_user (nombre de usuario) de la ip registrada en la bd
        
if($ip_existe==$ip){ //pregunto si la ip registrada en la bd y la que hace la peticion es la misma (creo que esta condicion ya no tiene mucho caso)
            
if($nom_user_existe==$BD_nom_user){ //si los nombres de usuario coinciden (el de la bd y el del que se esta logueando) hago el update solo de la fecha de acceso
                
$sql_update "update t_accesos set fecha_acceso=NOW() where ip_acceso='$ip' and nom_user='$BD_nom_user'";
                
mysql_query($sql_update) or die("Problemas al ejecutar update SQL1 ".mysql_error());
                
$ban "1";//tuve que hacer esta bandera porque aunque ya habia un registro igual entraba al update y al insert, entonces actualizaba y volvia insertar el mismo registro
            
}
            else{ 
//entonces si la bandera ya habia pasado por el update ya no era necesario este insert
                
if($ban != "1"){
                    
$sql_insert "insert into t_accesos(ip_acceso, fecha_acceso, nom_user, nombre) values('$ip', NOW(), '$BD_nom_user', '$BD_nombre')";
                    
mysql_query($sql_insert) or die("Problemas al insertar SQL1 ".mysql_error());
                }
            }
        }
    }

else{ 
//si la ip no esta registrada entonces inserta el nuevo registro
    
$sql_insert "insert into t_accesos(ip_acceso, fecha_acceso, nom_user, nombre) values('$ip', NOW(), '$BD_nom_user', '$BD_nombre')";
    
mysql_query($sql_insert) or die("Problemas al insertar SQL1 ".mysql_error());

pareceria que ya funcina pero me sigue duplicando registros, ahora parece que si ya esta el registro por ejemplo:

Código:
id_acceso	1
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	fuken
nombre		fukensio perez


id_acceso	2
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez
y quisiera volver a entrar trollensio lopez, lo que hace es actualizar el que ya esta y agregar otro y queda esto:

Código:
id_acceso	1
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	fuken
nombre		fukensio perez


id_acceso	2
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez

id_acceso	3
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez
y si quisiera trollensio volver a entrar, actualizaria esos dos y agregaria otro:


Código:
id_acceso	1
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	fuken
nombre		fukensio perez


id_acceso	2
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez

id_acceso	3
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez

id_acceso	4
ip_acceso	10.16.1.123
fecha_acceso	21-02-2013
nom_user	trollen
nombre		trollensio lopez
peroo si ahora fuera fukencio el que entrara, solo le actualiza la fecha

porque se supone que es el primer registro, entonces en el ciclo es la primer coincidencia y hace el update y por la bandera ya no hace el insert.

segun yo como que me hace falta otra bandera, pero ya no veo por donde y con que condicion podria ser??