Ejercicio 1: Órdenes Embebidas en Aplicación Web

Órdenes Embebidas

Las órdenes embebidas son fragmentos de código insertados dentro de otro lenguaje o entorno. Se utilizan para ampliar la funcionalidad, optimizar procesos o integrar componentes.

Enunciado del Ejercicio

Objetivo: Crear una aplicación web que muestre productos desde una base de datos usando SQL embebido en PHP.

  1. Crear una base de datos MySQL con la tabla productos (id, nombre, precio, stock).
  2. Desarrollar una página PHP que:

Solución Extendida

1. Creación de Base de Datos

CREATE DATABASE tienda;
USE tienda;
CREATE TABLE productos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  precio DECIMAL(10,2) NOT NULL,
  stock INT DEFAULT 0
);

INSERT INTO productos (nombre, precio, stock) VALUES
  ('Laptop', 899.99, 15),
  ('Teléfono', 499.99, 30),
  ('Tablet', 299.99, 20);

2. Código PHP Embebido

<!DOCTYPE html>
<html>
<head>
  <title>Catálogo de Productos</title>
  <style>
    table { border-collapse: collapse; width: 80%; margin: 20px auto; }
    th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
    th { background-color: #f2f2f2; }
  </style>
</head>
<body>
<h1>Catálogo de Productos</h1>
<form method="GET">
  <label>Filtrar por precio máximo:</label>
  <input type="number" name="max_price" step="0.01">
  <button type="submit">Filtrar</button>
</form>

<?php
$conn = new mysqli('localhost', 'usuario', 'contraseña', 'tienda');
if ($conn->connect_error) {
  die("Conexión fallida: " . $conn->connect_error);
}

$sql = "SELECT id, nombre, precio, stock FROM productos";
$max_price = filter_input(INPUT_GET, 'max_price', FILTER_VALIDATE_FLOAT);
if ($max_price !== false && $max_price !== null) {
  $sql .= " WHERE precio <= " . floatval($max_price);
}
$sql .= " ORDER BY nombre";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  echo "<table><tr><th>ID</th><th>Nombre</th><th>Precio</th><th>Stock</th></tr>";
  while($row = $result->fetch_assoc()) {
    echo "<tr><td>".$row["id"]."</td><td>".$row["nombre"]."</td><td>".
    $row["precio"]."</td><td>".$row["stock"]."</td></tr>";
  }
  echo "</table>";
} else {
  echo "No se encontraron productos";
}
$conn->close();
?>
</body>
</html>
☰   UF2215-Contenidos