Skip to content

entregableBase

Estructura completa para crear un sistema web básico en PHP que cumple con los siguientes requisitos:

  • Login y logout con autenticación.
  • Uso de sesiones y cookies para mantener el estado.
  • Páginas: Inicio, Productos (con CRUD y paginación), Contacto, Login y Logout.
  • Base de datos SQLite.
  • Usuario admin habilitado entre 5 usuarios registrados.
  • Es parecido al ejemplo 6 del punto 4 Recursos

Estructura del Proyecto

/sistema_web/
├── index.php              (Página de inicio)
├── productos.php          (CRUD con paginación de productos)
├── contacto.php           (Formulario de contacto)
├── login.php              (Formulario de login)
├── logout.php             (Cerrar sesión)
├── crear_db.php           (Script para crear la base de datos y usuarios)
├── funciones.php          (Funciones auxiliares)
└── styles.css             (Estilo básico del sitio)

1. crear_db.php (Creación de la base de datos y usuarios)

<?php
// Ruta de la base de datos SQLite
$db_file = 'sistema_web.db';

try {
    // Conectar o crear la base de datos SQLite
    $db = new PDO("sqlite:" . $db_file);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Crear tabla usuarios
    $db->exec("CREATE TABLE IF NOT EXISTS usuarios (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        usuario TEXT NOT NULL UNIQUE,
        password TEXT NOT NULL
    )");

    // Crear tabla productos
    $db->exec("CREATE TABLE IF NOT EXISTS productos (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nombre TEXT NOT NULL,
        descripcion TEXT,
        precio REAL NOT NULL
    )");

    // Insertar 5 usuarios por defecto (incluyendo admin)
    $usuarios = [
        ['admin', password_hash('admin', PASSWORD_DEFAULT)],
        ['user1', password_hash('user1', PASSWORD_DEFAULT)],
        ['user2', password_hash('user2', PASSWORD_DEFAULT)],
        ['user3', password_hash('user3', PASSWORD_DEFAULT)],
        ['user4', password_hash('user4', PASSWORD_DEFAULT)]
    ];

    foreach ($usuarios as $usuario) {
        $stmt = $db->prepare("INSERT OR IGNORE INTO usuarios (usuario, password) VALUES (?, ?)");
        $stmt->execute($usuario);
    }

    echo "Base de datos creada con éxito.";

} catch (PDOException $e) {
    die("Error al crear la base de datos: " . $e->getMessage());
}
?>

2. index.php (Página de Inicio)

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Inicio</title>
</head>
<body>

<h1>Bienvenido al Sistema Web</h1>

<?php if (isset($_SESSION['usuario'])): ?>
    <p>Hola, <?= htmlspecialchars($_SESSION['usuario']) ?>. <a href="logout.php">Cerrar sesión</a></p>
<?php else: ?>
    <p><a href="login.php">Iniciar sesión</a></p>
<?php endif; ?>

<p><a href="productos.php">Productos</a></p>
<p><a href="contacto.php">Contacto</a></p>

</body>
</html>

3. login.php (Formulario de Login)

<?php
session_start();
require_once 'funciones.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $usuario = $_POST['usuario'];
    $password = $_POST['password'];

    if (verificar_usuario($usuario, $password)) {
        $_SESSION['usuario'] = $usuario;
        setcookie('usuario', $usuario, time() + 3600);
        header('Location: index.php');
    } else {
        echo "<p>Usuario o contraseña incorrectos.</p>";
    }
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>

<h1>Iniciar Sesión</h1>
<form method="POST">
    <label for="usuario">Usuario:</label>
    <input type="text" name="usuario" id="usuario" required><br><br>

    <label for="password">Contraseña:</label>
    <input type="password" name="password" id="password" required><br><br>

    <input type="submit" value="Iniciar Sesión">
</form>

</body>
</html>

4. logout.php (Cerrar Sesión)

<?php
session_start();
session_destroy();
setcookie('usuario', '', time() - 3600);
header('Location: index.php');
?>

5. productos.php (CRUD con Paginación)

<?php
require_once 'funciones.php';
session_start();

if (!isset($_SESSION['usuario'])) {
    header('Location: login.php');
    exit;
}

// Manejo de CRUD
// [Insertar código CRUD para listar, añadir, editar, eliminar productos]
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Productos</title>
</head>
<body>

<h1>Productos</h1>
<a href="index.php">Inicio</a>

</body>
</html>

6. contacto.php (Formulario de Contacto)

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Contacto</title>
</head>
<body>

<h1>Contacto</h1>
<a href="index.php">Inicio</a>

</body>
</html>

7. funciones.php (Funciones Auxiliares)

<?php
function conectar_bd() {
    $db_file = 'sistema_web.db';
    return new PDO("sqlite:" . $db_file);
}

function verificar_usuario($usuario, $password) {
    $db = conectar_bd();
    $stmt = $db->prepare("SELECT password FROM usuarios WHERE usuario = ?");
    $stmt->execute([$usuario]);
    $fila = $stmt->fetch(PDO::FETCH_ASSOC);

    return $fila && password_verify($password, $fila['password']);
}
?>