Foros del Web » Programando para Internet » PHP »

Insertar Registros En Dos Tablas

Estas en el tema de Insertar Registros En Dos Tablas en el foro de PHP en Foros del Web. Hola a todos, tengo otro problemilla y es que debo mediante un formulario insertar los valores alli dados en dos tablas, me explico: los datos ...
  #1 (permalink)  
Antiguo 11/10/2007, 11:54
Avatar de davincci  
Fecha de Ingreso: enero-2005
Mensajes: 193
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación Insertar Registros En Dos Tablas

Hola a todos, tengo otro problemilla y es que debo mediante un formulario insertar los valores alli dados en dos tablas, me explico:

los datos a insertar en el formulario son: nombre descripcion idlibro valor website email.


En la tabla principal que se llama libros va el id principal autonumerico mas los datos del formulario.

En la tabla secundaria que se llama catelibros lleva una id principal con todos los datos del formulario a excepcion de website email.


El segundo punto es que a la hora de borrar un libro de la tabla principal la debo borrar de la la tabla catelibros.


Saludos y agradezco su colaboracion
  #2 (permalink)  
Antiguo 11/10/2007, 12:12
Avatar de rmarinsd  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Insertar Registros En Dos Tablas

Para borrar el registro de la tabla secundara agrega a tu tabla principal ON DELETE CASCADE.
  #3 (permalink)  
Antiguo 11/10/2007, 15:09
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Re: Insertar Registros En Dos Tablas

Si estas utilizando mysql 5.0 o superior, puedes agregarle un TRIGGER a la tabla principal para que cuando eliminen e ingresen un registro el motor de base de datos se encargue de eliminar/insertar directamente el registro de la tabla secundaria.

Código:
/* Codigo para eliminacion */

DELIMITER |

CREATE TRIGGER eliminaDato AFTER DELETE ON libros
  FOR EACH ROW BEGIN
    DELETE FROM catelibros WHERE idlibro = OLD.idlibro;  
  END;
|

/* Codigo para insercion */
DELIMITER |

CREATE TRIGGER insertaDato BEFORE INSERT ON libros
  FOR EACH ROW BEGIN
    INSERT INTO catelibros 
    SET nombre = NEW.nombre, 
    descripcion = NEW.descripcion, 
    idlibro = NEW.idlibro, 
    valor = NEW.valor;
  END;
|
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 11/10/2007, 17:16
Avatar de davincci  
Fecha de Ingreso: enero-2005
Mensajes: 193
Antigüedad: 19 años, 10 meses
Puntos: 0
De acuerdo Re: Insertar Registros En Dos Tablas

Gracias a todos, Marvin en primer lugar yo trabajo con MySQL Database Version 5.0.45, pero el server donde se va a hospedar creo que no.

Lo segundo y me disculparan la ignoracia, pero por favor me pueden explicar donde en que lugar inserto en el php este codigo:

Código PHP:
/* Codigo para eliminacion */

DELIMITER |

CREATE TRIGGER eliminaDato AFTER DELETE ON libros
  
FOR EACH ROW BEGIN
    DELETE FROM catelibros WHERE idlibro 
OLD.idlibro;  
  
END;
|

/* Codigo para insercion */
DELIMITER |

CREATE TRIGGER insertaDato BEFORE INSERT ON libros
  
FOR EACH ROW BEGIN
    INSERT INTO catelibros 
    SET nombre 
= NEW.nombre
    
descripcion = NEW.descripcion
    
idlibro = NEW.idlibro
    
valor = NEW.valor;
  
END;

a continuacion muestro el fomulario procesar.php el cual es el que me recibe los datos enviados desde el formulario:

Código PHP:
<!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>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
define
('HOST''localhost');
define('DB''base de datos');
define('USERNAME''usuario');
define('PASSWORD''xxxxxxx');

$link = @mysql_connect(HOST,USERNAME,PASSWORD);
if (!
$link) {
   die(
'No hay conexion =(');
}
   
mysql_select_db(DB) or die("Base de datos no seleccionada."); 

