Insertar datos en tablas relacionadas

O una duda enorme!
Veréis tengo 3 tablas así:
Categorías:
categoria_id, categoria_nombre, categoria_imagen
productos:
producto_id,
producto_nombre,
producto_imagen,
producto_precio
y una tercera tabla que relaciona a las 2:
productos_categorias
categoria_id,
producto_id
Con FOREIGN KEY categorias. Categoria_id y FOREIGN KEY productos.producto_id
Con esto lo que hago es que un producto pertenezca a muchas categorías y una categoría tenga muchos productos. Una relación muchos a muchos.
Bien. Insertanto datos a mano, desde el PHPmyadmin, no tengo problema ninguno en ninguna tabla.
El problema viene cuando lo hago desde el formulario.
El archivo se llama: producto_alta.php y en ese archivo cargo los datos y los envío.
Lo hago todo en el mismo archivo, no envío los datos a otro archivo, no sé si me explico.
Bien, en este archivo, a su vez listo las categorías que están disponibles con un checkbox, y después vienen los campos a rellenar para introducir el producto.
El código que tengo generado donde hago la inserción es este:
$query=mysql_query("INSERT INTO $tabla_productos (producto_id,  producto_nombre,  producto_descripcion,  producto_precio, producto_imagen1)
 VALUES ('', '$fnombre',  '$fdescripcion', '$fprecio', '$fimagen1')") or die (mysql_error());
//aqui inserto los datos del producto
            $rsx=mysql_query("SELECT producto_id FROM $tabla_productos ORDER BY    producto_id DESC") or die (mysql_error());
             $ix=0;
             $quant=mysql_num_rows($rsx);
             $producto_id=mysql_result($rsx, $ix, 'producto_id');
//Aquí lo que hago es sacar la última id insertada, ya se que se puede hacer de otra manera pero como es lo mismo me aclaro mejor así.
  $query2=mysql_query("INSERT INTO $tabla_productos_categorias(categoria_id,producto_id) VALUES ('$fcategoria_id','$producto_id')") or die (mysql_error());
//Y aquí lo que hago es insertar en la tabla que relaciona el id del producto que se acaba de insertar y el id de la categoría que ha sido seleccionada en el formulario.
El error que me tira es este:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(categoria_id, producto_id) VALUES ('4','429')' at line 1
Como podeis ver si que me recoge los valores: 4 es la categoria y 429 es la id del producto que acabo de insertar.
Y lo más gracioso es que si me introduce el producto en la tabla productos, pero no me mete esos valores de id en la tabla productos_categorias, que es la que los relacionada.
Necesito hacer esto para que luego se vean los productos, a la hora de listarlos con su respectiva relación.
Si me podéis echar una mano os lo agradecería porque no se muy bien como hacerlo.
He probado de todo y no chuta nada más que la inserción del producto..
1

1 Respuesta

174.075 pts.
Intenta imprimir la sentencia SQL entera que da el error. Dice que es un error sintáctico, así que ha de ser fácil de ver.
Yo no puedo decirte más, puesto que no conozco el valor de $tabla_productos_categorias
De hecho te recomiendo colocar un espacio entre esta variable y el paréntesis, puesto que sin espacio puede ser malinterpretado por PHP.
Hola David!
Muchas gracias por contestar tan rápido..
He quitado el espacio este que me dices, bueno, lo que he hecho es crear el insert así:
$query2=mysql_query("INSERT INTO $tabla_productos_categorias VALUES ('$fcategoria_id','$producto_id')") or die (mysql_error());
Que para el caso es lo mismo..
Lo que me comentas de imprimir la sentencia SQL, no sé muy bien lo que me quieres decir..
¿Cómo tengo que hacer eso?
Los valores de la $tabla_productos_categorias son las id´s de las tablas productos y categorias, es decir: 4=la id de la categoria en la tabla categoria y 282=la id del producto e la tabla productos por ejemplo.
Si me puedes decir, como hacer eso de imprimir.. je, je
Gracias de nuevo David,
Bea
Si en lugar de:
$query2=mysql_query("INSERT INTO $tabla_productos_categorias VALUES ('$fcategoria_id','$producto_id')") or die (mysql_error());
escribes:
$sql = "INSERT INTO $tabla_productos_categorias VALUES ('$fcategoria_id','$producto_id')";
echo $sql;
$query2=mysql_query($sql) or die (mysql_error());
Tendrás exactamente la sentencia que se intenta ejecutar. Puedes copiarla en phpMyAdmin y ver qué ocurre. Tiene que haber un error sintáctico según el error que da.
Hola de nuevo David!
Jo, no te lo vas a creer pero me salía al principio,
INSERT INTO VALUES ('4,''433'), se comía el nombre de la tabla.
Al parecer no me reconocía la variable $tabla que tenía por delante, no sé por qué puesto que me lo hace en todas las demás sentencias SQL...
EN fin, que lo he cambiado por el nombre completo de la tabla y me sale en pantalla esto:
INSERT INTO fpcfontana_productos_categorias VALUES ('4','433')
Así que ya está,... solucionado muchas muchas gracias David eres todo un "experto".
Je, je!
Ya ves tu que problema más tonto.. pero no se me ocurrió verlo de esa manera..
Lo dicho, gracias David
Bea

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas