Aaaaaaaaaaaaah, eso es más complejo de automatizar... La solución más simple, lamentablemente es hacerlo uno a uno.
La otra solución que se me ocurre es darle un número a cada tabla y en base a este número relacionar los campos del formulario con la tabla correspondiente. Este número no existirá realmente, o sea, no tendrás que añadirlo a ninguna parte:
<form action...>
<input type="text" name="0_nombre" />
<input type="text" name="1_url_imagen" />
<input type="text" name="2_direccion" />
<input type="submit" />
</form>
Código PHP:
<?php
$link = mysql_connect( 'tus datos... ' );
mysql_select_db( 'database', $link );
$delimiter = '_'; // Cámbialo por lo que será el delimitador (en realidad no hay muchas opciones :P)
// Test es para pruebas, después debes cambiar array_keys( $test ) por array_keys( $_POST );
//$test = array( '1_email' => 'a@a.com', '1_userid' => 'skaparate', '2_img' => 'http://misitio.com/imagen.png', '3_username' => 'Nombre Apellido');
$keys = array_keys( $_POST );
// Añade los nombres de las tablas tal cual aparecen aquí (los que puse yo no necesariamente existen :P):
$inserts = array(
'usuario' => array( 'values' => '', 'keys' => '', 'query' => '' ),
'imagenes' => array( 'values' => '', 'keys' => '', 'query' => '' ),
'informacion_personal' => array( 'values' => '', 'keys' => '', 'query' => '' )
);
$tables = array_keys( $inserts );
foreach( $keys as $k => $v ) {
$tname = get_table_name( $v, $tables, $delimiter );
$tmp = substr( $keys[$k], stripos( $keys[$k], $delimiter ) + 1 );
if( ! empty( $_POST[$k] ) ) {
$inserts[$tname]['values'] .= $_POST[$v] . ',';
$inserts[$tname]['keys'] .= $tmp . ',';
$inserts[$tname]['query'] = "INSERT INTO $tname (" . $inserts[$tname]['keys'];
}
}
$out = 1; // true
// Se construyen las consultas y se ejecutan:
foreach( $inserts as $key => $val ) {
$inserts[$key]['query'] = trim( $inserts[$key]['query'], ',' ) . ')';
$inserts[$key]['query'] .= ' VALUES (' . trim( $inserts[$key]['values'], ',' ) . ')';
$result = mysql_query( $inserts[$key]['query'] );
$aff = mysql_affected_rows( $link );
if( $aff > 0 )
$out &= 1;
}
if( $out ) {
echo "Se insertaron todos los datos";
} else {
echo "Ocurrió un erro al insertar los datos";
}
//print_keys( $keys );
//print_inserts( $inserts );
// 0 = tabla de usuario
// 1 = tabla imágenes de usuario
// 2 = tabla datos personales
// N = etc.
// DEBE comenzar por 0
function get_table_name( $key, $tables, $delimiter ) {
// Le pasas el nombre del índice
$number = substr( $key, 0, stripos( $key, $delimiter ) );
return $tables[$number];
}
// Estas funciones no son útiles, solo las puse para mostrar los valores (podrías usar var_dump en su lugar)
function print_keys( $keys ) {
echo "<br />Keys: <br />";
foreach( $keys as $k ) {
echo "$k<br />";
}
}
function print_inserts( $inserts ) {
echo "<br />Insert Querys: <br />";
foreach( $inserts as $in ) {
echo "VALUES: $in[values]<br />KEYS: $in[keys]<br />QUERY: $in[query]<br /><br />";
}
}
?>
Si quieres probar el código, descomenta la línea que tiene el arreglo $test y comenta las líneas que insertan los datos en la base (también mysql_connect y mysql_select_db). También descomenta las líneas print_keys( $keys ); y print_inserts( $inserts ); para que veas el resultado.
Esa es una forma de automatizarlo. Puede que hayan mejores formas de hacerlo, pero no se me ocurren, así que si lo puedes optimizar nos avisas :D.
Obviamente, si no entiendes algo pregunta :D.