¿Cómo insertar registro a varias tablas (relacionadas) con un solo formulario?
3 seguidores
Hola,
Tengo una base de datos con 4 tablas relacionadas las cuales quisiera ingresar los registro desde un mismo formulario (a las 4 tablas) creado en dreamweaver cs5(no soy muy esperto en php y mysql )... Mi problema radica hay, como se haria con dreamweaver (o con codigo) un formulario que agregara los registros a las 4 tablas que tiene mi base de datos?
Lo busque por todos lados y los pocos que aparecieron no lo detallaban debidamente(no lo entendi)...
Desde ya gracias por responder...
Usuario desconocido
Gracias por el apunte @fakito ;). Espero que blackmel tenga una idea clara de cómo poder hacerlo ahora.
fakito
Al código de @ocelnet le faltaría un mysql_connect para establecer la conexión con la base de datos además de tener un sql injection en los INSERT.
De todas formas las funciones mysql_* están marcadas como obsoletas y deberías usar PDO que además ayudan a evitar ciertos problemas de seguridad.
Lo primero sería usar InnoDB en la base de datos para soportar transacciones, así si uno de los insert falla puedes hacer un rollback y evitar introducir el resto de datos en las otras tablas. Si tienes que usar MyISAM la única diferencia es que no podrás hacer el rollback.
A parte de eso la mecánica es la misma que apunta @ocelnet, aunque es posible que quieras mantener los datos relacionados entre sí con una clave foránea, para eso puedes recoger el id del primer insert y pasarlo como parámetro al resto de las sentencias.
Te pego un ejemplo rápido, no pongo el formulario porque me imagino que sabes como va, es un formulario normal y corriente enviado por POST.
<?php
// variables del formulario
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$d = $_POST['d'];
// conectar la base da datos
$db = 'sample';
$host = 'localhost';
$user = 'root';
$pass = 'root';
$conn = new PDO("mysql:dbname=".$db.";host=".$host,$user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// iniciar transacción
$conn->beginTransaction();
try {
// tabla 1
$sql = 'INSERT INTO a (value) VALUES (:value);';
$result = $conn->prepare($sql);
$result->bindValue(':value', $a, PDO::PARAM_STR);
$result->execute();
$lastId = $conn->lastInsertId();
// tabla 2
$sql = 'INSERT INTO b (a_id, value) VALUES (:a_id, :value)';
$result = $conn->prepare($sql);
$result->bindValue(':a_id', $lastId, PDO::PARAM_INT);
$result->bindValue(':value', $b, PDO::PARAM_STR);
$result->execute();
// tabla 3
$sql = 'INSERT INTO c (a_id, value) VALUES (:a_id, :value)';
$result = $conn->prepare($sql);
$result->bindValue(':a_id', $lastId, PDO::PARAM_INT);
$result->bindValue(':value', $c, PDO::PARAM_STR);
$result->execute();
// tabla 4
$sql = 'INSERT INTO d (a_id, value) VALUES (:a_id, :value)';
$result = $conn->prepare($sql);
$result->bindValue(':a_id', $lastId, PDO::PARAM_INT);
$result->bindValue(':value', $d, PDO::PARAM_STR);
$result->execute();
$conn->commit();
echo 'Datos insertados';
} catch (PDOException $e) {
// si ocurre un error hacemos rollback para anular todos los insert
$conn->rollback();
echo $e->getMessage();;
}
Usuario desconocido
Saludos blackmel, por lo que te he entendido, quieres insertar los campos que pasas del formulario a cuatro tablas diferentes, supongo que relacionadas con un id ó clave primaria, que relaciona las cuatro tablas.
En código PHP un ejemplo podría ser algo así:
/*En el archivo que recoje las variables del formulario, suponiendo que en el formulario hayas puesto un valor de method="post" */
$variable_uno = $_POST['variable_uno'];
$variable_dos = $_POST['variable_dos'];
$variable_x = $_POST['variable_x'];
/* Después, mediante un include, o si lo incluimos directamente, ponemos los datos de conexión a la base de datos*/
$host = "localhost";
$database = "nombre_de_base_de_datos";
$username = "Nombre_de_usuario";
$password = "mi_password";
/* seleccionamos la base de datos*/
mysql_select_db($database);
/* insertamos el registro para cada tabla */
mysql_query("INSERT INTO tabla_1 VALUES ('$variable_uno', '$variable_dos', '$variable_x')");
mysql_query("INSERT INTO tabla_2 VALUES ('$variable_uno', '$variable_dos', '$variable_x')");
mysql_query("INSERT INTO tabla_3 VALUES ('$variable_uno', '$variable_dos', '$variable_x')");
mysql_query("INSERT INTO tabla_4 VALUES ('$variable_uno', '$variable_dos', '$variable_x')");
No se si esta era tu duda o no, espero haberte ayudado.