if (isset(
$_POST['enviar'])) {

    
$idcategoria $_POST['idcategoria'];
    
$nombre $_POST['nombre'];
    
$descripcion $_POST['descripcion'];
    
$valor $_POST['valor'];
     
        
    
$upload_dir 'img/';
    
$upload_file $upload_dir $_FILES['imagen']['name'];
    
$imagen $_FILES['imagen']['name'];

    if (
move_uploaded_file($_FILES['imagen']['tmp_name'], $upload_file)) {
          
        
// La imagen se subio correctamente, entonces ingresamos los datos en la db
        
$query "INSERT productos SET idcategoria='$idcategoria', nombre='$nombre',  descripcion='$descripcion', valor='$valor',  imagen='$imagen'";
        
mysql_query($query);
        echo 
"DATOS SUBIDOS CORRECTAMENTE";

    } else {
      echo 
"ERROR AL SUBIR LOS DATOS";
    
// Algun error al subir la imagen
    
}


}
?> 
</body>
</html>

De antemano agradezco por su ayuda.


Saludes
  #5 (permalink)  
Antiguo 11/10/2007, 17:25
Avatar de davincci  
Fecha de Ingreso: enero-2005
Mensajes: 193
Antigüedad: 19 años, 10 meses
Puntos: 0
replanteamiento

Disculpen ya entendi el codigo de marvin, pero me dicen que la base de datos no tienen php 5, entonces cual seria la forma para hacerlo desde php partiendo del codigo que he pasado?.


Gracias
  #6 (permalink)  
Antiguo 11/10/2007, 19:06
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Re: Insertar Registros En Dos Tablas

No creo que importe si tienes php 5,4 o cualquier version, por que el triger y la instruccion On cascade se debe ejecutar directamente en el servidor de base de datos en la BD correspondiente
  #7 (permalink)  
Antiguo 11/10/2007, 21:23
Avatar de davincci  
Fecha de Ingreso: enero-2005
Mensajes: 193
Antigüedad: 19 años, 10 meses
Puntos: 0
No he podido.

Hola a todos no he podido insertar este codigo a la tabla principal:


Código PHP:
/* Codigo para eliminacion */ 

DELIMITER 

CREATE TRIGGER eliminaDato AFTER DELETE ON libros 
  
FOR EACH ROW BEGIN 
    DELETE FROM catelibros WHERE idlibro 
OLD.idlibro;   
  
END


/* Codigo para insercion */ 
DELIMITER 

CREATE TRIGGER insertaDato BEFORE INSERT ON libros 
  
FOR EACH ROW BEGIN 
    INSERT INTO catelibros  
    SET nombre 
= NEW.nombre,  
    
descripcion = NEW.descripcion,  
    
idlibro = NEW.idlibro,  
    
valor = NEW.valor
  
END

Alguien me puede dar una mano?.

No hay un forma por medio de php hacer esto mismo?.

Saludos
  #8 (permalink)  
Antiguo 13/10/2007, 09:59
Avatar de davincci  
Fecha de Ingreso: enero-2005
Mensajes: 193
Antigüedad: 19 años, 10 meses
Puntos: 0
Alguna idea

Hola a todos alguna idea para hacerlo en php?.




Saludos
  #9 (permalink)  
Antiguo 13/10/2007, 12:27
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Re: Insertar Registros En Dos Tablas

Claro que si puedes hacerlo en php, pero con mucho cuidado por que se aplica para las actualizaciones, ademas de eliminacion e insercion.
Pero lo correcto es hacerlo en el Servidor Web y dejar que el se encargue de eso y las instrucciones que te han dado puedes ejecutarlas directamente en la consola de Mysql o si usas el phpmyadmin no deberias tener ningun problema si intentas ejecutar el codigo como si fuera una consulta normal... Suerte y como comentario te agrego que esos detalles deberian solucionarse cuando disenas la Base de datos (lee sobre llaves foraneas o Foreign Keys en los manuales de SQL)... http://www.google.com/search?q=forei...nt=iceweasel-a

/****************************/
FOREIGN KEY Establece que el contenido de esta columna será uno de los valores contenidos en una columna de otra tabla maestra. Esta columna marcada como clave ajena puede ser NULL. No hay límite en el número de claves ajenas. La clave ajena puede ser otra columna de la misma tabla. Se puede forzar que cuando una fila de la tabla maestra sea borrada, todas las filas de la tabla detalle cuya clave ajena coincida con la clave borrada se borren también. Esto se consigue añadiendo la coletilla ON DELETE CASCADE en la definición de la clave ajena.
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 14:45.