En esta ocasión vamos a hacer un formulario de alta para una tabla que tiene campos de otras tablas, es decir, tiene llaves foráneas, el valor que se suministrara para estos campos no será capturado, si no que al forzarse la integridad referencial tendrán que existir una consultas previas que vuelquen el resultado de las mismas en controles de formularios, que serán listas desplegables. Primeramente veamos la apariencia del formulario:

El formulario es para la entrada de datos de la tabla libro, del ejercicio biblioteca, las tablas las creamos en un post anterior: http://www.cursostapachula.com/blog/2011/10/crear-base-de-datos-y-tablas-ejercicio-3-biblioteca/ La tabla libro posee 6 campos, los tres primeros: ISBN, Titulo y Tema, son campos propios de la misma tabla, mientras que los 3 restantes clave_autor, clave_editoria y numero_estanteria, son llaves foráneas, por lo tanto pertenecen a otras tablas. Como en la generación de las tablas forzamos la integridad referencias usando el motor de base de datos innodb, entonces estos campos no han de ser capturados desde una caja de texto, si no que tienen que ser elegidos de entre los registros ya existentes de las tablas de donde provienen dichos campos.

En otras palabras, para elegir el valor para clave_autor se tendrá que hacer previamente una consulta a la tabla autor, para recoger las claves de autores que tenemos dados de alta y los pondremos en una lista desplegable (drop list) para que en el nuevo formulario de captura se puedan elegir. Lo mismo sucede con el campo clave_editorial, tras una previa consulta a la tabla editorial volcaremos las claves de las editoriales en una drop list; tanto la clave del autor como la clave de la editorial, las haremos acompañar de su nombre, para que sea más fácil la identificación. En el caso del número de estantería, al carecer de nombre los registros de esta tabla, nos limitaremos a volcar sobre la drop list, únicamente los números de estanterías disponibles. Veamos el código del formulario inicial, que está dispuesto en un script de php, ya que se inicia con una consulta. Este código hay que escribirlo en un archivo de texto plano, nosotros los nombramos alta_libro.php:

<?php

include(“conexion.php”);

 

$cadena1=”select clave_autor, nombre from autor;”;

$cadena2=”select clave_editorial, nombre from editorial;”;

$cadena3=”select numero_estanteria from estanteria;”;

 

 

$consulta1=mysql_query($cadena1, $conexion);

$consulta2=mysql_query($cadena2, $conexion);

$consulta3=mysql_query($cadena3, $conexion);

 

mysql_close($conexion);

 

 

echo “<form action=’alta_libro2.php’ method=’post’>

<table>

<tr>

<td>ISBN:</td>

<td><input type=’text’ name=’isbn’></td>

</td>

</tr>

<tr>

<td>Titulo:</td>

<td><input type=’text’ name=’titulo’></td>

</tr>

<tr>

<td>Tema:</td>

<td><input type=’text’ name=’tema’></td>

</tr>

 

<tr>

<td>Clave Autor:</td>

<td><select name=’clave_autor’>”;

while ($row = mysql_fetch_row($consulta1)){

echo “<option value='”.$row[0].”‘>”.$row[0].”, “.$row[1].”</option>”;

}

echo “</select>

</td>

</tr>

<tr>

<td>Clave Editorial:</td>

<td><select name=’clave_editorial’>”;

while ($row = mysql_fetch_row($consulta2)){

echo “<option value='”.$row[0].”‘>”.$row[0].”, “.$row[1].”</option>”;

}

echo “</select>

</td>

</tr>

 

<tr>

<td>Numero Estanteria:</td>

<td><select name=’numero_estanteria’>”;

while ($row = mysql_fetch_row($consulta3)){

echo “<option value='”.$row[0].”‘>”.$row[0].”</option>”;

}

echo “</select>

</td>

</tr>

 

 

<td colspan=’2′ align=’center’><input type=’submit’ value=’Alta’></td>

</tr>    

 

</table>

 

</form>”;

?>

En el código lo primero que hicimos fue llamar a otro script de php llamado “conexión.php”

include(“conexion.php”);

