Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] registrar accesos al sistema, me duplica registros

Estas en el tema de registrar accesos al sistema, me duplica registros en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 21/02/2013, 19:46
Avatar de 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??
  #2 (permalink)  
Antiguo 22/02/2013, 06:13
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 144
Antigüedad: 11 años, 7 meses
Puntos: 12
Respuesta: registrar accesos al sistema, me duplica registros

de donde sacas bd_name_user?

en ningun lado hace la consulta para obtener todos los usuarios del sistema?
  #3 (permalink)  
Antiguo 22/02/2013, 08:30
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: registrar accesos al sistema, me duplica registros

hola pablo_exeg

si te fijas antes del codigo dice:

Cita:
al momento de loguearse, despues que se ha comprado el usuario y su contraseña pongo:
* dice comprado pero quise decir comprobado

pense que no era necesario ponerlo, puse el codigo donde tengo mi duda, en fin de todos modos se los dejo, pero es que ahi no esta el problema que tengo

Código PHP:
Ver original
  1. $nom_user = $_POST['nom_user_login'];
  2. $contrasena = md5($_POST['password_login']);
  3.  
  4. $rs= mysql_query("SELECT * FROM t_usuarios WHERE nom_user='$nom_user'") or die('Error en la consulta'.mysql_error());
  5. $row = mysql_fetch_array($rs, MYSQL_ASSOC);
  6.                
  7. $BD_id_usuario=$row['id_usuario'];
  8. $BD_nom_user=$row['nom_user'];
  9. $BD_nombre=$row['nombre'];
  10. $BD_contrasena=$row['password'];
  11. $BD_nivel=$row['id_nivel'];
  12.  
  13. //comprobaciones
  14. if(){
  15. } else{
  16.         if(){
  17.        
  18.         } else{
  19.               //si el nombre de usuario y contraseña cumplen con las comprobaciones
  20.               //--->> El codigo que puse al principio
  21.               //despues registro sesiones
  22.               $_SESSION['id_usuario']= $BD_id_usuario;
  23.               $_SESSION['nombre']= $BD_nombre;
  24.               $_SESSION['nom_user']= $BD_nom_user;
  25.         }
  26. }

bueno es eso, no se que condicional puedo agregar para que no se me dupliquen los registros, por cada pasada en el ciclo while.
  #4 (permalink)  
Antiguo 22/02/2013, 13:08
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: registrar accesos al sistema, me duplica registros

Quisiera que aclararas lo siguiente:

Quieres que tu sistema cree registros cuando:

1. Entra un usuario que no ha sido registrado en la lista de accesos
2. El usuario ya existía, pero cambia de ip y por tanto se crea un nuevo registro.

Si es así, es relativamente simple:

Código PHP:
Ver original
  1. if(mysql_num_rows(mysql_query("select id_acceso from t_accesos where ip_acceso='$ip' and nom_user='$BD_nom_user' "))){//Si ya existe el usuario con la ip dada
  2.  
  3.       //actualizar
  4. }else{
  5.       //crear registro
  6. }
  #5 (permalink)  
Antiguo 22/02/2013, 13:20
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: registrar accesos al sistema, me duplica registros

Hola ocp001a

Es en funcion de la ip

1. Entra una ip que no ha sido registrada en la lista (insert)
2. Entra una ip que ya existia:
----- Mismo usuario (update)
----- Diferente usuario (insert)

De modo que queden ip repetidas con diferentes usuarios, pero no usuarios repetidos (con misma ip, osea registros duplicados)
  #6 (permalink)  
Antiguo 22/02/2013, 13:25
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: registrar accesos al sistema, me duplica registros

Es decir que si el usuario ya existe, pero entra con una ip diferente en vez de crear un nuevo registro ¿actualizas el registro previo?
  #7 (permalink)  
Antiguo 22/02/2013, 14:10
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: registrar accesos al sistema, me duplica registros

o.O

Si ya existe el usuario, pero la ip es diferente debe crear un nuevo registro

Se actualiza cuando el usuario ya existe y la ip es la misma

Creo que ambos enfoques (el tuyo (en funcion al usuario) el mio (en funcion a la ip)) terminan en resultados similares, llegando por caminos diferentes...

aunque me cuesta un poco verlo desde el enfoque del usuario
  #8 (permalink)  
Antiguo 22/02/2013, 14:17
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: registrar accesos al sistema, me duplica registros

Es que yo no lo enfoco por el usuario, simplemente preguntaba para aclarar.

Y con tu última aclaración, con el código que te puse debe funcionar, si le preguntas a la base de datos por ambos valores (ip y usuario) y ya existe actualizar, si no, crear nuevo registro.
  #9 (permalink)  
Antiguo 22/02/2013, 14:21
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: registrar accesos al sistema, me duplica registros

Si ya probe con tu ejemplo y hace lo que quiero

que supercomplicada me estaba dando, ufff ya estaba bloqueada supongo

muchas gracias ocp001a
  #10 (permalink)  
Antiguo 22/02/2013, 14:23
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: registrar accesos al sistema, me duplica registros

Suele pasar...

Etiquetas: mysql, registro, registros, select, sistema, sql, tabla, usuarios
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 17:59.