Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2010, 12:46
Avatar de djcandido
djcandido
 
Fecha de Ingreso: junio-2009
Ubicación: San Salvador
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta PHP inserta dos veces a mysql - SOLUCIONADO

Saludos, tengo problemas con php, pues en 1 año de programación no he tenido este tipo de problemas, y pues, he revisado mi código y no encuentro el problema.

Fijense que tengo dos clases que manejan los datos de la base de datos: la clase de conexion y la clase del objeto empleado, ademas tengo la pagina de test que es para hacer pruebas o implementar las funciones que estan en las clases.

El detalle es que la funcion setEmpleado() me inserta dos veces el mismo dato a la base de datos. No encuentro en qué he fallado o qué debo hacer.

Les agradeceré su ayuda:

CLASE DE CONEXION

Código PHP:
<?php

//Descripcion: Clase BD y QUERY
//Version: 0.3
//Autor: Miquel Camps Orteza
//Web: www.viciao2k3.net

class bd{
    var 
$usuari='sads'//nombre de usuario de la base de datos
    
var $clau='sads'//contraseña del usuario
    
var $servidor='localhost'//nombre del servidor, normalmente localhost
    
var $nomBD='sads'//nombre de la base de datos
    
var $conn//necesario para la conexion y desconexion de la base de datos
    
var $debug//modo depuracion, mostrara los errores y los querys

    
    
function x(){
    
//para cerrar la conexion mysql
    //debes utlizarla SIEMPRE al final de tu documento
        
if(isset($this->conn))@mysql_close($this->conn);
    }
    
    function 
error_mysql($msg,$query=''){
    
//muestra el error
        
if($this->debug==&& !empty($query)) $msg .= '<br><b />QUERY:</b><br />'.$query;
        
$this->enmarcar($msg);
        
$this->x();
        die();

    }

    function 
enmarcar($str){
    
//para mostrar los errores dentro de un rectangulo
        
echo '<span style="display:block;border:1px red solid;padding:5px;">',$str,'</span>';
    }

    function 
__destruct(){
        
//el destructor se ejecuta antes de cerrar la ejecucion y con esto cerramos la conexion a la base de datos
        
$this->x();
    }


    function 
__construct($debug=0)
    {
        
//al llamarla conecta directametne a la base de datos
        
$this->debug $debug;
        
$this->conn = @mysql_connect($this->servidor$this->usuari$this->clau) or $this->error_mysql(mysql_error());
        
mysql_select_db($this->nomBD) or $this->error_mysql(mysql_error());
    }
}

class 
query{
    var 
$bd;//conexion mysql, requerido para llamar funciones de la classe bd
    
var $q//query introducida
    
var $n;//numero de resultados
    
var $v;//los resultados en una tabla de objetos
    
var $a;//numero de filas afectadas por la query

    
function __construct($query,$bd)
    {
    
//ejecuta la query y rellena las propiedades del objeto
        
$this->$query;
        
$this->bd $bd;
        
$mysql_result = @mysql_query($query) or $this->bd->error_mysql(mysql_error(),$query);
        
$this->= @mysql_num_rows($mysql_result);
        
$this->= @mysql_affected_rows();
        if(
$this->n)
            for(
$i=0;$i<$this->n;$i++) $taula[$i] = @mysql_fetch_object($mysql_result);
        else 
$taula null;
        
$this->$taula;
        if(  
$this->0  mysql_free_result($mysql_result);
    }
    
}

?>
Implementacion:
Código PHP:
<?php
require("clases/class_mysql.php");
$bd = new bd;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
        $idEmp 
$_POST['CAMPO1'];
        
$PrimerNombre $_POST['CAMPO2'];
        
$SegundoNombre $_POST['CAMPO3'];
        
$PrimerApellido $_POST['CAMPO4'];
        
$SegundoApellido $_POST['CAMPO5'];
        
$Sexo $_POST['CAMPO5'];
        
$EstadoCivil $_POST['CAMPO6'];
        
$TipoContrato $_POST['CAMPO7'];
        
$Direccion $_POST['CAMPO8'];
        
$Telefono $_POST['CAMPO9'];
        
$Mail $_POST['CAMP11'];
        
$Dui $_POST['CAMPO12'];
        
$Isss $_POST['CAMPO13'];
        
$Afp $_POST['CAMP14'];
        
$Nit $_POST['CAMP15'];
        
$FechNac $_POST['CAMP16'];
        
$FechIng $_POST['CAMP17'];
        
$NombreEme $_POST['CAMP18'];
        
$TelefonoEme $_POST['CAMP19'];
        
$DireccionEme $_POST['CAMP20'];
        
$Estado $_POST['CAMP21'];
        
$Observacion $_POST['CAMP22'];
        
$idCargo $_POST['CAMP23'];
        
$Foto $_POST['CAMP24'];

$query4 = new query('insert into empleado (id_emp,primernombre_emp, segundonombre_emp, primerapellido_emp, segundoapellido_emp, sexo_emp, estado_civil_emp, tipocontrato_emp, direccion_emp, telefono_emp, mail_emp, dui_emp, isss, afp_emp, nit, fecha_nac_emp, fecha_ing_emp, nombre_eme_emp,telefono_eme_emp, direccion_eme_emp, estado_emp, observacion, id_cargo, foto) values ("'.utf8_encode($idEmp).'","'.utf8_encode($PrimerNombre).'","'.utf8_encode($SegundoNombre).'","'.utf8_encode($PrimerApellido).'","'.utf8_encode($SegundoApellido).'","'.utf8_encode($Sexo).'","'.utf8_encode($EstadoCivil).'","'.utf8_encode($TipoContrato).'","'.utf8_encode($Direccion).'","'.utf8_encode($Telefono).'","'.utf8_encode($Mail).'","'.utf8_encode($Dui).'","'.utf8_encode($Isss).'","'.utf8_encode($Afp).'","'.utf8_encode($Nit).'","'.utf8_encode($FechNac).'","'.utf8_encode($FechIng).'","'.utf8_encode($NombreEme).'","'.utf8_encode($TelefonoEme).'","'.utf8_encode($DireccionEme).'","'.utf8_encode($Estado).'","'.utf8_encode($Observacion).'","'.utf8_encode($idCargo).'","'.utf8_encode($Foto).'")',$bd);

?>
</body>
</html>
<?php
$bd
->x();
?>
Estructura de la tabla empleado:

Código:
DROP TABLE IF EXISTS `empleado`;
CREATE TABLE `empleado` (
  `id_emp` varchar(4) NOT NULL,
  `primernombre_emp` varchar(25) NOT NULL,
  `segundonombre_emp` varchar(25) DEFAULT NULL,
  `primerapellido_emp` varchar(25) NOT NULL,
  `segundoapellido_emp` varchar(25) DEFAULT NULL,
  `sexo_emp` varchar(1) NOT NULL,
  `estado_civil_emp` varchar(25) NOT NULL,
  `tipocontrato_emp` varchar(8) NOT NULL,
  `direccion_emp` varchar(50) NOT NULL,
  `telefono_emp` varchar(9) DEFAULT NULL,
  `mail_emp` varchar(40) DEFAULT NULL,
  `dui_emp` varchar(10) NOT NULL,
  `isss` varchar(9) NOT NULL,
  `afp_emp` varchar(12) NOT NULL,
  `nit` varchar(17) NOT NULL,
  `fecha_nac_emp` date NOT NULL,
  `fecha_ing_emp` date NOT NULL,
  `nombre_eme_emp` varchar(50) DEFAULT NULL,
  `telefono_eme_emp` varchar(9) DEFAULT NULL,
  `direccion_eme_emp` varchar(50) DEFAULT NULL,
  `estado_emp` varchar(30) NOT NULL,
  `observacion` varchar(50) DEFAULT NULL,
  `id_cargo` int(2) NOT NULL,
  `foto` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_emp`),
  KEY `FK_empleado_1` (`id_cargo`),
  CONSTRAINT `FK_empleado_1` FOREIGN KEY (`id_cargo`) REFERENCES `cargo` (`id_cargo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Última edición por djcandido; 15/06/2010 a las 10:13 Razón: SOLUCIONADO