En ese otro script ejecutamos un par de líneas, una que es la encargada de establecer la conexión con el servidor mysql, y la segunda línea es la encargada de poner en uso la base de datos biblioteca, echemos un vistazo a ese otro script:

Siguiendo en el código de “alta_libro.php” en las líneas siguientes:

$cadena1=”select clave_autor, nombre from autor;”;

$cadena2=”select clave_editorial, nombre from editorial;”;

$cadena3=”select numero_estanteria from estanteria;”;

Se establecen tres variables, que guardan cadenas de instrucciones mysql, estas instrucciones son las consultas que necesitamos hacer a las tablas correspondientes a las llaves foráneas (autor, editorial y estantería) de la tabla libro.

En las tres líneas que le siguen se ejecutan las consultas y el resultado se guardan en variables:

$consulta1=mysql_query($cadena1, $conexion);

$consulta2=mysql_query($cadena2, $conexion);

$consulta3=mysql_query($cadena3, $conexion);

Después se inicia el formulario insertado los controles para recoger los valores para los campos que son propios de la tabla, es decir los campos que no vamos a necesitar hacer una consulta para obtener los valores:

echo “<form action=’alta_libro2.php’ method=’post’>

<table>

<tr>

<td>ISBN:</td>

<td><input type=’text’ name=’isbn’></td>

</td>

</tr>

<tr>

<td>Titulo:</td>

<td><input type=’text’ name=’titulo’></td>

</tr>

<tr>

<td>Tema:</td>

<td><input type=’text’ name=’tema’></td>

</tr>

Dentro de ese mismo formulario se insertan los controles de listas desplegables, donde se vuelcan las consultas previamente hechas, para que de los valores resultantes de las consultas se elija el valor para el registro de la tabla libro:

<tr>

<td>Clave Autor:</td>

<td><select name=’clave_autor’>”;

while ($row = mysql_fetch_row($consulta1)){

echo “<option value='”.$row[0].”‘>”.$row[0].”, “.$row[1].”</option>”;

}

echo “</select>

</td>

</tr>

<tr>

<td>Clave Editorial:</td>

<td><select name=’clave_editorial’>”;

while ($row = mysql_fetch_row($consulta2)){

echo “<option value='”.$row[0].”‘>”.$row[0].”, “.$row[1].”</option>”;

}

echo “</select>

</td>

</tr>

<tr>

<td>Numero Estanteria:</td>

<td><select name=’numero_estanteria’>”;

while ($row = mysql_fetch_row($consulta3)){

echo “<option value='”.$row[0].”‘>”.$row[0].”</option>”;

}

echo “</select>

</td>

</tr>

<td colspan=’2′ align=’center’><input type=’submit’ value=’Alta’></td>

</tr>    

</table>

</form>”;

?>

Una vez cerrado el último control, la tabla donde fueron organizados todos los controles y el formulario que los contiene   finaliza nuestro script.

Los datos capturados y seleccionados en este script son enviados otro script, el cual nosotros llamados alta_libro2.php, este script es el encargado de inserta el nuevo registro en la tabla libro, el código quedaría de la siguiente forma:

<?php

include(“conexion.php”);

$isbn=$_POST[‘isbn’];

$titulo=$_POST[‘titulo’];

$tema=$_POST[‘tema’];

$clave_autor=$_POST[‘clave_autor’];

$clave_editorial=$_POST[‘clave_editorial’];

$numero_estanteria=$_POST[‘numero_estanteria’];

$cadena=”insert into libro values(‘$isbn’, ‘$titulo’, ‘$tema’, ‘$clave_autor’, ‘$clave_editorial’, ‘$numero_estanteria’);”;

$insercion=mysql_query($cadena, $conexion);

if($insercion)

{

echo “Registro insertado correctamente”;

}

else

{

echo “Ocurrio un error el registro no fue insertado correctamente”;

}

mysql_close($conexion);

echo “<form name=” action=’alta_libro.php’>”;

echo “<input type=’submit’ value=’Regresar’>”;

echo “</form>”;

?>

Lo primero que hacemos en este segundo script es que él valor las variables que recibimos las pasamos a unas variables de nombres más corto:

$isbn=$_POST[‘isbn’];

