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

De WikiEducator
Saltar a: navegación, buscar
(Ejercicio 3: Mostrar bases de datos y tablas)
 
(14 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/dwes/B2T8/BasesDatos/nav}}
 
{{:Usuario:ManuelRomero/dwes/B2T8/BasesDatos/nav}}
 
<br />
 
<br />
 +
==Ejercicios básicos==
 +
;Realiza los siguientes ejercicios
  
{{Nota|
+
===Ejercicio 1: Conexión con mysql===
'''''Para todos los ejercicios'''''
+
<br />
*Al menos debe de haber 3 atributos por cada entidad
+
{{MRM_Actividad|Title=Conexión con mysql|
*Se debe de especificar un atributo (o conjunto de atributos) que constituyan la clave para cada entidad
+
*Realiza una conexión a una base de datos utilizando el conectori '''''mysqli'''''
 +
*Previamente has de crear la base de datos con una tabla
 +
<source lang=sql>
 +
create database usuarios;
 +
use  usuarios;
 +
        create table usuario(
 +
              id int not null unique auto_inccremet,
 +
              nombre varchar(40) unique,
 +
              password varchar(200),
 +
        )
 +
</source>
 +
*Los parámetros de conexión se establecerán en un formulario
 +
*Una vez conectado nos mostrará la siguiente información:
 +
(https://www.php.net/manual/es/class.mysqli.php)
 +
#Versión usada en el cliente (int $client_version;)
 +
#Información del host (''string $host_info'')
 +
#versión del protocolo utilizado string $protocol_version;
 +
#información del servidor (string $server_info)
 +
#Versión utilizada en el servidor de bases de datos (int $server_version);
 +
*En el caso de que no hayamos conectado nos mostrará el código de error y una descripción del mismo
 +
*La aplicación deberá cerrar la conexión
 
}}
 
}}
  
 +
===Ejercicio 2: Conexión con mysql con fichero ini para leer parámetros===
 +
<br/>
 +
{{MRM_Actividad|Title=Conexión con mysql desde un fichero ini|
 +
*Modifica el ejercicio anterior permitiendo que los datos de conexión se aporten en un fichero ini (parse_ini_file)
 +
https://www.php.net/manual/es/function.parse-ini-file.php
 +
}}
  
===Base de datos de Empleados===
+
===Ejercicio 3: Mostrar bases de datos y tablas===
 
<br />
 
<br />
{{MRM_Actividad|Title=Especificación|
+
{{MRM_Actividad|Title=Mostrar bases de datos|
*Se quiere guardar datos de empleados.
+
*Modifica la aplicación anterior con los siguientes requisitos
*Hay equipos de empleados con determinadas funciones.
+
*Nos conectamos al gestor de base de datos (no a una  base de datos concreta.
*Cada empleado tiene un supervisor que es otro empleado más.
+
*Tenemos un submit que nos permitirá ver las bases de datos
*Un empleado puede tener varios supervisores.
+
*Al presionar nos aparecerán tantos submit como bases de datos tenemos
*Cada equipo tiene un jefe
+
*Seleccionando una base de datos concreta (haciendo submit) mostraremos loas tablas que hay en esa base de datos
*Un jefe lo es solo de un equipo.
+
*A parte de ello cada equipo tiene un jefe que es un empleado que pertenece al equipo
+
[[Archivo:modelo_empleado.png]]<br />
+
[[Archivo:modelo_empleado2.png]]<br />
+
 
}}
 
}}
{{MRM_Actividad|Title=Biblioteca|
 
  
*Hay alumnos (datos personales, dni, edad y dirección e idiomas que habla).
+
===Ejercicio 4: Mostrar en contenido de una tabla===
*Tenemos libros (autores, editorial, isbn, título, tema)
+
*Ûn alumno puede tomar prestados varios libros
+
*Cada libro en un momento dado, solo lo puede tener físicamente una alumna.
+
*Queremos mantener información de todos los libros que haya podido tener un determinado alumno
+
*Cuando un alumno toma prestado un libro anotaremos la fecha del préstamo. La fecha prevista de devolución será 15 días naturales la fecha del préstamo.
+
*Anotaremos la fecha real de devolución.
+
*Las personas pueden tener penalizaciones que será o de un importe o de un tiempo sin poder tomar prestados libros cuando la fecha real de devolución sea posterior a la fecha prevista.
+
}}
+
{{MRM_Actividad|Title=Universidad|
+
*El departamento de relaciones públicas de la Universidad pretende construir una aplicación informática capaz de proporcionar información acerca de su organización docente, mediante consultas realizadas a una base de datos que contenga toda la información necesaria. Un primer contacto con responsables de la instrucción permite concluir que:
+
# La Universidad se encuentra estructurada en Departamentos, cada uno de los cuales integra una o más Áreas de Conocimiento. Evidentemente, no puede haber Áreas de Conocimiento que pertenecen a Departamentos diferentes.
+
# Todo profesor está adscrito a una única Área de Conocimiento, pudiendo darse el caso de que, transitoriamente, un Área no tenga profesores.
+
# Cada una de las diferentes titulaciones ofertadas por la Universidad consta de una serie de asignaturas, dándose algunos casos de asignaturas comunes a varias titulaciones. La impartición de cada una de ellas es encargada a una de las Áreas de Conocimiento existentes.
+
# El Departamento establece las asignaturas que debe impartir cada profesor, siendo frecuente que en la impartición de una asignatura participen dos profesores. No obstante, hay algunos casos extraordinarios en los que intervienen 3 o más profesores.
+
# Tanto los Departamentos como las áreas, titulaciones, asignaturas y profesores tienen asignados códigos identificativos específicos, elaborados por el MEC.: codDpto, codArea, codTitulo, codAsign y codProf. No obstante, para evitar el efecto negativo de los cambios de código por parte del Ministerio y la ausencia de códigos en determinadas asignaturas nuevas, etc., se opta por utilizar un código numérico interno propio.
+
*De momento, sólo se pretende representar la información esencial. Esto significa que, además de los códigos y los nombres de los elementos representados, sólo es preciso reflejar las horas de teoría y prácticas de cada asignatura y las horas de teoría y prácticas impartidas por cada profesor en cada una de las asignaturas en que participa.
+
}}
+
[[imagen:universidad_er.png]]
+
<br />
+
{{Actividad|Title= Concesionario.|
+
;Realiza este ejercicio sin poner atributos, solo relaciones
+
*Sea un concesionario de venta y alquiler de automóviles cuyo funcionamiento se rige básicamente por los siguientes aspectos:
+
#La intención del Concesionario es  atender a una serie de clientes a los que diferencia en dos grupos, Clientes compradores y Clientes que alquilan
+
#Los Clientes compradores, realizan el Pedido de un vehículo nuevo del que se les hará entrega acompañado de la correspondiente Factura, que el cliente cerrará a través de un Pago formalizado(Dicho pago puede ser diferido a través de una financiación).
+
#Los Clientes que alquilan, solicitan un Vehículo de alquiler mediante un documento de solicitud  o una señal. A la devolución del Vehículo, el Cliente realiza aun Abono directo para satisfacer la Factura que le es presentada
+
#El concesionario adquiere los Vehículos nuevos de las diferentes Fábricas del país a través de un Albarán de pedido.Los pedidos son satisfechos en Entregas de las Fábricas.
+
#Los Vehículos de alquiler, se Adquieren mediante la compra de los mismos a Concesionarios de Vehículos de ocasión.
+
#Tanto en compra como en alquiler, es posible que una misma operación el correspondientes Cliente solicite varios Vehículos.
+
#Así mismo, más de un Vehículo puede incluirse en una sola Compra a un Concesionario de Ocasión.
+
<!--[[Archivo:Concesionario.png]]-->
+
 
<br />
 
<br />
 +
{{MRM_Actividad|Title=Mostrar contenido de una tabla|
 +
*Modifica la aplicación anterior con los siguientes requisitos
 +
*Al seleccionar una tabla, veremos el contenido de la misma
 +
*Para ello se recomienda generar una clase que permita gestionar una tabla html para ver el contendio de una consulta
 +
*La clase podría tener la estructura
 +
<source lang=php>
 +
Class Tabla{
 +
<?php
 +
 +
$titulos;
 +
$contenido;
 +
$html;
 +
 +
class Tabla
 +
{
 +
    /**
 +
    *
 +
    * @param array $titulos un array con los t�tulos de cada columna
 +
    * @param array $contenido un array donde cada elemento es una fila.
 +
    */
 +
    public function __construct(array $titulos, array $contenido) {
 +
 +
        $this->contenido = $contenido;
 +
        $this->titulos = $titulos;
 +
        $this->html=$this->crea_tabla ();
 +
 +
    }
 +
//Implmentar el resto de métodos
 +
 +
}
 +
</source>
 +
Los requisitos los podríamos enumerar
 +
;Requisitos anteriores
 +
#Obtener los datos de conexión
 +
#Obtener la base de datos
 +
#Realizar la conexión
 +
;Requisitos añadidos
 +
#Obtener la tabla
 +
#Obtener los nombres de los campos
 +
#OBtener el contenido de la tabla
 +
#Mostrar el contenido con un formato de tabla html
 +
 
}}
 
}}
{{Actividad|Title= Vuelta ciclista|
+
 
*Se desea diseñar una base de datos que recoja información sobre las distintas vueltas ciclistas que ha habido. Se tiene los siguientes supuestos:
+
{{MRM_Actividad|Tilte=Insertar registros|
#Nos interesa guardar el año en que se produce cada edición, ya que todos los años se celebra la vuelta ciclista.
+
*Añade la opción de insertar nuevos usuarios a la tabla
#Todas las ediciones tienes las mismas etapas con idénticas características.
+
#Todos los equipos tienes un patrocinador, que es siempre es el mismo con independencia de la edición de que se trate.
+
#Queremos guardar los equipos que han participado en cada edición con el puesto que han conseguido en cada una. #Además dos equipos no pueden conseguir el mismo puesto en la misma edición.
+
#Los corredores pueden cambiar de equipo de una edición a otra, pero nunca dentro de la misma.
+
#En cada etapa de una edición un corredor consigue un único puesto y un puesto es conseguido por un único corredor.
+
*Ademas se producen los siguientes supuestos semánticos:
+
a.- Nos interesa guardar el año en que se produce cada edición, ya que no todos los años se celebra la vuelta ciclista
+
b.- Todas las ediciones tienen las mismas etapas con idénticas características. En cada edición se realizna el mismo número de etapas_tipo.
+
En un Edición se realizan de 1 a N etapas_tipo.
+
Una Etapa_tipo se realiza en 1 o N ediciones.
+
Supongo que como mínimo se ha realizado una edición
+
y que como mínimo una edición tiene una Etapa_tipo-.
+
c.- todos los equipos tienes un patrocinador, que es siempre el mismo con independencia de la edición de que se trate.
+
Un equipo patrocinado pro un único patrocinador
+
Un patrocinador patrocina a 1 o N equipos
+
Supongo que un patrocinador tiene que patrocinar
+
como mínimo a un equipo en alguna de las ediciones
+
d.- Queremos guardar los equipos que han participado en cada edición.  con el puesto que han conseguido en cada una. Además dos equipos no pueden conseguir el mismo puesto en la misma edición.
+
Un Equipo participa en 1 o N Ediciones.
+
En una edición participan de 1 a N equipos
+
Cada vez que un Equipo participa en una Edición
+
consigue un único puesto que lo identifica
+
e.- Los corredores puede cambiar de equipo de una edición a otra, peri nunca dentro de la misma.
+
Un corredor en una edición pertenece a un único equipo
+
Un equipo en una edición le pertenece de 1 a N corredores.
+
Un corredor de un equipo puede pertenecer (es decir, puede participar) de 1 a n ediciones.
+
f.-  En cada etapa de una edición un corredero consgue un único puesto y un puesto es conseguido pro un único corredor,. Además cada puesto conseguido implica un tiempo determinado. Es decir, cada corredor en cada etapa de cada edición, consigue un tiempo.
+
Un corredor en una edición corre de 1 a N etapas_tipo.
+
Un corredor corre en una Etapa_tipo de 1 a N ediciones.
+
En una Etapa_tipo de una Edición corren de 1 a N corredores.
+
Un corredor corre en una etapa de una Edición, consiguiendo un tiempo y un puesto.
+
}}
+
<!--[[Archivo:Ciclista.png]]-->
+
<br />
+
{{MRM_Actividad|Title=Club naútico|
+
*Un club náutico desea tener informatizados los datos correspondientes a sus instalaciones, empleados, socios y embarcaciones que se encuentran en dicho club. El club esta organizado de la siguiente forma:
+
#Los socios pertenecientes al club vienen definidos por su nombre, dirección, DNI, teléfono y fecha de ingreso en el club.
+
#Las embarcaciones vienen definidas por: matricula, nombre, tipo y dimensiones.
+
#Los amarres tienen como datos de interés el número de amarre, la lectura del contador de agua y luz, y si tienen o no servicios de mantenimiento contratados.
+
#Por otro lado, hay que tener en cuenta que una embarcación pertenece a un socio aunque un socio puede tener varias embarcaciones. Una embarcación ocupará un amarre y un amarre está ocupado por una sola embarcación. Es posible que existan amarres no ocupados. Es importante la fecha en la que una embarcación es asignada a un amarre.
+
#Los socios pueden ser propietarios de amarres, siendo importante la fecha de compra del amarre. Hay que tener en cuenta que un amarre pertenece a un solo socio y que NO HAY ninguna relación directa entre la fecha en la que se compra un amarre y en la que una embarcación se asigna a un amarre.
+
#El club náutico está dividido en varias zonas definidas por una letra, el tipo de barcos que tiene, el numero de barcos que contiene, la profundidad y el ancho de los amarres. Una zona tendrá varios amarres y un amarre pertenece a una sola zona.
+
#En cuanto a los empleados, estos vienen definidos por su código, nombre, dirección, teléfono y especialidad. Un empleado está asignado a varias zonas y en una zona puede haber más de un empleado, siendo de interés el número de barcos de los que se encarga en cada zona.
+
[[Archivo:ClubNautico.png]]
+
 
}}
 
}}
  
Línea 109: Línea 100:
  
  
 +
{{MRM_Actividad|Title=Cargar la base de datos dwes|
 +
*Carga la base de datos que a continuación se aporta
 +
{{Plegable|hide|Base de datos ''''dwes''''|
 +
<soruce lang=sql>
 +
</source> }}
 +
*Modifica la aplicación anterior para mostrar todas las tablas que hay en la base de datos
 +
*Cada tabla será un submit
 +
*Al hacer click sobre una tabla concreta, se mostrará todo el contenido de la tabla en una tabla concreta
 +
}}
  
  
 
+
{{MRM_Actividad|Title= Crear tiendas|
<!--
+
{{Actividad|Title= Crear tiendas|
+
 
*Realiza una pequeña app web que añada tiendas a nuestra base de datos '''''dwes'''''
 
*Realiza una pequeña app web que añada tiendas a nuestra base de datos '''''dwes'''''
 
*En un formulario daremos los valores de '''tienda''' y '''teléfono'''
 
*En un formulario daremos los valores de '''tienda''' y '''teléfono'''
Línea 126: Línea 124:
  
 
}}
 
}}
{{Actividad|
+
{{MRM_Actividad|
 
*Realiza una aplicación que permita registrar usuarios o bien visualizarlos
 
*Realiza una aplicación que permita registrar usuarios o bien visualizarlos
 
*La password ha de estar cifrada (md5)
 
*La password ha de estar cifrada (md5)
Línea 155: Línea 153:
  
  
{{Actividad|Title=Gestión productos|
+
{{MRM_Actividad|Title=Gestión productos|
 
;PRACTICA DE BASES DE DATOS USANDO PDO
 
;PRACTICA DE BASES DE DATOS USANDO PDO
 
*Partiendo de la base de datos '''''dwes''''' usada en la explicación de este tema ,se pide que realicéis una aplicación que permita gestionar los registros de la tabla '''productos'''.
 
*Partiendo de la base de datos '''''dwes''''' usada en la explicación de este tema ,se pide que realicéis una aplicación que permita gestionar los registros de la tabla '''productos'''.
Línea 516: Línea 514:
  
 
}}
 
}}
-->
 

Última revisión de 08:50 26 mar 2020



Ejercicios básicos

Realiza los siguientes ejercicios

Ejercicio 1: Conexión con mysql



Icon activity.jpg
Conexión con mysql
  • Realiza una conexión a una base de datos utilizando el conectori mysqli
  • Previamente has de crear la base de datos con una tabla
CREATE DATABASE usuarios;
USE  usuarios;
        CREATE TABLE usuario(
              id INT NOT NULL UNIQUE auto_inccremet,
              nombre VARCHAR(40) UNIQUE,
              password VARCHAR(200),
        )
  • Los parámetros de conexión se establecerán en un formulario
  • Una vez conectado nos mostrará la siguiente información:

(https://www.php.net/manual/es/class.mysqli.php)

  1. Versión usada en el cliente (int $client_version;)
  2. Información del host (string $host_info)
  3. versión del protocolo utilizado string $protocol_version;
  4. información del servidor (string $server_info)
  5. Versión utilizada en el servidor de bases de datos (int $server_version);
  • En el caso de que no hayamos conectado nos mostrará el código de error y una descripción del mismo
  • La aplicación deberá cerrar la conexión




Ejercicio 2: Conexión con mysql con fichero ini para leer parámetros



Icon activity.jpg
Conexión con mysql desde un fichero ini
  • Modifica el ejercicio anterior permitiendo que los datos de conexión se aporten en un fichero ini (parse_ini_file)
https://www.php.net/manual/es/function.parse-ini-file.php




Ejercicio 3: Mostrar bases de datos y tablas



Icon activity.jpg
Mostrar bases de datos
  • Modifica la aplicación anterior con los siguientes requisitos
  • Nos conectamos al gestor de base de datos (no a una base de datos concreta.
  • Tenemos un submit que nos permitirá ver las bases de datos
  • Al presionar nos aparecerán tantos submit como bases de datos tenemos
  • Seleccionando una base de datos concreta (haciendo submit) mostraremos loas tablas que hay en esa base de datos




Ejercicio 4: Mostrar en contenido de una tabla



Icon activity.jpg
Mostrar contenido de una tabla
  • Modifica la aplicación anterior con los siguientes requisitos
  • Al seleccionar una tabla, veremos el contenido de la misma
  • Para ello se recomienda generar una clase que permita gestionar una tabla html para ver el contendio de una consulta
  • La clase podría tener la estructura
Class Tabla{
<?php
 
$titulos;
$contenido;
$html;
 
class Tabla
{
    /**
     *
     * @param array $titulos un array con los t�tulos de cada columna
     * @param array $contenido un array donde cada elemento es una fila.
     */
    public function __construct(array $titulos, array $contenido) {
 
        $this->contenido = $contenido;
        $this->titulos = $titulos;
        $this->html=$this->crea_tabla ();
 
    }
//Implmentar el resto de métodos
 
}

Los requisitos los podríamos enumerar

Requisitos anteriores
  1. Obtener los datos de conexión
  2. Obtener la base de datos
  3. Realizar la conexión
Requisitos añadidos
  1. Obtener la tabla
  2. Obtener los nombres de los campos
  3. OBtener el contenido de la tabla
  4. Mostrar el contenido con un formato de tabla html





Icon activity.jpg
Actividad
  • Añade la opción de insertar nuevos usuarios a la tabla







Icon activity.jpg
Cargar la base de datos dwes
  • Carga la base de datos que a continuación se aporta
  • Modifica la aplicación anterior para mostrar todas las tablas que hay en la base de datos
  • Cada tabla será un submit
  • Al hacer click sobre una tabla concreta, se mostrará todo el contenido de la tabla en una tabla concreta






Icon activity.jpg
Crear tiendas
  • Realiza una pequeña app web que añada tiendas a nuestra base de datos dwes
  • En un formulario daremos los valores de tienda y teléfono
  • En un botón submit iniciaremos el proceso y si todo es ok se agragará la tienda en la tabla correspondiente
  • Posteriormente se mostrará el mensaje informando
Se ha agregado la tienda con código XXX nombre: YYY teléfono: ZZZ
  • Se quedará el mismo formulario para poder volver a añadir más tiendas
  • Además visualizaremos debajo del formulario todas las tiendas mejor en una tabla je je .. (Gracias Deyvid).





}}


Icon activity.jpg
Actividad
  • Realiza una aplicación que permita registrar usuarios o bien visualizarlos
  • La password ha de estar cifrada (md5)
 $pass = $_POST['....'];
 $pass = md5($pass); //Aquí la pass queda cifrada usando la función md5
  • Crea un formulario con un campo de texto para nombre y password
  • En ella el usuario podrá
  1. Registrarse
  2. Visualizar todos los usuarios registrados
  3. Borrar la tabla

LoginRegistrarVisualizar.png

  • Ten en cuenta que se debe de permitir insertar el nombre por ejemplo Peters' Son
para que el usuario se puede registrar
  • Si no aporto nombre o password me informará de ello

NoDatosRegistrarVisualizar.png

  • Si borramos me informará del número de registros borrados

BorradosRegistrarVisualizar.png

  • Al ver usuarios mostrará todos los usuarios que estén en la base de datos

ListadoRegistrarVisualizar.png

Aqui puedes ver un ejemplo de la aplicación http://manuel.infenlaces.com/dwes/RegistrarUsuarios/

Icon present.gif
Tip: Si pide indentificarse accede con alumno/fuina







Icon activity.jpg
Gestión productos
PRACTICA DE BASES DE DATOS USANDO PDO
  • Partiendo de la base de datos dwes usada en la explicación de este tema ,se pide que realicéis una aplicación que permita gestionar los registros de la tabla productos.
  • La aplicación se dividirá entres páginas web:
1 listado.php.
  • Mostrara un cuadro desplegable que permita seleccionar un registro de la tabla familias, junto a un botón "Mostrar". *Al pulsar el botón, se mostrará un listado de los productos de la familia seleccionada.
  • Para cada producto, se mostrará su nombre corto y su PVP, junto a un botón con el texto Editar (se puede usar como opción crear un formulario distinto por cada producto).
  • Cuando se pulse ese botón, se enviará el formulario a la página editar.php.
2 Editar.php
  • Debe mostrar los datos del producto seleccionado en la página anterior (nombre corto, nombre, descripción y PVP) dentro de un formulario que permita cambiarlos, y dos botones: Actualizar y Cancelar. El formulario se enviará a la página actualizar.php.
3 actulizar.php
  • Esta página simplemente redirige a la página listado.php, pero si en el formulario anterior se ha pulsado Actualizar (y no Cancelar),
  • antes de redirigir debe ejecutar una consulta para cambiar los datos del producto.
  • Para redirigir se puede utilizar un formulario con un botón "Continuar" o bien dentro del encabezado la etiqueta
 <meta http-equiv='refresh' content='1'; url=>

Para acceder a la base de datos se debe usar mysql, realizando todas las consultas parametrizadas.