Diferencia entre revisiones de «Usuario:ManuelRomero/NewPHP/B2T8/BasesDatos/practica»

De WikiEducator
Saltar a: navegación, buscar
 
(39 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
{{:Usuario:ManuelRomero/dwes/B2T8/BasesDatos/nav}}
+
<div id=parrafo>
 
__TOC__
 
__TOC__
===Actividad Gestor BD con  CRUD básico===
+
 
{{MRM_Actividad|Title=Realizar un gestor básido con acciones CRUD|
+
===Actividad 1 Gestor BD con  CRUD básico===
 +
<br/>
 +
{{MRM_Actividad|Title=Realizar un gestor básico con acciones CRUD|
 
Vamos a realizar una pequeña aplicación que me permita gestionar a nivel básico la bd.
 
Vamos a realizar una pequeña aplicación que me permita gestionar a nivel básico la bd.
 
Concretamente me permitirá
 
Concretamente me permitirá
 
#Visualizar las bases de datos
 
#Visualizar las bases de datos
 
#Al seleccionar una de ellas, visualizar sus tablas
 
#Al seleccionar una de ellas, visualizar sus tablas
#Al seleccionar una de ellas, ver su contenido y realizar aciones de insertar, borrar o modificar cada fila
+
#Al seleccionar una de ellas, ver su contenido y realizar acciones de insertar, borrar o modificar cada fila
 
*A continuación las especificaciones concretas
 
*A continuación las especificaciones concretas
 
}}
 
}}
 
{{MRM_Actividad|Title=Requisitos no funcionales|
 
{{MRM_Actividad|Title=Requisitos no funcionales|
*Las accoines sobre la base de datos se realizarán en una clase llamada BD.php}}
+
*Las acciones sobre la base de datos se realizarán en una clase llamada BD.php}}
 
+
{{MRM_Recursos de la Web|Title =GRUD funcionando|
 +
*Puedes ver la idea del objetivo de esta práctica en esta ubicación
 +
*Dependiendo de la base de datos o tabla pueden fallar algunas acciones por integridad establecida
 +
*Por defecto se puede conectar a un servidor bd dokerizado (ip 172.17.0.2 y root-root como credenciales), pero se puede probar con otro host que tengo un gestor de bases de datos.
 +
*Los datos de la conexión a la base de datos dockerizada aparecen en el mensaje superior  inicial.
 +
;http://manuel.infenlaces.com/dwes/BD/
 +
}}
  
 
====Requisito 1 Visualizar la base de datos====
 
====Requisito 1 Visualizar la base de datos====
Línea 18: Línea 26:
 
*Se ha de implementar las acciones de la base de datos en una clase llamada '''''BD.php''''' (base de datos)
 
*Se ha de implementar las acciones de la base de datos en una clase llamada '''''BD.php''''' (base de datos)
 
*Para incluir las diferentes clases usaremos la función '''''autoload''''' de php
 
*Para incluir las diferentes clases usaremos la función '''''autoload''''' de php
*Observar que es una fución que se invoca de forma implícita cuando instancimos un objeto de una clase
+
*Observar que es una función que se invoca de forma implícita cuando instancimos un objeto de una clase
 
*La función tiene un parámetro, el cual es una función anónima (sin nombre) con un parámetro que es el nombre de la clase
 
*La función tiene un parámetro, el cual es una función anónima (sin nombre) con un parámetro que es el nombre de la clase
*Es en el cuerpo de esta función  (parámetro de '''''spl_autoload_register'''''), donde realizamos el require del fichero con la clase correspondiente
+
*Es en el cuerpo de esta función  (parámetro de '''''spl_autoload_register'''''), donde realizamos el '''require''' del fichero con la clase correspondiente
 
{{Tip|Para poder usar el autoload y siguiendo las buenas prácticas de programación, debemos guardar las clases en ficheros con el mismo nombre}}
 
{{Tip|Para poder usar el autoload y siguiendo las buenas prácticas de programación, debemos guardar las clases en ficheros con el mismo nombre}}
 
<source lang=php>
 
<source lang=php>
Línea 29: Línea 37:
 
*Lo primero que debe de aparecer es un formulario con la lista de todas las tablas  
 
*Lo primero que debe de aparecer es un formulario con la lista de todas las tablas  
 
*Cada tabla será mostrada con un botón de tipo submit
 
*Cada tabla será mostrada con un botón de tipo submit
[[Archivo:appBD_CRUD_caso1.png|800px|center]]<br />
+
[[Archivo:appGBD_CRUD_caso1B.png|800px|center]]<br />
 
*Un posible ejemplo de cómo quedaría
 
*Un posible ejemplo de cómo quedaría
[[Archivo:appBD_CRUD_pantalla1.png|800px|center]]<br />
+
[[Archivo:appGBD_CRUD_pantalla1.png|800px|center]]<br />
 
*Para el css podemos usar simplemente este código o podéis cambiarlo un poco  
 
*Para el css podemos usar simplemente este código o podéis cambiarlo un poco  
  
{{Desplegable|hide|
+
{{Plegable|hide|Fichero css para estilos|
 
<source lang=css>
 
<source lang=css>
 
fieldset{
 
fieldset{
Línea 64: Línea 72:
 
</source>
 
</source>
 
}}
 
}}
 
+
*A continuación un posible index, usa una clase BD con los métodos de la base de datos
 +
*Puedes usarlo de ejemplo o construirte uno propio '''''index.php'''''
  
 
====Requisito 2 Visualizar la base de datos====
 
====Requisito 2 Visualizar la base de datos====
 +
Una vez seleccionada una base de datos, veremos todas las tablas que tiene la base de datos.<br /> Una idea es visualizarlas en botones de tipo submit con el nombre de la tabla.<br />
 +
Todo esto lo implementaremos en un fichero llamado '''''tablas.php'''''.<br />
 +
En esta  página daremos la opción de volver a la página anterior para poder seleccionar otra base de datos diferente o conectarnos a otro servidor
 +
El caso de uso se muestra muy sencillo<br >:
 +
[[Archivo:appGBD_CRUD_caso2.png|800px|center]]<br />
 +
*Un posible ejemplo de cómo quedaría
 +
[[Archivo:appGBD_CRUD_pantalla2.png|800px|center]]<br />
 
====Requisito 3 Visualizar la base de datos====
 
====Requisito 3 Visualizar la base de datos====
 +
*Este requisito lo implementamos en el fichero '''''gestionarTabla.php'''''
 +
*Ahora se trata de visualizar el contenido de la base de datos.
 +
*Tendremos que obtener los nombres de los campos.
 +
*Crear una tabla en html donde la primera fila serán los nombres de los campos, y luego cada registro en una fila.
 +
*Cada registro lo podremos editar (para cambiar) o borrar, esto lo gestionaremos con un botón en cada fila *En la tabla tendremos la acción de Insertar para crear un nuevo registro o cancelar para volver a la página anterior (tablas.php), y tener la posibilidad de visualizar otra tabla.
 +
*Veamos un diagrama de caso de uso con todas las posibles acciones.
 +
[[Archivo:appGBD_CRUD_caso3.png|800px|center]]
 +
<br/>
 +
*Este caso de uso es mas amplio que los anteriores, por ello vamos a ir resolviendo cada apartado
 +
# R3.1 Visualizar los datos
 +
# R3.2 Editar para modificar
 +
# R3.3 Borrar
 +
# R3.4 Insetar un nuevo registro
 +
# R3.4 Volver a ver las tablas
  
 +
=====Visualizar los datos=====
 +
Esta es la parte principal del requisito 3. Recibimos la tabla seleccionada por POST (Submit que nos trae a este script), necesitamos también la base de datos que nos puede venir en un '''input''' de tipo '''hidden'''.
  
 +
=====Borrar =====
 +
*Para cubrir este objetivo lo que haremos es añadir en cada fila un botón de borrar y otro de editar
 +
*Al principio del script analizaremos qué botón he presionada, tendiendo las siguientes posibilidades
 +
#Borrar
 +
#Editar
 +
#Insertar
 +
#Cancelar
 +
#Venimos de la página tablas.php
 +
*Lo que haremos es en función de qué acción nos haya traído a esta página, realizar unas acciones u otras que analizaremos en un '''switch case'''.
 +
*Todos los submit tendrán el atributo '''''name''''' a '''''gestionar'''''
 +
*En este caso vamos a implementar la acción borrar que escribiremos en una función llamada '''''borrar'''''.
 +
*Como podemos observar pasamos el nombre de la tabla
 +
La acción borrar se verá por que el registro no aparecerá ya
 +
[Archivo:]
 +
Después de darle a borrar
 +
[Arhivo:]
  
 
+
===Insertar===
===Borrar para crear un formulario por cada fila ===
+
*Tomaremos a partir del diccionario de datos los campos de la tabla y construiremos un formulario
*Necesito tener en cada formulario
+
*En esta caso no vamos a tener en cuenta campo de tipo autogenerados, ni restricciones de clave primaria/foránea, por lo que puede que alguna inserción no funcione.
#nombre de base de datos '''''$basedatos'''''
+
{{Plegable|hide|Código de insertar.php|
#nombre de tabla '''''$t'''''
+
#nombre de los campos de la fila '''''$campos[]'''''
+
#valores de la fila para cada campo '''''$valores[]'''''
+
<source lang=php>
+
  echo "\n <form action='gestionarTablas.php'  method='post'>\n";
+
                        $i = 0;
+
                        echo "\n <input type =hidden value =$t  name = 'tabla'> \n";
+
                        echo "\n <input type =hidden value = $basedatos  name ='basedatos' > \n";
+
 
+
                        foreach ($fila as $valor) {
+
                            echo "<td>$valor</td>/n";
+
 
+
                            echo "\n<input type =hidden value ='" . $campos[$i]->name . "'  name = campos[]>\n";
+
                            echo "\n<input type =hidden value = $valor  name = valores[]>\n";
+
                            $i++;
+
                        }
+
                        ?>
+
                    <td><input id=tabla type="submit" value="Edit" name="gestionar"></td>
+
                    <td><input id=tabla type="submit" value="Del" name="gestionar"></td>
+
                    </form>
+
 
+
</form>
+
*Función de borrar
+
 
+
<source lang=php>
+
**
+
* función usada para borrar
+
* Aquí puedo leer el input registros que contendrá todos los campos
+
*/
+
function borrar($tabla, $database) {
+
    //He de leer todos los campos de esa fila que quiero borrar (nombre de campo y valor)
+
    $nombreCampos = $_POST['campos'];
+
    $valores = $_POST['valores'];
+
    //Construimos la sentencia sql
+
    $registro = array_combine($nombreCampos, $valores);
+
    $sentencia = "delete from $tabla where ";
+
    $condicion="";
+
    foreach ($registro as $campo => $valor) {
+
        $condicion .=" ($campo = '$valor') and ";
+
    }
+
 
+
    $condicion = substr($condicion, 0, strlen($condicion) - 4);
+
    $sentencia = "delete from $tabla where $condicion";
+
    $db = new BD();
+
    $db->usar_BD("database");
+
    $db->borrar($sentencia);
+
    echo "<h1> condicion = $condicion , <br /> sentencia = $sentencia </h1> ";
+
    $db->cerrarDB();
+
    ;
+
}
+
</source>
+
 
+
 
+
 
+
*A continuación lo que puedo hacer es seleccionar una tabla
+
*Para ello presionamos sobre una tabla  y obtendremos un listado organizado en forma de tabla con los datos de todos los registros
+
*No se podrá modificar sus contendios, por lo que no deberían de ser inputs
+
*La tabla usamos una típica de html
+
*En un caso real se usaría '''''database''''' https://datatables.net/  de jquery con ajax, pero aquí limitaremos a visualizar solo los datos
+
<source lang=html>
+
<table id="table_id" class="display">
+
    <thead>
+
        <tr><!--Nombres de los campos -->
+
            <th>Column 1</th>
+
            <th>Column 2</th>
+
        </tr>
+
    </thead>
+
    <tbody>
+
        <tr><!-- contenidos para cada campo del primer registros-->
+
            <td>Row 1 Data 1</td>
+
            <td>Row 1 Data 2</td>
+
        </tr>
+
        <tr><!-- Otra fila, repetiremos tantas filas como haya-->
+
            <td>Row 2 Data 1</td>
+
            <td>Row 2 Data 2</td>
+
        </tr>
+
    </tbody>
+
</table>
+
</source>
+
*Este sería el diagrama de caso de uso
+
[[Archivo:appBD_CRUD_caso2_.png|800px|center]]<br />
+
*Un posible listado sería como sigue
+
[[Archivo:appBD_CRUD_pantalla2.png|500px|center]]<br />
+
 
+
*En esa  ventana tendremos 4 opciones que son las operaciones básicas con una base de datos
+
;Add
+
*Esta opción añadirá un nuevo registro
+
*El caso de uso se puede representar en el siguiente diagrama
+
[[Archivo:appBD_CRUD_caso_add.png|800px|center]]<br />
+
;Update
+
*Mostrará un listado solo del campo clave con los diferentes registros
+
*Podremos elegir uno (en caso de querer cambiar solo uno) o no elegir nada (cambiaremos todos)
+
*Escribiremos valores en los input de los campos que queramos cambiar, lo que no queramos cambiar quedará en blanco
+
[[Archivo:appBD_CRUD_caso_update.png|800px|center]]<br />
+
;Delete
+
*Mostrará un listado solo del campo clave con los diferentes registros
+
*Podremos elegir uno (en caso de querer borrar ese registro) o no elegir nada (borraremos todos los que cumplan condición)
+
*Se rellenará los campos cuyo criterio será el que se tenga en cuenta para borrar.
+
[[Archivo:appBD_CRUD_caso_delete.png|800px|center]]<br />
+
*Mostrará un listado solo del campo clave con los diferentes registros
+
[[Archivo:appBD_CRUD_caso_edit.png|800px|center]]<br />
+
;Cerrar
+
[[Archivo:appBD_CRUD_caso_cerrar.png|800px|center]]<br />
+

Última revisión de 22:49 21 ene 2019

Actividad 1 Gestor BD con CRUD básico



Icon activity.jpg
Realizar un gestor básico con acciones CRUD

Vamos a realizar una pequeña aplicación que me permita gestionar a nivel básico la bd. Concretamente me permitirá

  1. Visualizar las bases de datos
  2. Al seleccionar una de ellas, visualizar sus tablas
  3. Al seleccionar una de ellas, ver su contenido y realizar acciones de insertar, borrar o modificar cada fila
  • A continuación las especificaciones concretas





Icon activity.jpg
Requisitos no funcionales
  • Las acciones sobre la base de datos se realizarán en una clase llamada BD.php




Icon inter.gif
GRUD funcionando
  • Puedes ver la idea del objetivo de esta práctica en esta ubicación
  • Dependiendo de la base de datos o tabla pueden fallar algunas acciones por integridad establecida
  • Por defecto se puede conectar a un servidor bd dokerizado (ip 172.17.0.2 y root-root como credenciales), pero se puede probar con otro host que tengo un gestor de bases de datos.
  • Los datos de la conexión a la base de datos dockerizada aparecen en el mensaje superior inicial.
http://manuel.infenlaces.com/dwes/BD/


Requisito 1 Visualizar la base de datos

  • Se trata de realizar una práctica para administrar una base de datos cualquiera
  • Se ha de implementar las acciones de la base de datos en una clase llamada BD.php (base de datos)
  • Para incluir las diferentes clases usaremos la función autoload de php
  • Observar que es una función que se invoca de forma implícita cuando instancimos un objeto de una clase
  • La función tiene un parámetro, el cual es una función anónima (sin nombre) con un parámetro que es el nombre de la clase
  • Es en el cuerpo de esta función (parámetro de spl_autoload_register), donde realizamos el require del fichero con la clase correspondiente
Icon present.gif
Tip: Para poder usar el autoload y siguiendo las buenas prácticas de programación, debemos guardar las clases en ficheros con el mismo nombre


spl_autoload_register(function ($clase) {
    require_once "$clase.php";}
);
  • Lo primero que debe de aparecer es un formulario con la lista de todas las tablas
  • Cada tabla será mostrada con un botón de tipo submit
AppGBD CRUD caso1B.png

  • Un posible ejemplo de cómo quedaría
AppGBD CRUD pantalla1.png

  • Para el css podemos usar simplemente este código o podéis cambiarlo un poco
  • A continuación un posible index, usa una clase BD con los métodos de la base de datos
  • Puedes usarlo de ejemplo o construirte uno propio index.php

Requisito 2 Visualizar la base de datos

Una vez seleccionada una base de datos, veremos todas las tablas que tiene la base de datos.
Una idea es visualizarlas en botones de tipo submit con el nombre de la tabla.
Todo esto lo implementaremos en un fichero llamado tablas.php.
En esta página daremos la opción de volver a la página anterior para poder seleccionar otra base de datos diferente o conectarnos a otro servidor El caso de uso se muestra muy sencillo
:

AppGBD CRUD caso2.png

  • Un posible ejemplo de cómo quedaría
AppGBD CRUD pantalla2.png

Requisito 3 Visualizar la base de datos

  • Este requisito lo implementamos en el fichero gestionarTabla.php
  • Ahora se trata de visualizar el contenido de la base de datos.
  • Tendremos que obtener los nombres de los campos.
  • Crear una tabla en html donde la primera fila serán los nombres de los campos, y luego cada registro en una fila.
  • Cada registro lo podremos editar (para cambiar) o borrar, esto lo gestionaremos con un botón en cada fila *En la tabla tendremos la acción de Insertar para crear un nuevo registro o cancelar para volver a la página anterior (tablas.php), y tener la posibilidad de visualizar otra tabla.
  • Veamos un diagrama de caso de uso con todas las posibles acciones.
AppGBD CRUD caso3.png


  • Este caso de uso es mas amplio que los anteriores, por ello vamos a ir resolviendo cada apartado
  1. R3.1 Visualizar los datos
  2. R3.2 Editar para modificar
  3. R3.3 Borrar
  4. R3.4 Insetar un nuevo registro
  5. R3.4 Volver a ver las tablas
Visualizar los datos

Esta es la parte principal del requisito 3. Recibimos la tabla seleccionada por POST (Submit que nos trae a este script), necesitamos también la base de datos que nos puede venir en un input de tipo hidden.

Borrar
  • Para cubrir este objetivo lo que haremos es añadir en cada fila un botón de borrar y otro de editar
  • Al principio del script analizaremos qué botón he presionada, tendiendo las siguientes posibilidades
  1. Borrar
  2. Editar
  3. Insertar
  4. Cancelar
  5. Venimos de la página tablas.php
  • Lo que haremos es en función de qué acción nos haya traído a esta página, realizar unas acciones u otras que analizaremos en un switch case.
  • Todos los submit tendrán el atributo name a gestionar
  • En este caso vamos a implementar la acción borrar que escribiremos en una función llamada borrar.
  • Como podemos observar pasamos el nombre de la tabla

La acción borrar se verá por que el registro no aparecerá ya [Archivo:] Después de darle a borrar [Arhivo:]

Insertar

  • Tomaremos a partir del diccionario de datos los campos de la tabla y construiremos un formulario
  • En esta caso no vamos a tener en cuenta campo de tipo autogenerados, ni restricciones de clave primaria/foránea, por lo que puede que alguna inserción no funcione.
{{Plegable|hide|Código de insertar.php|