Foros del Web » Programando para Internet » PHP »

PHP inserta dos veces a mysql - SOLUCIONADO

Estas en el tema de PHP inserta dos veces a mysql - SOLUCIONADO en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/06/2010, 12:46
Avatar de djcandido  
Fecha de Ingreso: junio-2009
Ubicación: San Salvador
Mensajes: 50
Antigüedad: 14 años, 10 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
  #2 (permalink)  
Antiguo 14/06/2010, 13:20
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: PHP inserta dos veces a mysql

Cita:
Iniciado por djcandido Ver Mensaje
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.
Donde está la función setEmpleado()??
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 14/06/2010, 13:32
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: PHP inserta dos veces a mysql

Y la funcion setEmpleado()????
  #4 (permalink)  
Antiguo 14/06/2010, 13:33
Avatar de djcandido  
Fecha de Ingreso: junio-2009
Ubicación: San Salvador
Mensajes: 50
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: PHP inserta dos veces a mysql

Cita:
Iniciado por santris Ver Mensaje
Donde está la función setEmpleado()??
Tienes razón, copié otro codigo, otra forma que he probado, sustituyendo el setEmpleado(), pero esta es otra forma de la cual he testeado. El problema es que no pude copiar todo el codigo porque me lo restringe el mismo foro.

Puedes copiar y pegar el codigo que he subido, que practicamente es lo mismo.

Gracias
  #5 (permalink)  
Antiguo 14/06/2010, 13:37
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: PHP inserta dos veces a mysql

Cita:
Iniciado por djcandido Ver Mensaje
Tienes razón, copié otro codigo, otra forma que he probado, sustituyendo el setEmpleado(), pero esta es otra forma de la cual he testeado. El problema es que no pude copiar todo el codigo porque me lo restringe el mismo foro.

Puedes copiar y pegar el codigo que he subido, que practicamente es lo mismo.

Gracias
Te lo comento por que ya realizas una inserción cuando creas el objeto:
Código PHP:
function __construct($query,$bd
Si además llamas otra función para insertar los mismos datos, puede que esté ahí tu problema.
__________________
Tu álbum de cromos online!!
  #6 (permalink)  
Antiguo 14/06/2010, 13:51
Avatar de djcandido  
Fecha de Ingreso: junio-2009
Ubicación: San Salvador
Mensajes: 50
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: PHP inserta dos veces a mysql

Gracias, he subido a 4shared, los archivos implicados:

[URL="http://www.4shared.com/file/fgcAtuza/enviar_empleado.html"]http://www.4shared.com/file/fgcAtuza/enviar_empleado.html[/URL]

Descarguenlos y veanlo, alli he comentado, si lo utilizo con la funcion setEmpleado() o si lo hago de forma plana como lo que he subido a este foro.

santris, si fuera la funcion:
function __construct($query,$bd)

tuviera el mismo problema con todas las inserciones que hiciera en mis sistemas, pero lastimosamente este es el primer caso en el que se me ha presentado este problema
y por eso dudo que sea la funcion que tu me dices.

gracias
  #7 (permalink)  
Antiguo 14/06/2010, 14:00
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: PHP inserta dos veces a mysql

Cita:
Iniciado por djcandido Ver Mensaje

santris, si fuera la funcion:
function __construct($query,$bd)

tuviera el mismo problema con todas las inserciones que hiciera en mis sistemas, pero lastimosamente este es el primer caso en el que se me ha presentado este problema
y por eso dudo que sea la funcion que tu me dices.

gracias
Noo, yo solo digo que al crear el objeto ya realizas una inserción directamente con el constructor, pero que si (supuestamente) usas otra función para insertar puede estar ahí el problema.
__________________
Tu álbum de cromos online!!
  #8 (permalink)  
Antiguo 15/06/2010, 10:12
Avatar de djcandido  
Fecha de Ingreso: junio-2009
Ubicación: San Salvador
Mensajes: 50
Antigüedad: 14 años, 10 meses
Puntos: 0
De acuerdo SOLUCIONADO - PHP inserta dos veces a mysql

Gracias por sus comentarios, ya encontré el problema, dicho problema radica en en IDE, pues yo me bajé Dreamweaver CS5, pero cuando creé el administrador de servidor y configuré el servidor local, quizá hice una configuración extra o no logré entender el tipo de configuración, pues cada vez que yo guardo el documento se ejecuta la consulta, sin ni siquiera ejecutar la pagina php.

Es decir,

Al precionar crtl+s (para guardar), se ejecuta la consulta sql en la pagina donde se encuentra la funcion setEmpleado();

Entonces lo ejecutaba y cuando yo hacía refresh en la pagina php, me volvía a ejecutar la consulta y como ya se había ingresado antes, me mandaba el mensaje de error que ya existía el id registrado (yo asumía que eran dos insert a la vez).

Etiquetas: conexion, duplicado, duplicados, mysql
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 08:49.