Foros del Web » Programando para Internet » PHP »

Funcion que me guarda registros duplicados

Estas en el tema de Funcion que me guarda registros duplicados en el foro de PHP en Foros del Web. Buenas tardes, Tengo una sencilla función la cual al hacer un "echo" de los registros me los muestra correctamente, pero es curioso pues al realizar ...
  #1 (permalink)  
Antiguo 16/12/2009, 13:09
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 2 meses
Puntos: 3
Pregunta Funcion que me guarda registros duplicados

Buenas tardes,

Tengo una sencilla función la cual al hacer un "echo" de los registros me los muestra correctamente, pero es curioso pues al realizar un insert dentro de la función, me los guarda duplicados en la tabla.

¿A qué se puede deber?

La función es esta:

Código PHP:
function f_autoriza($codigo_autor$tabla_asociada$descripcion){
$sql3 "select codsocio from t_socio";
    
$rs_socio = @mysql_query($sql3);
            
    if (@
mysql_num_rows($rs_socio) != 0){ 
            
$fecha_anyo date('Y');
        while (
$row = @mysql_fetch_array($rs_socio)){
//Compruebo si el registro seleccionado es distinto del usuario activo
if ($row['codsocio'] != $_SESSION['codigosocio']){
//Genero el código de autorización para el resto de socios
$micod genera_codigo(AUTORIZA_SOCIO$fecha_anyoLONGNUM);        

$sql4 "insert into t_autorizacion_socio (clave, fuente, aut, codsoc, ";
$sql4 $sql4."fch, vald, motv, autzd) ";
$sql4 $sql4."values ('$micod', '$codsoc', '$cod_aut', ";
$sql4 $sql4."'$row[cods]', '', 'AAA', ";
$sql4 $sql4."'', 'BBB')";
    @
mysql_query($sql4);
         }
}    
        
$valor 'V';            
    }else{
        
$valor 'F';
    }

@
mysql_free_result($rs_socio); //Libero recursos    
return $valor;

La función genera_codigo es esta:
Código PHP:
function genera_codigo($codhdr$codan$maxlg){
    
$codnum substr(microtime(), 2$maxlg);
    
$micodigo $codhdr.$codan.$codnum;    //Formo el valor a retornar
    
return $micodigo
¿Qué puede ocurrir para que me cree valores duplicados en la tabla? ¿Por cada bucle debo eliminar alguna memoria temporal que pueda estar dando este problema?

Agradezco sinceramente de antemano su ayuda. Gracias.
  #2 (permalink)  
Antiguo 16/12/2009, 13:11
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Funcion que me guarda registros duplicados

al realizar tu ciclo while seguramente en la consulta que haces a tu BD tenes dos registros y es por eso que el mysql_query() que se encuentra en tu código se realiza 2 veces...

proba solamente $row = @mysql_fetch_array($rs_socio) sin el while verás que se inserta unicamente 1 vez...

me comentas

Última edición por bacdavi; 16/12/2009 a las 13:12 Razón: Falto sugerencia de aplicación a la duda...
  #3 (permalink)  
Antiguo 16/12/2009, 13:47
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Funcion que me guarda registros duplicados

Hola,

He probado a poner sin el while y ahora me guarda 2 registros duplicados con el mismo código, es decir, me sigue duplicando...

¿Puede ser que las funciones y los insert sean incompatibles?

Simplemente quiero hacer lo siguiente:

1. Seleccionar todos los registros de una tabla.
2. Recorrer esa tabla y por cada iteración guardar el valor obtenido y otros valores en otra tabla.

La teoría dice que es correcto, pero en la práctica algo debe ser incompatible o estar mal porque me los guarda duplicados.

Última edición por rafaconpu; 16/12/2009 a las 13:53
  #4 (permalink)  
Antiguo 16/12/2009, 14:04
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Funcion que me guarda registros duplicados

Puede que el error esté cuando llamas a la función. ¿Puedes poner el código dónde lo haces? Quizá por alguna razón se esté llamando 2 veces a la función.
  #5 (permalink)  
Antiguo 16/12/2009, 14:29
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Funcion que me guarda registros duplicados

Proba así:

Código PHP:
function f_autoriza($codigo_autor$tabla_asociada$descripcion){
    
$sql3 "select codsocio from t_socio WHERE t_socio='".$_SESSION['codigosocio']."'";
    
$rs_socio mysql_query($sql3)or die('Ha ocurrido un error en el query de consulta '.mysql_error());
    if (
mysql_num_rows($rs_socio) != 0){ 
        
$fecha_anyo date('Y');
        
$row mysql_fetch_array($rs_socio);
        
//Compruebo si el registro seleccionado es distinto del usuario activo
        //Genero el código de autorización para el resto de socios
        
$micod genera_codigo(AUTORIZA_SOCIO$fecha_anyoLONGNUM);        
        
$sql4="insert into t_autorizacion_socio 
        (clave, fuente, aut, codsoc, fch, vald, motv, autzd)values ('"
.$micod."', '".$codsoc."', '".$cod_aut."', '".$row["cods"]."', '', 'AAA', '', 'BBB')";
        
mysql_query($sql4)or die('Ha ocurrido un error en el query de inyeccion '.mysql_error());
        
$valor 'V';            
    }else{
        
$valor 'F';
    }
    
    @
mysql_free_result($rs_socio); //Libero recursos    
    
return $valor;

Me dejas saber...

Última edición por bacdavi; 16/12/2009 a las 14:58
  #6 (permalink)  
Antiguo 17/12/2009, 12:24
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Funcion que me guarda registros duplicados

Buenas tardes,

El código desde donde llamo a la función es este:

Código PHP:
if (!empty($_POST['txtmodelo'])){
        
//1. Descripcion generada para el registro de autorizacion
        
$descrip ALTA_AVN.$_POST['txtmodelo'];
        
//2. Llamo a la funcion f_autoriza().     
        
$correcto f_autoriza($_POST['txtcodautor'], 't_avn'$descrip);

//Aquí compruebo si el valor devuelto es verdadero entonces continuo realizando procedimientos.
if ($correcto == 'V'){ 
   
//Continuo el codigo para hacer más tareas.
}

Como veis, solo llamo a la función 1 vez.
  #7 (permalink)  
Antiguo 19/12/2009, 04:48
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Funcion que me guarda registros duplicados

¿Sabéis si hay alguna incompatibilidad en hacer código llamando a mysql dentro de las funciones y por eso me los duplica?
  #8 (permalink)  
Antiguo 19/12/2009, 08:00
 
Fecha de Ingreso: enero-2005
Ubicación: Salta - Argentina
Mensajes: 322
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Funcion que me guarda registros duplicados

no, no existe tal incompatibilidad, el problema debe de estar en la programacion. Te recomiendo revisar toda tu pagina, me imagino tambien que de alguna forma estas llamando dos veces a la funcion.
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 07:53.