Foros del Web » Programando para Internet » PHP »

Insertar registros en tablas relacionadas a partir de un formulario

Estas en el tema de Insertar registros en tablas relacionadas a partir de un formulario en el foro de PHP en Foros del Web. Estoy intentando insertar registros en tablas relacionadas a partir de un mismo formulario y me da el siguiente error: Warning: mysql_fetch_array(): supplied argument is not ...
  #1 (permalink)  
Antiguo 16/10/2004, 20:37
yoe
 
Fecha de Ingreso: marzo-2003
Mensajes: 74
Antigüedad: 21 años, 1 mes
Puntos: 0
Insertar registros en tablas relacionadas a partir de un formulario

Estoy intentando insertar registros en tablas relacionadas a partir de un mismo formulario y me da el siguiente error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ....... línea 22

Parece ser que no estoy utilizando la función adecuada para leer los resultados de la query.

Lo que hago es lo siguiente:

include('includes/functions/database.php');

//Insertamos en la tabla pages (tabla madre)

$sql = 'INSERT INTO `pages` ( `page_id` , `page_categorie_id` , `page_author_id` , `page_title` , `page_adicional_title` , `page_description` , `page_active` , `page_header` , `page_text` , `page_footer` , `page_signature` , `page_date` , `page_counter` , `page_clanguage` ) '
. ' VALUES ( \'\', \''.$page_categorie_id.'\', \''.$page_author_id.'\', \''.$page_title.'\', \''.$page_adicional_title.'\', \''.$page_description.'\', \''.$page_active.'\', NULL , NULL , NULL , NULL , \'0000-00-00 00:00:00\', \'0\', \'0\' );'
. ' ';
$result = mysql_query($sql) or die("Insert Query Falla");


//Seleccionamos el id de la madre
$sql = 'SELECT max(page_id) as page_id'
. ' FROM pages'
. ' WHERE ( ( ( pages.page_categorie_id ) ='.$page_categorie_id.' ) AND ( ( pages.page_author_id ) ='.$page_author_id.' ) AND ( ( pages.page_title ) = \''.$page_title.'\' ) ) LIMIT 0, 30';
echo $sql."<br>";
$result = mysql_db_query("basededatos",$sql) or die (mysql_error());

//Insertamos en pages_content (tabla hija).
while ($row_content = mysql_fetch_array($result))
{
$sql = 'INSERT INTO `pages_contents` ( `content_id` , `content_page_id` , `content_page_titlei` , `content_page_text` , `content_page_image` ) '
. ' VALUES ( \'\', \''.$row_content['page_id'].'\', \''.$content_page_titlei.'\', \''.$content_page_texti.'\', \''.$content_page_imagei.'\' );'
. ' ';
$result = mysql_db_query("basededatos",$sql);
}

No entiendo donde puede estar el error. He realizado otros ejemplos, pero para insertar en una unica tabla y funciona perfectamente la función mysql_fetch_array.

Por otro lado, ¿existe otra forma mas simple de insertar registros de tablas relacionadas en php?

Saludos y muchas gracias
  #2 (permalink)  
Antiguo 16/10/2004, 21:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
La fubción mysql_fetch_array no tiene nada que ver con los errores que estás cometiendo en la inserción de registros.
Para ver esto prueba en cada mysql_query con el "or die()" para que te muestre dónde estás cometiendo errores.... normalmente dichos errores se cometen en el SQL.
$result = mysql_db_query("basededatos",$sql) or die("error en <b>$sql</b> :".mysql_error());

Saludos
  #3 (permalink)  
Antiguo 17/10/2004, 10:04
yoe
 
Fecha de Ingreso: marzo-2003
Mensajes: 74
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola jpinedo,

tenías razón en que no era la función mysql_fetch_array.

El problema estaba en el bucle while.

Si lo elimino y utilizo directamente la expresión $row_content = mysql_fetch_array($result)); , funciona correctamente.

No entiendo muy bien a qué se debe, pues aunque solamente tenga un registro el array debería funcionar el bucle.

De todas formas, no me termina de convencer la forma de seleccionar el id de la tabla madre.

No sé si en php puede existir alguna función o variable de sistema que en el momento de realizar un insert tome la id del mismo.

¿Hay algo parecido?

Gracias,
  #4 (permalink)  
Antiguo 17/10/2004, 10:48
yoe
 
Fecha de Ingreso: marzo-2003
Mensajes: 74
Antigüedad: 21 años, 1 mes
Puntos: 0
Id de autoincrementable tras un INSERT

Hola, para quien le pueda valer, pego la función que que devuelve el Id de un campo autoincrementable en php tras un INSERT.

Del manual de php...

mysql_insert_id
(PHP 3, PHP 4 )

mysql_insert_id -- Devuelve el identificador generado en la última llamada a INSERT
Descripción

int mysql_insert_id ([int identificador_de_enlace])

mysql_insert_id() devuelve el identificador generado para un campo de tipo AUTO_INCREMENTED. Se devolvera el identificador genrado por el último INSERT para el identificador_de_enlace. Si no se especifica el identificador_de_enlace, se asume por defecto el último enlace abierto.


Saludos,
  #5 (permalink)  
Antiguo 17/10/2004, 21:02
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por yoe
El problema estaba en el bucle while.

Si lo elimino y utilizo directamente la expresión $row_content = mysql_fetch_array($result)); , funciona correctamente.

No entiendo muy bien a qué se debe, pues aunque solamente tenga un registro el array debería funcionar el bucle.
yoe:
Lo que está pasando es que estás generando un conflicto con el nombre de la variable $result. Si te das cuenta el while utiliza esa variable, y tú la modificas dentro (cosa que no debería pasar).... además, almacenar el resultado en una variable sólo tiene utilidad en consultas como SELECT... en un INSERT no hace falta.
O sea que no es necesario redefinir esa variable.
Código PHP:
$result mysql_db_query("basededatos",$sql) or die (mysql_error());

//Insertamos en pages_content (tabla hija). 
while ($row_content mysql_fetch_array($result))
{
$sql 'INSERT INTO `pages_contents` ( `content_id` , `content_page_id` , `content_page_titlei` , `content_page_text` , `content_page_image` ) '
' VALUES ( \'\', \''.$row_content['page_id'].'\', \''.$content_page_titlei.'\', \''.$content_page_texti.'\', \''.$content_page_imagei.'\' );'
' '
//Acá haces el query sin almacenarlo en ninguna variable.
mysql_db_query("basededatos",$sql);

Ahora... si tuvieras el caso en que no hay INSERT, sino SELECT y necesitas almacenar ese valor del resultado.... simplemente le cambias de nombre a alguna de las variables para que no entren en conflicto.

Saludos
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:26.