Ejercicio 5 PHP

Curso PHP – Ejercicio 5 (CRUD básico con arrays y sesiones)

🛠️ Ejercicio 5: CRUD básico con arrays y sesiones en PHP

📌 Planteamiento:

Crea una aplicación PHP que permita:

  • ✅ Agregar nombres a una lista.
  • ✅ Mostrar la lista actualizada.
  • ✅ Editar un nombre existente.
  • ✅ Eliminar un nombre.
  • ✅ Usar sesiones para almacenar la lista mientras dura la sesión del navegador.
👉 Todo debe estar en un solo archivo PHP con el manejo de acciones por parámetros GET o POST.

✅ Modelo de solución:

<?php
session_start();

if (!isset($_SESSION['lista'])) {
  $_SESSION['lista'] = [];
}

$mensaje = "";

// Agregar nuevo nombre
if (isset($_POST['accion']) && $_POST['accion'] == 'agregar') {
  $nombreNuevo = trim($_POST['nombre']);
  if ($nombreNuevo !== '') {
    $_SESSION['lista'][] = htmlspecialchars($nombreNuevo);
    $mensaje = "Nombre agregado correctamente.";
  } else {
    $mensaje = "El nombre no puede estar vacío.";
  }
}

// Editar nombre existente
if (isset($_POST['accion']) && $_POST['accion'] == 'editar') {
  $indice = intval($_POST['indice']);
  $nombreEditado = trim($_POST['nombre']);
  if ($nombreEditado !== '' && isset($_SESSION['lista'][$indice])) {
    $_SESSION['lista'][$indice] = htmlspecialchars($nombreEditado);
    $mensaje = "Nombre editado correctamente.";
  } else {
    $mensaje = "Error al editar el nombre.";
  }
}

// Eliminar nombre
if (isset($_GET['accion']) && $_GET['accion'] == 'eliminar') {
  $indice = intval($_GET['indice']);
  if (isset($_SESSION['lista'][$indice])) {
    array_splice($_SESSION['lista'], $indice, 1);
    $mensaje = "Nombre eliminado correctamente.";
  }
}

// Variables para editar
$editarIndice = -1;
$editarNombre = "";
if (isset($_GET['accion']) && $_GET['accion'] == 'editar' && isset($_GET['indice'])) {
  $editarIndice = intval($_GET['indice']);
  if (isset($_SESSION['lista'][$editarIndice])) {
    $editarNombre = $_SESSION['lista'][$editarIndice];
  } else {
    $editarIndice = -1;
  }
}
?>

<h3>Lista de Nombres</h3>

<?php if (!empty($mensaje)) : ?>
  <p><?php echo $mensaje; ?></p>
<?php endif; ?>

<table>
  <thead>
    <tr>
      <th>Nombre</th>
      <th>Acciones</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($_SESSION['lista'] as $i => $nombre): ?>
      <tr>
        <td><?php echo $nombre; ?></td>
        <td>
          <a href="?accion=editar&indice=<?php echo $i; ?>">Editar</a>
          <a href="?accion=eliminar&indice=<?php echo $i; ?>" onclick="return confirm('¿Seguro que quieres eliminar?');">Eliminar</a>
        </td>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>

<h3><?php echo ($editarIndice >= 0) ? "Editar Nombre" : "Agregar Nombre"; ?></h3>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
  <input type="hidden" name="accion" value="<?php echo ($editarIndice >= 0) ? "editar" : "agregar"; ?>" />
  <?php if ($editarIndice >= 0): ?>
    <input type="hidden" name="indice" value="<?php echo $editarIndice; ?>" />
  <?php endif; ?>

  <label for="nombre">Nombre:</label>
  <input type="text" name="nombre" id="nombre" value="<?php echo htmlspecialchars($editarNombre); ?>" required />

  <button type="submit"><?php echo ($editarIndice >= 0) ? "Guardar cambios" : "Agregar"; ?></button>
</form>
    

🎯 Claves de este ejercicio:

  • 📍 Uso de sesiones para almacenar datos temporales.
  • 📍 Implementación básica de operaciones CRUD.
  • 📍 Manejo de formularios con POST y enlaces GET para acciones.
  • 📍 Protección básica contra XSS con htmlspecialchars.

No hay comentarios:

Publicar un comentario

Políticas de Privacidad