🛠️ Ejercicio 7: CRUD con edición de registros
📌 Planteamiento:
Extiende el CRUD anterior:
- ✅ Conecta PHP a MySQL con PDO.
- ✅ Permite **insertar productos** nuevos.
- ✅ Permite **eliminar productos** por ID.
- ✅ Añade una función para **editar productos existentes**: al hacer clic en "Editar" aparece un formulario para modificar nombre y precio.
✅ Modelo de solución:
<?php
// 🔌 Conexión a MySQL
$dsn = "mysql:host=localhost;dbname=curso_php;charset=utf8";
$usuario = "root";
$contrasena = "";
try {
$pdo = new PDO($dsn, $usuario, $contrasena);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("❌ Error de conexión: " . $e->getMessage());
}
// 📌 Crear tabla si no existe
$pdo->exec("CREATE TABLE IF NOT EXISTS productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) NOT NULL
)");
// 📥 Insertar producto
if (isset($_POST['agregar'])) {
$stmt = $pdo->prepare("INSERT INTO productos (nombre, precio) VALUES (?, ?)");
$stmt->execute([$_POST['nombre'], $_POST['precio']]);
}
// 🗑️ Eliminar producto
if (isset($_GET['eliminar'])) {
$stmt = $pdo->prepare("DELETE FROM productos WHERE id = ?");
$stmt->execute([$_GET['eliminar']]);
}
// ✏️ Guardar edición de producto
if (isset($_POST['editar'])) {
$stmt = $pdo->prepare("UPDATE productos SET nombre=?, precio=? WHERE id=?");
$stmt->execute([$_POST['nombre'], $_POST['precio'], $_POST['id']]);
}
// 📄 Obtener productos
$stmt = $pdo->query("SELECT * FROM productos");
$productos = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 📄 Si hay producto a editar, obtenerlo
$producto_editar = null;
if (isset($_GET['editar'])) {
$stmt = $pdo->prepare("SELECT * FROM productos WHERE id = ?");
$stmt->execute([$_GET['editar']]);
$producto_editar = $stmt->fetch(PDO::FETCH_ASSOC);
}
?>
<h3>Agregar producto</h3>
<form method="post">
<input type="text" name="nombre" placeholder="Nombre" required>
<input type="number" step="0.01" name="precio" placeholder="Precio" required>
<button type="submit" name="agregar">Agregar</button>
</form>
<h3>Listado de productos</h3>
<table border="1" cellpadding="5">
<tr><th>ID</th><th>Nombre</th><th>Precio</th><th>Acciones</th></tr>
<?php foreach ($productos as $p): ?>
<tr>
<td><?php echo $p['id']; ?></td>
<td><?php echo $p['nombre']; ?></td>
<td><?php echo $p['precio']; ?></td>
<td>
<a href="?editar=<?php echo $p['id']; ?>">Editar</a> |
<a href="?eliminar=<?php echo $p['id']; ?>" onclick="return confirm('¿Eliminar producto?');">Eliminar</a>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php if ($producto_editar): ?>
<h3>Editar producto</h3>
<form method="post">
<input type="hidden" name="id" value="<?php echo $producto_editar['id']; ?>">
<input type="text" name="nombre" value="<?php echo $producto_editar['nombre']; ?>" required>
<input type="number" step="0.01" name="precio" value="<?php echo $producto_editar['precio']; ?>" required>
<button type="submit" name="editar">Guardar cambios</button>
</form>
<?php endif; ?>
🎯 Claves de este ejercicio:
- 📍 Agrega **edición de registros** a un CRUD existente.
- 📍 Reusa la misma conexión PDO para todas las operaciones.
- 📍 Usa parámetros dinámicos para evitar SQL Injection.
- 📍 Maneja formularios condicionales (solo muestra formulario de edición si se selecciona un producto).
No hay comentarios:
Publicar un comentario