$titulo=$_POST[‘titulo’];

$tema=$_POST[‘tema’];

$clave_autor=$_POST[‘clave_autor’];

$clave_editorial=$_POST[‘clave_editorial’];

$numero_estanteria=$_POST[‘numero_estanteria’];

Después de eso creamos una variable llamada “$cadena” donde le asignamos el valor de la cadena de la sentencia mysql (insert) que vamos a ejecutar:

$cadena=”insert into libro values(‘$isbn’, ‘$titulo’, ‘$tema’, ‘$clave_autor’, ‘$clave_editorial’, ‘$numero_estanteria’);”;

Paso  seguido con la función mysql_query ejecutamos la sentencia mysql, y el resultado lo guardamos en una variable llamada “$insercion”.

$insercion=mysql_query($cadena, $conexion);

Validamos que la inserción se haya llevado a cabo correctamente:

if($insercion)

{

echo “Registro insertado correctamente”;

}

else

{

echo “Ocurrio un error el registro no fue insertado correctamente”;

}

Cerramos la conexión con mysql:

mysql_close($conexion);

Y finalmente insertamos un formulario con un único botón que nos regresara al formulario de captura inicial:

echo “<form name=” action=’alta_libro.php’>”;

echo “<input type=’submit’ value=’Regresar’>”;

echo “</form>”;

 

Y con esto terminamos el programa de captura para la tabla libro, cualquier error con el código o duda que surguiera favor de dejar un comentario. Estamos para servirles.

Powered By DT Author Box

Written by chris

Alta con consulta volcada en drop list.

10 thoughts on “Alta con consulta volcada en drop list.

  • Hola Josue, el mal funcionamiento puede ser por varias causas, como que este mal instalado, que haya otro servidor Web funcionando como el ISS de MS, etc. Lo tenemos que ver en la clase para arreglarlo. Al final de la clase me dices y con mucho gusto vemos que podemos hacer. SaluLINUX y gracias por visitar el blog.!

  • hola! ya tengo los 2 codigo en notepad. lo que es referente a altas_libro-php es ese no tengo problemas en el 2do. de altas_libro2.php en este me marca una serie de errores de declaraciones de variables en las filas 3,4,5,6,7,8. pero ya verifique mis variables y si coinciden, reinicie los servidores por si tiene algo que ver..pero uno no encuentro el error q podria ser????

    1. Si probablemente el error viene de como tu apuntas, el nombre de las variables. Mañana tendremos un par de horas en el laboratorio. Abordame ahi con tu código y con mucho gusto resolvemos el problema. Estamos para servirte Raul.

  • Hola, estoy comenzando con esto de las B.D. tengo un modelo E-R y lo tengo que convertir a relacional en mysql pero tengo aun varios errores, no sé como contactarlo me gustaría me pudiera ayudar porfavor, no entiendo las clases de mi profesor =/

      1. Bueno, en el lugar donde me encuentro ahorita estan bloqueadas las descargas desde megaupload.. y rapidshare!! =( de todos modos ahorita mismo en esta semana me encuentro bien golpeado en cuanto a tiempo por lo del taller de mtto. en el itt, pero el wknd me voy a poner a mano con todos los que han posteado dudas en el blog, LO JURO! de momento puedes revisar por ahi entre las publicaciones haber si te saca de duda, tengo 3 ejercicios donde convierto de E-R a relacional..!! y esos mismos luego los paso a mysql, pero si no mandame de preferencia tu diagrama a mi mail christian_olvera@hotmail.com de preferencia hechecito en DIA, para que el fin de semana lo revise vale? un saludo enorme y gracias por seguir este humilde blog!

        1. Listo se lo he enviado a su correo, muchisimas gracias a usted por responder, estaré al pendiente de su nueva respuesta =) muchas gracias nuevamente.

    1. Gracias por el interés mostrado. Hoy por la mañana subí la interfaz de eliminación. Cualquier duda, deja tu pregunta en el libro de visitas. Gracias por leer el blog, estamos para servirles.

Leave a Reply

Follow

Get every new post delivered to your Inbox

Join other followers:

%d bloggers like this: