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']);
}
?>