Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/11/2009, 12:15
Avatar de rafaconpu
rafaconpu
 
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 1 mes
Puntos: 3
Pregunta Inserta datos duplicados

Buenas tardes,

Tengo en un fichero php lo siguiente:

Código PHP:
include ('functions.php');
$codigop genera_codigo('dato'$anyo5'campoclave''mitabla');
$correcto f_autoriza($codigop't_avion''Esta es la descripcion'); 
y las dos funciones arriba indicadas hacen lo siguiente (aparentemente están bien, pero por alguna razón, cada vez que lo ejecuto, me inserta el registro 2 veces y siempre me hace lo mismo.

He probado solo la función "genera_codigo" y me devuelve el código correctamente; Por otra parte he probado la función f_autoriza y la inserción me la realiza correctamente una vez. Como parámetro de entrada en vez de pasarle el resultado de la función "genera_codigo", le pongo un código estático como texto y todo ok.

¿Qué puede estar ocurriendo entre las funciones para que se ingrese dos veces el mismo registro? Por más vueltas que llevo dándole toda la tarde no consigo sacar respuestas en claro.

Las funciones son estas:

Código PHP:
function genera_codigo($codigo$codanyo$longnum$campo$tabla){
$rs = @mysql_query("select $campo from $tabla order by $campo desc");
    
if (@
mysql_num_rows($rs) == 0){ 
//No ha devuelto registro, lo que indica que la tabla está vacía.
for ($i=0;$i<(LONGNUM-1);$i++){
   
$ceros $ceros.'0';
}
 
$codigo_a_devolver $codigo.$codanyo.$ceros.'1'//Codigo inicial a devolver
}else{
   
$regmayor = @mysql_result($rs0); //Obtengo el registro mayor
//Del código completo, extraigo la cadena correspondiente al número de 5 dígitos
    
$numero substr($regmayorstrlen($codigo)+strlen($codanyo), $longnum); //NUMERO
//Al número obtenido lo incremento en 1 unidad
$numero = (int)$numero+1;
//Relleno con ceros a la izquierda el número incrementado hasta obtener la longitud establecida en $longnum
for ($i=0;$i<($longnum-strlen($numero));$i++){
    
$ceros $ceros.'0';
}    
   
//Genero el código completo a devolver
$codigo_a_devolver $codigo.$codanyo.$ceros.$numero
}    
//Libero recursos
@mysql_free_result($rs);

//Retorno el nuevo código generado.
return $codigo_a_devolver;

//Fin funcion genera_codigo 
Y esta es la funcion f_autoriza

Código PHP:
function f_autoriza($codigo_autor$tabla_asociada$descripcion){
//0. Obtención de variables
$fechaSist date("Y-m-d H:i:s"); //Fecha y hora del Sistema
        
//1. Insertar registro en T_AUTORIZACION
$sql "insert into mitabla (campo1, campo2, campo3, campo4, campo5, campo6, campo7) ";
$sql $sql."values ('$codigo_autor', '$_SESSION[codigosocio]', '$fechaSist', '$tabla_asociada', ";
    
$sql $sql."'NO', '$descripcion', 'NO')";

    @
mysql_query($sql);

genera_codigo: Me devuelve un código con el formato XXX + AÑO + NUMERO (donde el NUMERO es de longitud 5 completando con ceros a la izquierda)

f_autoriza: Me inserta un registro en otra tabla una vez le haya pasado el codigo generado.