Arquitectura del Sistema & Plataforma Culinaria
Una aplicación web a medida desarrollada con PHP y MySQL dedicada a descubrir, preparar y compartir recetas de cocina. Cuenta con un motor de búsqueda asíncrono en tiempo real mediante la Fetch API, un área de miembros segura con cifrado Bcrypt y validación estricta de imágenes subidas.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Cuisinea Full-Stack Web Architecture │
└──────────────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
🔍 Moteur Asynchrone (AJAX) 👤 Espace Membre & Sécurité 🍲 Modèle de Données (SQL)
• Fetch API en temps réel • Hash Bcrypt / Argon2 • Tables categories & recipes
• Requête SQL LIKE préparée • Sessions PHP & Rôles • Clés étrangères & Contraintes
• Filtrage par catégories • Envois SMTP (PHPMailer) • Validation MIME binaire
• Injection DOM sans reload • Protection XSS & Uploads • Chargement différé (Lazy)
Búsqueda Asíncrona Instantánea
Motor de búsqueda con la Fetch API de JavaScript ES6 que consulta bases de datos MySQL en tiempo real sin recargar la página.
Área de Miembros & Seguridad
Sistema de registro e inicio de sesión con cifrado seguro de contraseñas y notificaciones automáticas vía PHPMailer.
Validación Estricta de Archivos
Comprobación binaria de imágenes mediante getimagesize() y nombres de archivo únicos con slugify() y uniqid().
1. Módulos Funcionales & Experiencia de Usuario
Módulos ergonómicos diseñados para simplificar la consulta de recetas y facilitar la contribución de la comunidad:
Página de Inicio Dinámica
Selección aleatoria de 3 recetas en cada visita para brindar continua inspiración culinaria.
RAND() SQLCartes dynamiquesBootstrap 5
Ficha de Receta Detallada
Presentación exhaustiva con desglose de ingredientes línea por línea e instrucciones de preparación paso a paso.
IngrédientsÉtapes pas-à-pasnl2br
Creación & Gestión de Recetas
Formulario de publicación seguro para usuarios registrados con selector de categorías y carga validada de fotos.
Upload MIMEslugify()uniqid()
2. Búsqueda Asíncrona & Seguridad SQL
El backend search.php ejecuta sentencias SQL preparadas multicriterio garantizando inmunidad total frente a inyecciones SQL:
// Requête préparée multi-critères sécurisée (search.php)
$sql = "SELECT * FROM recipes
WHERE (? = '' OR title LIKE ?
OR description LIKE ?
OR ingredients LIKE ?)
AND (? = '' OR category_id = ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
$searchTerm, "%$searchTerm%", "%$searchTerm%", "%$searchTerm%",
$category, $category
]);
- Búsqueda Textual Universal: Análisis simultáneo en títulos, descripciones e ingredientes mediante el operador SQL LIKE.
- Filtrado por Categoría: Filtrado instantáneo por tipo de plato (Entrantes, Platos principales, Postres) cargado dinámicamente vía API.
- Aviso de Resultados Vacíos: Mensaje claro e intuitivo cuando ninguna receta coincide con los términos de búsqueda introducidos.
3. Modelo de Datos & Esquema Relacional MySQL
Diseño relacional normalizado que preserva la integridad de los datos entre recetas, categorías y cuentas de usuario:
| Tabla |
Columnas Clave |
Tipos SQL |
Descripción & Restricciones |
| categories |
id, name |
INT, VARCHAR(255) |
Categorías de platos con clave primaria autoincremental. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Recetas vinculadas a categorías mediante clave foránea, con ingredientes y pasos de preparación. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Cuentas de usuario con restricción de email único y contraseñas cifradas de forma segura. |
4. Matriz de Componentes Técnicos
| Componente |
Implementación Técnica |
Ventaja de Usuario & Rendimiento |
| Búsqueda Asíncrona |
JavaScript ES6 Fetch API + search.php |
Experiencia Fluida Filtrado dinámico instantáneo sin recargas de página |
| Consultas Preparadas PDO |
PHP PDO Prepared Statements |
Máxima Seguridad Protección absoluta contra inyecciones SQL |
| Sanitización de Subidas |
getimagesize() + slugify() + uniqid() |
Integridad de Archivos Bloquea archivos ejecutables encubiertos y evita sobrescrituras |
| Cifrado de Contraseñas |
password_hash() & password_verify() (Bcrypt) |
Protección de Datos Custodia segura de credenciales con Bcrypt |
Prueba Cuisinea en Directo
Explora la colección de recetas, prueba el motor de búsqueda en tiempo real y navega por la aplicación.
Visitar Aplicación Cuisinea ↗