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)
 
(43 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 />
 +
==Ejercicios básicos==
 +
;Realiza los siguientes ejercicios
 +
 +
===Ejercicio 1: Conexión con mysql===
 +
<br />
 +
{{MRM_Actividad|Title=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
 +
<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
 +
}}
 +
 +
===Ejercicio 3: Mostrar bases de datos y tablas===
 +
<br />
 +
{{MRM_Actividad|Title=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===
 +
<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
 +
 +
}}
 +
 +
{{MRM_Actividad|Tilte=Insertar registros|
 +
*Añade la opción de insertar nuevos usuarios a la tabla
 +
}}
 +
 +
 +
 +
 +
{{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|
 +
*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).
 +
}}
  
  
  
{{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 29: Línea 150:
 
http://manuel.infenlaces.com/dwes/RegistrarUsuarios/
 
http://manuel.infenlaces.com/dwes/RegistrarUsuarios/
 
{{Tip|Si pide indentificarse accede con alumno/fuina}}
 
{{Tip|Si pide indentificarse accede con alumno/fuina}}
 +
}}
  
*Visualiza los accesos del usuario acutual así como los accesos del resto de usuarios
+
 
*Aquí podemos ver el ejemplo
+
{{MRM_Actividad|Title=Gestión productos|
  http://www.manuel.infenlaces.com/cookies/
+
;PRACTICA DE BASES DE DATOS USANDO PDO
*Para el formulario este sencillo css
+
*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
 +
<source lang=php>
 +
<meta http-equiv='refresh' content='1'; url=…>
 +
</source>
 +
Para acceder a la base de datos se debe usar mysql, realizando todas las consultas parametrizadas.
 +
{{Plegable|hide|Plantilla.php|
 +
<source lang=php>
 +
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 +
<html>
 +
<head>
 +
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 +
  <title>Plantilla para Ejercicios Tema 3</title>
 +
  <link href="dwes.css" rel="stylesheet" type="text/css">
 +
</head>
 +
 
 +
<body>
 +
 
 +
<div id="encabezado">
 +
<h1>Ejercicio: </h1>
 +
<form id="form_seleccion" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
 +
</form>
 +
</div>
 +
 
 +
<div id="contenido">
 +
<h2>Contenido</h2>
 +
</div>
 +
 
 +
<div id="pie">
 +
</div>
 +
</body>
 +
</html>
 +
</source>
 +
}}
 +
 
 +
{{Plegable|hide|estilo.css|
 
<source lang=css>
 
<source lang=css>
 +
.error {
 +
  font-family: Verdana, Arial, sans-serif;
 +
  font-size: 0.7em;
 +
  color: #900;
 +
  background-color : #ffff00;
 +
}
 +
 +
.divisor {
 +
  clear:both;
 +
  height:0;
 +
  font-size: 1px;
 +
  line-height: 0px;
 +
}
 +
 
#login fieldset {
 
#login fieldset {
 +
  position: absolute;
 +
  left: 50%;
 +
  top: 50%;
 
   width: 230px;
 
   width: 230px;
 +
  margin-left: -115px;
 +
  height: 160px;
 +
  margin-top: -80px;
 
   padding:10px;
 
   padding:10px;
 
   border:1px solid #ccc;
 
   border:1px solid #ccc;
Línea 48: Línea 235:
 
   color:#333;
 
   color:#333;
 
}
 
}
</source>
 
<!--
 
===Posible solución del ejercicio===
 
<source lang=php>
 
<?php
 
// Si el usuario aún no se ha autentificado, pedimos las credenciales
 
//Si me he registrado verifico los datos
 
require_once "baseDatos.php";
 
    $usuario = $_POST['nombre'];
 
    $pass = $_POST['pass'];
 
    $conexion = conectar();
 
    if ($conexion != null) { //Se ha conectado ok a la bd
 
        date_default_timezone_set('Europe/Madrid');
 
        // Ejecutamos la consulta para comprobar si existe
 
        // esa combinación de usuario y contraseña
 
        $sql = <<<SQL
 
                SELECT usuario FROM usuarios
 
                where usuario = ?
 
                and
 
                contrasena =?
 
SQL;
 
  
        $stmt = $conexion->stmt_init();
+
#login .campo {
        $stmt->prepare($sql);
+
  margin-top:8px;
 +
  margin-bottom: 10px;
 +
}
  
        $stmt->bind_param("ss", $usuario, md5($pass));
+
#login label {
        $stmt->execute();
+
  font-family : Arial, sans-serif;
        $stmt->store_result();
+
  font-size:0.8em;
        //$stmt->bind_result($u);
+
  font-weight: bold;
// Si no existe, se vuelven a pedir las credenciales
+
}
        $indice = 0;
+
        if ($stmt->num_rows == 0) {
+
            $error = "Usuario no reconocido";
+
        } else {
+
            if (isset($_COOKIE[$usuario])) {
+
                //Leemos la cookie y obtenemos el índice
+
                $acceso = $_COOKIE[$usuario];
+
                $indice = count($acceso);
+
            }
+
            //Añadimos el nuevo acceso en la cookie correspondiente
+
            setcookie($usuario . "[" . ($indice) . "]", time(), time() + 3600);
+
        }
+
        $stmt->free_result();
+
        $conexion->close();
+
  
 +
 +
#login input[type="text"], #login input[type="password"] {
 +
  font-family : Arial, Verdana, sans-serif;
 +
  font-size: 0.8em;
 +
  line-height:140%;
 +
  color : #000;
 +
  padding : 3px;
 +
  border : 1px solid #999;
 +
  height:18px;
 +
  width:220px;
 
}
 
}
?>
 
<!DOCTYPE html>
 
<html>
 
    <head>
 
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
        <title>Ejemplo Cookies en autentificación </title>
 
        <link href="cookie.css" rel="stylesheet" type="text/css">
 
    </head>
 
    <body>
 
        <div id="login">
 
            <fieldset >
 
                <legend>Login</legend>
 
                <form action="." method="POST">
 
                    <label for='nombre' >Nombre:</label>
 
                    <input type="text" name ="nombre">
 
                    <label for='pass'>Password: </label>
 
                    <input type="text" name ="pass">
 
                    <input type="submit" value="Cambiar Usuario" name="registrar"/>
 
                </form>
 
            </fieldset>
 
        </div>
 
  
        <?php
+
#login input[type="submit"] {
        if ($error == null) {
+
  width:100px;
            echo"<h2>Lista de accesos del usuario conectado actualmente $usuario</h2><hr/>";
+
  height:30px;
            if (isset($acceso)) {
+
  padding-left:0px;
                for ($i = 0; $i < $indice; $i++)
+
}
                    echo "-Acceso número $i a las  " . date("d/m/y \a \l\a\s H:i", $acceso[$i]) . "<br/>";
+
            } else
+
                echo "Bienvenido. Esta es su primera visita. $nombre<br/>";
+
            //ahora recorro todos los usuarios";
+
            foreach ($_COOKIE as $user => $accesos) {
+
                if ($user != $usuario) {
+
                    echo "<h2> Usuario $user </h2><br/><hr/>";
+
                    foreach ($accesos as $numAcceso => $hora) {
+
                        echo "Acceso número $numAcceso a las " . date("d/m/y \a \l\a\s H:i", $hora) . "<br/>";
+
                    }
+
                }
+
            }
+
        } else
+
            echo "Se ha producido el error $error.<br />";
+
        ?>
+
    </body>
+
</html>
+
</source>
+
*Bases de datos donde habrá que actualizar las credenciales
+
<source lang =php>
+
<?php
+
  
/*
+
.pagproductos body, .pagcesta body {
* To change this license header, choose License Headers in Project Properties.
+
  font: 100% Verdana, Arial, Helvetica, sans-serif;
  * To change this template file, choose Tools | Templates
+
  background: #666;
* and open the template in the editor.
+
  margin: 0;
*/
+
  padding: 0;
 +
  text-align: center;
 +
  color: #000000;
 +
}
  
function conectar(){
+
#contenedor {  
      $usuarioBD ="manuel_manuel";
+
  width: 90%;
      $pass ="xv2e6w";
+
  background: #fff;
      $host = "localhost";
+
  margin: 0 auto;
      $bd = "manuel_dwes";
+
  border: 1px solid #000;
      $conexion = new mysqli($host,$usuarioBD,$pass,$bd);
+
  text-align: left;
      //Hacemos una consulta a ver si el usuario existe
+
}
      if ($conexion->connect_errno){
+
 
          echo ("Se ha producido un error conectado a la base de datos ".$conexion->connect_error);
+
#encabezado {
          return null;
+
  padding: 0 10px;
      }
+
  border-top-width: thin;
      return $conexion;
+
  border-right-width: thin;
 +
  border-bottom-width: thin;
 +
  border-left-width: thin;
 +
  border-top-style: solid;
 +
  border-right-style: solid;
 +
  border-bottom-style: solid;
 +
  border-left-style: solid;
 +
  background-color: #9cf;
 +
}  
 +
 
 +
#encabezado h1 {
 +
  margin: 0;
 +
  padding: 10px 0;  
 
}
 
}
?>
+
.pagproductos #cesta {
 +
  float: right;
 +
  width: 12em;
 +
  background-color: #588;
 +
}
 +
.pagproductos #cesta h3 {
 +
  margin-left: 10px;
 +
  margin-right: 10px;
 +
}
 +
.pagproductos #cesta p {
 +
  margin-left: 10px;
 +
  margin-right: 10px;
 +
  font-size: 10px;
 +
}
 +
 
 +
.pagproductos #cesta input[type="submit"] {
 +
  margin-left: 10px;
 +
  margin-right: 10px;
 +
  margin-bottom: 3px;
 +
  width:100px;
 +
  height:30px;
 +
  padding-left:0px;
 +
}
 +
 
 +
.pagproductos #productos {
 +
  margin: 0 10em 0 10px;
 +
}
 +
 
 +
.pagcesta #productos {
 +
  margin: 10px;
 +
  font-size: 12px;
 +
}
 +
 
 +
.pagproductos #productos input, .pagproductos #productos p {
 +
  font-size: 10px;
 +
}
 +
 
 +
#productos .codigo {
 +
  width: 20%;
 +
  float: left;
 +
}
 +
 
 +
#productos .nombre {
 +
  width: 60%;
 +
  float: left;
 +
}
 +
 
 +
#productos .precio {
 +
  width: 20%;
 +
  text-align: right;
 +
  font-weight: bold;
 +
}
 +
 
 +
#pie {
 +
  padding: 0 10px;
 +
  background-color: #99ccff;
 +
  border-top-width: thin;
 +
  border-right-width: thin;
 +
  border-bottom-width: thin;
 +
  border-left-width: thin;
 +
  border-top-style: solid;
 +
  border-right-style: solid;
 +
  border-bottom-style: solid;
 +
  border-left-style: solid;
 +
}
 
</source>
 
</source>
-->
+
}}
 +
{{Plegable|hide|Datos.sql|
 +
<source lang=sql>
 +
USE `dwes`;
 +
 
 +
INSERT INTO `tienda` (`cod`, `nombre`, `tlf`) VALUES
 +
(1, 'CENTRAL', '600100100'),
 +
(2, 'SUCURSAL1', '600100200'),
 +
(3, 'SUCURSAL2', NULL);
 +
 
 +
INSERT INTO `familia` (`cod`, `nombre`) VALUES
 +
('CAMARA', 'Cámaras digitales'),
 +
('CONSOL', 'Consolas'),
 +
('EBOOK', 'Libros electrónicos'),
 +
('IMPRES', 'Impresoras'),
 +
('MEMFLA', 'Memorias flash'),
 +
('MP3', 'Reproductores MP3'),
 +
('MULTIF', 'Equipos multifunción'),
 +
('NETBOK', 'Netbooks'),
 +
('ORDENA', 'Ordenadores'),
 +
('PORTAT', 'Ordenadores portátiles'),
 +
('ROUTER', 'Routers'),
 +
('SAI', 'Sistemas de alimentación ininterrumpida'),
 +
('SOFTWA', 'Software'),
 +
('TV', 'Televisores'),
 +
('VIDEOC', 'Videocámaras');
 +
 
 +
INSERT INTO `producto` (`cod`, `nombre`, `nombre_corto`, `descripcion`, `PVP`, `familia`) VALUES
 +
('3DSNG', NULL, 'Nintendo 3DS negro', 'Consola portátil de Nintendo que permitirá disfrutar de efectos 3D sin necesidad de gafas especiales, e incluirá retrocompatibilidad con el software de DS y de DSi.', '270.00', 'CONSOL'),
 +
('ACERAX3950', NULL, 'Acer AX3950 I5-650 4GB 1TB W7HP', 'Características:\r\n\r\nSistema Operativo : Windows® 7 Home Premium Original\r\n\r\nProcesador / Chipset\r\nNúmero de Ranuras PCI: 1\r\nFabricante de Procesador: Intel\r\nTipo de Procesador: Core i5\r\nModelo de Procesador: i5-650\r\nNúcleo de Procesador: Dual-core\r\nVelocidad de Procesador: 3,20 GHz\r\nCaché: 4 MB\r\nVelocidad de Bus: No aplicable\r\nVelocidad HyperTransport: No aplicable\r\nInterconexión QuickPathNo aplicable\r\nProcesamiento de 64 bits: Sí\r\nHyper-ThreadingSí\r\nFabricante de Chipset: Intel\r\nModelo de Chipset: H57 Express\r\n\r\nMemoria\r\nMemoria Estándar: 4 GB\r\nMemoria Máxima: 8 GB\r\nTecnología de la Memoria: DDR3 SDRAM\r\nEstándar de Memoria: DDR3-1333/PC3-10600\r\nNúmero de Ranuras de Memoria (Total): 4\r\nLector de tarjeta memoria: Sí\r\nSoporte de Tarjeta de Memoria: Tarjeta CompactFlash (CF)\r\nSoporte de Tarjeta de Memoria: MultiMediaCard (MMC)\r\nSoporte de Tarjeta de Memoria: Micro Drive\r\nSoporte de Tarjeta de Memoria: Memory Stick PRO\r\nSoporte de Tarjeta de Memoria: Memory Stick\r\nSoporte de Tarjeta de Memoria: CF+\r\nSoporte de Tarjeta de Memoria: Tarjeta Secure Digital (SD)\r\n\r\nStorage\r\nCapcidad Total del Disco Duro: 1 TB\r\nRPM de Disco Duro: 5400\r\nTipo de Unidad Óptica: Grabadora DVD\r\nCompatibilidad de Dispositivo Óptico: DVD-RAM/±R/±RW\r\nCompatibilidad de Medios de Doble Capa: Sí', '410.00', 'ORDENA'),
 +
('ARCLPMP32GBN', NULL, 'Archos Clipper MP3 2GB negro', 'Características:\r\n\r\nAlmacenamiento Interno Disponible en 2 GB*\r\nCompatibilidad Windows o Mac y Linux (con soporte para almacenamiento masivo)\r\nInterfaz para ordenador USB 2.0 de alta velocidad\r\nBattería2 11 horas música\r\nReproducción Música3 MP3\r\nMedidas Dimensiones: 52mm x 27mm x 12mm, Peso: 14 Gr', '26.70', 'MP3'),
 +
('BRAVIA2BX400', NULL, 'Sony Bravia 32IN FULLHD KDL-32BX400', 'Características:\r\n\r\nFull HD: Vea deportes películas y juegos con magníficos detalles en alta resolución gracias a la resolución 1920x1080.\r\n\r\nHDMI®: 4 entradas (3 en la parte posterior, 1 en el lateral)\r\n\r\nUSB Media Player: Disfrute de películas, fotos y música en el televisor.\r\n\r\nSintonizador de TV HD MPEG-4 AVC integrado: olvídese del codificador y acceda a servicios de TV que incluyen canales HD con el sintonizador DVB-T y DVB-C integrado con decodificador MPEG4 AVC (dependiendo del país y sólo con operadores compatibles)\r\n\r\nSensor de luz: ajusta automáticamente el brillo según el nivel de la iluminación ambiental para que pueda disfrutar de una calidad de imagen óptima sin consumo innecesario de energía.\r\n\r\nBRAVIA Sync: controle su sistema de ocio doméstico entero con un mismo mando a distancia universal que le permite reproducir contenidos o ajustar la configuración de los dispositivos compatibles con un solo botón.\r\n\r\nBRAVIA ENGINE 2: experimente colores y detalles de imagen increíblemente nítidos y definidos. \r\n\r\nLive Colour™: seleccione entre cuatro modos: desactivado, bajo, medio y alto, para ajustar el color y obtener imágenes vivas y una calidad óptima. \r\n\r\n24p True Cinema™: reproduzca una auténtica experiencia cinemática y disfrute de películas exactamente como el director las concibió a 24 fotogramas por segundo.', '356.90', 'TV'),
 +
('EEEPC1005PXD', NULL, 'Asus EEEPC 1005PXD N455 1 250 BL', 'Características:\r\nProcesador: 1660 MHz, N455, Intel Atom, 0.5 MB. \r\nMemoria: 1024 MB, 2 GB, DDR3, SO-DIMM, 1 x 1024 MB. \r\nAccionamiento de disco: 2.5 ", 250 GB, 5400 RPM, \r\nSerial ATA, Serial ATA II, 250 GB. \r\nMedios de almacenaje: MMC, SD, SDHC. \r\nExhibición: 10.1 ", 1024 x 600 Pixeles, LCD TFT. \r\nCámara fotográfica: 0.3 MP. \r\nRed: 802.11 b/g/n, 10, 100 Mbit/s, \r\nFast Ethernet. \r\nAudio: HD. \r\nSistema operativo/software: Windows 7 Starter. \r\nColor: Blanco. \r\nContro de energía: 8 MB/s, Litio-Ion, 6 piezas, 2200 mAh, 48 W. \r\nPeso y dimensiones: 1270 g, 178 mm, 262 mm, 25.9 mm, 36.5 mm', '245.40', 'NETBOK'),
 +
('HPMIN1103120', NULL, 'HP Mini 110-3120 10.1LED N455 1GB 250GB W7S negro', 'Características:\r\nSistema operativo instalado \r\nWindows® 7 Starter original 32 bits \r\n\r\nProcesador \r\nProcesador Intel® Atom™ N4551,66 GHz, Cache de nivel 2, 512 KB \r\n\r\nChipset NM10 Intel® + ICH8m \r\n\r\nMemoria \r\nDDR2 de 1 GB (1 x 1024 MB) \r\nMemoria máxima \r\nAdmite un máximo de 2 GB de memoria DDR2 \r\n\r\nRanuras de memoria \r\n1 ranura de memoria accesible de usuario \r\n\r\nUnidades internas \r\nDisco duro SATA de 250 GB (5400 rpm) \r\n\r\nGráficos \r\nTamaño de pantalla (diagonal) \r\nPantalla WSVGA LED HP Antirreflejos de 25,6 cm (10,1") en diagonal \r\n\r\nResolución de la pantalla \r\n1024 x 600 ', '270.00', 'NETBOK'),
 +
('IXUS115HSAZ', NULL, 'Canon Ixus 115HS azul', 'Características:\r\nHS System (12,1 MP) \r\nZoom 4x, 28 mm. IS Óptico \r\nCuerpo metálico estilizado \r\nPantalla LCD PureColor II G de 7,6 cm (3,0") \r\nFull HD. IS Dinámico. HDMI \r\nModo Smart Auto (32 escenas) ', '196.70', 'CAMARA'),
 +
('KSTDT101G2', NULL, 'Kingston DataTraveler 16GB DT101G2 USB2.0 negro', 'Características:\r\nCapacidades — 16GB\r\nDimensiones — 2.19" x 0.68" x 0.36" (55.65mm x 17.3mm x 9.05mm)\r\nTemperatura de Operación — 0° hasta 60° C / 32° hasta 140° F\r\nTemperatura de Almacenamiento — -20° hasta 85° C / -4° hasta 185° F\r\nSimple — Solo debe conectarlo a un puerto USB y está listo para ser utilizado\r\nPractico — Su diseño sin tapa giratorio, protege el conector USB; sin tapa que perder\r\nGarantizado — Cinco años de garantía', '19.20', 'MEMFLA'),
 +
('KSTDTG332GBR', NULL, 'Kingston DataTraveler G3 32GB rojo', 'Características:\r\n\r\nTipo de producto Unidad flash USB\r\nCapacidad almacenamiento32GB\r\nAnchura 58.3 mm\r\nProfundidad 23.6 mm\r\nAltura 9.0 mm\r\nPeso 12 g\r\nColor incluido RED\r\nTipo de interfaz USB', '40.00', 'MEMFLA'),
 +
('KSTMSDHC8GB', NULL, 'Kingston MicroSDHC 8GB', 'Kingston tarjeta de memoria flash 8 GB microSDHC\r\nÍndice de velocidad    Class 4\r\nCapacidad almacenamiento    8 GB\r\nFactor de forma  MicroSDHC\r\nAdaptador de memoria incluido  Adaptador microSDHC a SD\r\nGarantía del fabricante  Garantía limitada de por vida', '10.20', 'MEMFLA'),
 +
('LEGRIAFS306', NULL, 'Canon Legria FS306 plata', 'Características:\r\n\r\nGrabación en tarjeta de memoria SD/SDHC \r\nLa cámara de vídeo digital de Canon más pequeña nunca vista \r\nInstantánea de Vídeo (Video Snapshot) \r\nZoom Avanzado de 41x \r\nGrabación Dual (Dual Shot) \r\nEstabilizador de la Imagen con Modo Dinámico \r\nPre grabación (Pre REC) \r\nSistema 16:9 de alta resolución realmente panorámico \r\nBatería inteligente y Carga Rápida \r\nCompatible con grabador de DVD DW-100 \r\nSISTEMA DE VÍDEO\r\nSoporte de grabación: Tarjeta de memoria extraíble (SD/SDHC)\r\nTiempo máximo de grabación: Variable, dependiendo del tamaño de la tarjeta de memoria.\r\nTarjeta SDHC de 32 GB: 20 horas 50 minutos', '175.00', 'VIDEOC'),
 +
('LGM237WDP', NULL, 'LG TDT HD 23 M237WDP-PC FULL HD', 'Características:\r\n\r\nGeneral\r\nTamaño (pulgadas): 23\r\nPantalla LCD: Sí\r\nFormato: 16:9\r\nResolución: 1920 x 1080\r\nFull HD: Sí\r\nBrillo (cd/m2): 300\r\nRatio Contraste: 50.000:1\r\nTiempo Respuesta (ms): 5\r\nÁngulo Visión (°): 170\r\nNúmero Colores (Millones): 16.7\r\n\r\nTV\r\nTDT: TDT HD\r\nConexiones\r\nD-Sub: Sí\r\nDVI-D: Sí\r\nHDMI: Sí\r\nEuroconector: Sí\r\nSalida auriculares: Sí\r\nEntrada audio: Sí\r\nUSB Servicio: Sí\r\nRS-232C Servicio: Sí\r\nPCMCIA: Sí\r\nSalida óptico: Sí', '186.00', 'TV'),
 +
('LJPROP1102W', NULL, 'HP Laserjet Pro Wifi P1102W', 'Impesora laserjet P1102W es facil de instalar y usar, ademas de que te ayudara a ahorrar energia y recursos. \r\nOlviadte de los cables y disfura de la libertad que te proporcina su tecnologia WIFI, imprime facilmente desdes cualquier de tu oficina. \r\n\r\nFormato máximo aceptado A4 A2 No\r\nA3 NoA4 Si\r\nA5 SiA6 Si\r\nB5 SiB6 Si\r\nSobres C5 (162 x 229 mm) SiSobres C6 (114 x 162 mm) Si', '99.90', 'IMPRES'),
 +
('OPTIOLS1100', NULL, 'Pentax Optio LS1100', 'La LS1100 con funda de transporte y tarjeta de memoria de 2GB incluidas \r\nes la compacta digital que te llevarás a todas partes. \r\nEsta cámara diseñada por Pentax incorpora un sensor CCD de 14,1 megapíxeles y un objetivo gran angular de 28 mm.\r\n', '104.80', 'CAMARA'),
 +
('PAPYRE62GB', NULL, 'Lector ebooks Papyre6 con SD2GB + 500 ebooks', 'Marca Papyre \r\nModelo Papyre 6.1 \r\nUso Lector de libros electrónicos \r\nTecnología e-ink (tinta electrónica, Vizplez) \r\nCPU Samsung Am9 200MHz \r\nMemoria - Interna: 512MB \r\n- Externa: SD/SDHC (hasta 32GB) \r\nFormatos PDF, RTF, TXT, DOC, HTML, MP3, CHM, ZIP, FB2, Formatos de imagen \r\nPantalla 6" (600x800px), blanco y negro, 4 niveles de grises ', '205.50', 'EBOOK'),
 +
('PBELLI810323', NULL, 'Packard Bell I8103 23 I3-550 4G 640GB NVIDIAG210', 'Características:\r\n\r\nCPU CHIPSET\r\n\r\nProcesador : Ci3-550\r\nNorthBridge : Intel H57\r\n\r\nMEMORIA\r\nMemoria Rma : Ddr3 4096 MB\r\n\r\nDISPOSITIVOS DE ALMACENAMIENTO\r\nDisco Duro: 640Gb 7200 rpm\r\nÓptico : Slot Load siper multi Dvdrw\r\nLector de Tarjetas: 4 in 1 (XD, SD, HC, MS, MS PRO, MMC)\r\n\r\ndispositivos gráficos\r\nMonitor: 23 fHD\r\nTarjeta Gráfica: Nvidia G210M D3 512Mb\r\nMemoria Máxima: Hasta 1918Mb\r\n\r\nAUDIO\r\nAudio Out: 5.1 Audio Out\r\nAudio In: 1 jack\r\nHeasphone in: 1x jack\r\nAltavoces: Stereo\r\n\r\nACCESORIOS\r\nTeclado: Teclado y ratón inalámbrico\r\nMando a distancia: EMEA Win7 WMC\r\n\r\n\r\nCOMUNICACIONES\r\nWireless: 802.11 b/g/n mini card \r\nTarjeta de Red: 10/100/1000 Mbps\r\nBluetooth: Bluethoot\r\nWebcam: 1Mpixel Hd (1280x720)\r\nTv tuner: mCARD/SW/ DVB-T\r\n\r\nMONITOR\r\nTamaño: 23"\r\ncontraste: 1000:1\r\nTiempo de respuesta: 5MS\r\nResolución: 1920 X 1080\r\n\r\nPUERTOS E/S\r\nUsb 2.0 : 6\r\nMini Pci-e : 2\r\nEsata: 1\r\n\r\nSISTEMA OPERATIVO\r\nO.S: Microsoft Windows 7 Premium', '761.80', 'ORDENA'),
 +
('PIXMAIP4850', NULL, 'Canon Pixma IP4850', 'Características:\r\n\r\nTipo: chorro de tinta cartuchos independientes\r\nConexión: Hi-Speed USB\r\nPuerto de impresión directa desde camaras\r\nResolución máxima: 9600x2400 ppp\r\nVelocidad impresión: 11 ipm (negro) / 9.3 ipm (color)\r\nTamaño máximo papel: A4\r\nBandeja entrada: 150 hojas\r\nDimensiones: 43.1 cm x 29.7 cm x 15.3 cm', '97.30', 'IMPRES'),
 +
('PIXMAMP252', NULL, 'Canon Pixma MP252', 'Características:\r\n\r\nFunciones: Impresora, Escáner , Copiadora\r\nConexión: USB 2.0\r\nDimensiones:444 x 331 x 155 mm\r\nPeso: 5,8 Kg\r\n\r\nIMPRESORA\r\nResolución máxima: 4800 x 1200 ppp\r\nVelocidad de impresión:\r\nNegro/color: 7,0 ipm / 4,8 ipm\r\nTamaño máximo papel: A4\r\nCARTUCHOS\r\nNegro: PG-510 / PG-512\r\nColor: CL-511 / CL-513\r\n\r\nESCANER\r\nResolución máxima: 600 x 1200 ppp (digital: 19200 x 19200)\r\nProfundidad de color: 48/24 bits\r\nArea máxima de escaneado: A4\r\n\r\nCOPIA\r\nTiempo salida 1ª copia: aprox 39 seg.', '41.60', 'MULTIF'),
 +
('PS3320GB', NULL, 'PS3 con disco duro de 320GB', 'Este Pack Incluye:\r\n- La consola Playstation 3 Slim Negra 320GB\r\n- El juego Killzone 3\r\n', '380.00', 'CONSOL'),
 +
('PWSHTA3100PT', NULL, 'Canon Powershot A3100 plata', 'La cámara PowerShot A3100 IS, inteligente y compacta, presenta la calidad de imagen de Canon en un cuerpo\r\ncompacto y ligero para capturar fotografías sin esfuerzo; es tan fácil como apuntar y disparar.\r\nCaracterísticas:\r\n12,1 MP \r\nZoom óptico 4x con IS \r\nPantalla LCD de 6,7 cm (2,7") ', '101.40', 'CAMARA'),
 +
('SMSGCLX3175', NULL, 'Samsung CLX3175', 'Características:\r\n\r\nFunción: Impresión color, copiadora, escáner\r\nImpresión \r\nVelocidad (Mono)Hasta 16 ppm en A4 (17 ppm en Carta)\r\nVelocidad (Color)Hasta 4 ppm en A4 (4 ppm en Carta)\r\nSalida de la Primer Página (Mono)Menos de 14 segundos (Desde el Modo Listo)\r\nResoluciónHasta 2400 x 600 dpi de salida efectiva\r\nSalida de la Primer Página (Color)Menos de 26 segundos (Dese el Modo Listo)\r\nDuplexManual\r\nEmulaciónSPL-C (Lenguaje de color de impresión SAMSUNG)\r\n\r\nCopiado \r\nSalida de la Primer Página (Mono)18 segundos\r\nMulticopiado1 ~ 99\r\nZoom25 ~ 400 %\r\nFunciones de CopiadoCopia ID, Clonar Copia, Copia N-UP, Copiar Poster\r\nResoluciónTexto, Texto / Foto, Modo Revista: hasta 600 x 600 ppp, Modo Foto: Hasta 1200 x 1200 ppp\r\nVelocidad (Mono)Hasta 17 ppm en Carta (16 ppm en A4)\r\nVelocidad (Color)Hasta 4 ppm en Carta (4 ppm en A4 )\r\nSalida de la Primer Página (Color)45 segundos\r\n\r\nEscaneado \r\n\r\nCompatibilidadNorma TWAIN, Norma WIA (Windows2003 / XP / Vista)\r\nMétodoEscáner plano color\r\nResolución (Óptica)1200 x 1200 dpi\r\nResolución (Mejorada)4800 x 4800 dpi\r\nEscaneado a Escanear a USB / Carpeta', '190.00', 'MULTIF'),
 +
('SMSN150101LD', NULL, 'Samsung N150 10.1LED N450 1GB 250GB BAT6 BT W7 R', 'Características:\r\n\r\nSistema Operativo Genuine Windows® 7 Starter \r\n\r\nProcesador Intel® ATOM Processor N450 (1.66GHz, 667MHz, 512KB) \r\n\r\nChipset Intel® NM10\r\n\r\nMemoria del Sistema 1GB (DDR2 / 1GB x 1) Ranura de Memoria 1 x SODIMM \r\n\r\nPantalla LCD 10.1" WSVGA (1024 x 600), Non-Gloss, LED Back Light Gráficos \r\n\r\nProcesador Gráfico Intel® GMA 3150 DVMT \r\nMemoria Gráfica Shared Memory (Int. Grahpic) \r\n\r\nMultimedia \r\nSonido HD (High Definition) Audio \r\nCaracterísticas de Sonido SRS 3D Sound Effect \r\nAltavoces 3W Stereo Speakers (1.5W x 2) \r\nCámara Integrada Web Camera \r\n\r\nAlmacenamiento \r\nDisco duro 250GB SATA (5400 rpm S-ATA) \r\n\r\nConectividad\r\nWired Ethernet LAN (RJ45) 10/100 LAN \r\nWireless LAN 802.11 b/g/N\r\n\r\nBluetooth Bluetooth 3.0 High Speed \r\n\r\nI/O Port \r\nVGA \r\nHeadphone-out\r\nMic-in\r\nInternal Mic\r\nUSB (Chargable USB included) 3 x USB 2.0 \r\nMulti Card Slot 4-in-1 (SD, SDHC, SDXC, MMC)\r\nDC-in (Power Port)\r\n\r\nTipo de Teclado 84 keys \r\nTouch Pad, Touch Screen Touch Pad (Scroll Scope, Flat Type) \r\n\r\nSeguridad\r\nRecovery Samsung Recovery Solution \r\nVirus McAfee Virus Scan (trial version) \r\nSeguridad BIOS Boot Up Password / HDD Password \r\nBloqueo Kensington Lock Port \r\n\r\nBatería \r\nAdaptador 40 Watt Batería \r\n6 Cell Dimensiones ', '260.60', 'NETBOK'),
 +
('SMSSMXC200PB', NULL, 'Samsung SMX-C200PB EDC ZOOM 10X', 'Características:\r\n\r\nSensor de Imagen Tipo 1 / 6” 800K pixel CCD\r\n\r\nLente Zoom Óptico 10 x optico\r\n\r\nCaracterísticas Grabación Vídeo Estabilizador de Imagen Hiper estabilizador de imagen digital\r\n\r\nInterfaz Tarjeta de Memoria Ranura de Tarjeta SDHC / SD', '127.20', 'VIDEOC'),
 +
('STYLUSSX515W', NULL, 'Epson Stylus SX515W', 'Características:\r\n\r\nResolución máxima5760 x 1440 DPI\r\nVelocidad de la impresión\r\nVelocidad de impresión (negro, calidad normal, A4)36 ppm\r\nVelocidad de impresión (color, calidad normal, A4)36 ppm\r\n\r\nTecnología de la impresión\r\nTecnología de impresión inyección de tinta\r\nNúmero de cartuchos de impresión4 piezas\r\nCabeza de impresoraMicro Piezo\r\n\r\nExploración\r\nResolución máxima de escaneado2400 x 2400 DPI\r\nEscaner color: si\r\nTipo de digitalización Escáner plano\r\nEscanaer integrado: si\r\nTecnología de exploración CIS\r\nWLAN, conexión: si', '77.50', 'MULTIF'),
 +
('TSSD16GBC10J', NULL, 'Toshiba SD16GB Class10 Jewel Case', 'Características:\r\n\r\nDensidad: 16 GB\r\nPINs de conexión: 9 pins\r\nInterfaz: Tarjeta de memoria SD standard compatible\r\nVelocidad de Escritura: 20 MBytes/s* \r\nVelocidad de Lectura: 20 MBytes/s*\r\nDimensiones: 32.0 mm (L) × 24.0 mm (W) × 2.1 mm (H)\r\nPeso: 2g\r\nTemperatura: -25°C a +85°C (Recomendada)\r\nHumedad: 30% to 80% RH (sin condensación)', '32.60', 'MEMFLA'),
 +
('ZENMP48GB300', NULL, 'Creative Zen MP4 8GB Style 300', 'Características:\r\n\r\n8 GB de capacidad\r\nAutonomía: 32 horas con archivos MP3 a 128 kbps\r\nPantalla TFT de 1,8 pulgadas y 64.000 colores\r\nFormatos de audio compatibles: MP3, WMA (DRM9), formato Audible 4\r\nFormatos de foto compatibles: JPEG (BMP, TIFF, GIF y PNG\r\nFormatos de vídeo compatibles: AVI transcodificado (Motion JPEG)\r\nEcualizador de 5 bandas con 8 preajustes\r\nMicrófono integrado para grabar voz\r\nAltavoz y radio FM incorporada', '58.90', 'MP3');
 +
 
 +
INSERT INTO `stock` (`producto`, `tienda`, `unidades`) VALUES
 +
('3DSNG', 1, 2),
 +
('3DSNG', 2, 1),
 +
('ACERAX3950', 1, 1),
 +
('ARCLPMP32GBN', 2, 1),
 +
('ARCLPMP32GBN', 3, 2),
 +
('BRAVIA2BX400', 3, 1),
 +
('EEEPC1005PXD', 1, 2),
 +
('EEEPC1005PXD', 2, 1),
 +
('HPMIN1103120', 2, 1),
 +
('HPMIN1103120', 3, 2),
 +
('IXUS115HSAZ', 2, 2),
 +
('KSTDT101G2', 3, 1),
 +
('KSTDTG332GBR', 2, 2),
 +
('KSTMSDHC8GB', 1, 1),
 +
('KSTMSDHC8GB', 2, 2),
 +
('KSTMSDHC8GB', 3, 2),
 +
('LEGRIAFS306', 2, 1),
 +
('LGM237WDP', 1, 1),
 +
('LJPROP1102W', 2, 2),
 +
('OPTIOLS1100', 1, 3),
 +
('OPTIOLS1100', 2, 1),
 +
('PAPYRE62GB', 1, 2),
 +
('PAPYRE62GB', 3, 1),
 +
('PBELLI810323', 2, 1),
 +
('PIXMAIP4850', 2, 1),
 +
('PIXMAIP4850', 3, 2),
 +
('PIXMAMP252', 2, 1),
 +
('PS3320GB', 1, 1),
 +
('PWSHTA3100PT', 2, 2),
 +
('PWSHTA3100PT', 3, 2),
 +
('SMSGCLX3175', 2, 1),
 +
('SMSN150101LD', 3, 1),
 +
('SMSSMXC200PB', 2, 1),
 +
('STYLUSSX515W', 1, 1),
 +
('TSSD16GBC10J', 3, 2),
 +
('ZENMP48GB300', 1, 3),
 +
('ZENMP48GB300', 2, 2),
 +
('ZENMP48GB300', 3, 2);
 +
</source>
 +
}}
 +
{{Plegable|hide|bd.sql|
 +
<source lang=sql>
 +
CREATE DATABASE `dwes` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;
 +
USE `dwes`;
 +
-- Creamos las tablas
 +
CREATE TABLE `dwes`.`tienda` (
 +
`cod` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 +
`nombre` VARCHAR( 100 ) NOT NULL ,
 +
`tlf` VARCHAR( 13 ) NULL
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`producto` (
 +
`cod` VARCHAR( 12 ) NOT NULL ,
 +
`nombre` VARCHAR( 200 ) NULL ,
 +
`nombre_corto` VARCHAR( 50 ) NOT NULL ,
 +
`descripcion` TEXT NULL ,
 +
`PVP` DECIMAL( 10, 2 ) NOT NULL ,
 +
`familia` VARCHAR( 6 ) NOT NULL ,
 +
PRIMARY KEY ( `cod` ) ,
 +
INDEX ( `familia` ) ,
 +
UNIQUE ( `nombre_corto` )
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`familia` (
 +
`cod` VARCHAR( 6 ) NOT NULL ,
 +
`nombre` VARCHAR( 200 ) NOT NULL ,
 +
PRIMARY KEY ( `cod` )
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`stock` (
 +
`producto` VARCHAR( 12 ) NOT NULL ,
 +
`tienda` INT NOT NULL ,
 +
`unidades` INT NOT NULL ,
 +
PRIMARY KEY ( `producto` , `tienda` )
 +
) ENGINE = INNODB;
 +
-- Creamos las claves foráneas
 +
ALTER TABLE `producto`
 +
ADD CONSTRAINT `producto_ibfk_1`
 +
FOREIGN KEY (`familia`) REFERENCES `familia` (`cod`)
 +
ON UPDATE CASCADE;
 +
ALTER TABLE `stock`
 +
ADD CONSTRAINT `stock_ibfk_2`
 +
FOREIGN KEY (`tienda`) REFERENCES `tienda` (`cod`)
 +
ON UPDATE CASCADE,
 +
ADD CONSTRAINT `stock_ibfk_1`
 +
FOREIGN KEY (`producto`) REFERENCES `producto` (`cod`)
 +
ON UPDATE CASCADE;
 +
CREATE USER `dwes`
 +
IDENTIFIED BY 'abc123.';
 +
GRANT ALL ON `dwes`.*
 +
TO `dwes`;
 +
</source>
 +
 
 +
}}
 +
 
 
}}
 
}}

Ú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.