Arquitetura de Sistema & Plataforma Culinária
Uma aplicação web desenvolvida em PHP e MySQL dedicada à descoberta, confeção e partilha de receitas gastronómicas. Dispõe de um motor de busca assíncrono em tempo real através da Fetch API, área de membros protegida com palavras-passe encriptadas em Bcrypt e validação rigorosa de imagens.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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)
Pesquisa Assíncrona Instantânea
Motor de busca em JavaScript ES6 Fetch API que consulta a base de dados MySQL em tempo real sem recarregar a página.
Área de Membros & Segurança
Sistema de registo e autenticação com encriptação forte de credenciais e notificações automáticas por e-mail via PHPMailer.
Validação Rigorosa de Ficheiros
Verificação binária de fotografias através de getimagesize() e geração de nomes de ficheiro únicos e limpos com slugify() e uniqid().
1. Módulos Funcionais & Experiência de Utilização
Módulos intuitivos desenvolvidos para simplificar a exploração de receitas e a publicação de pratos pela comunidade:
Página Principal Dinâmica
Apresentação aleatória de 3 receitas em cada visita para proporcionar inspiração culinária constante.
RAND() SQLCartes dynamiquesBootstrap 5
Ficha de Receita Detalhada
Apresentação estruturada com listagem de ingredientes linha a linha e passos de preparação numerados.
IngrédientsÉtapes pas-à-pasnl2br
Criação & Gestão de Receitas
Formulário seguro para utilizadores registados com seleção de categoria e carregamento controlado de fotografias.
Upload MIMEslugify()uniqid()
2. Pesquisa Assíncrona & Segurança SQL
O script search.php executa consultas SQL preparadas com múltiplos critérios, garantindo imunidade total contra injeções 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
]);
- Pesquisa Textual Universal: Pesquisa simultânea no título, descrição e lista de ingredientes através do operador SQL LIKE.
- Filtragem por Categoria: Filtragem imediata por tipo de refeição (Entradas, Pratos Principais, Sobremesas) carregada dinamicamente via API.
- Informação de Sem Resultados: Mensagem amigável e clara quando nenhuma receita corresponde aos termos de pesquisa introduzidos.
3. Modelo de Dados & Esquema Relacional MySQL
Estrutura relacional normalizada que assegura a integridade dos dados entre receitas, categorias e contas de utilizadores:
| Tabela |
Colunas Principais |
Tipos SQL |
Descrição & Restrições |
| categories |
id, name |
INT, VARCHAR(255) |
Categorias de pratos com chave primária de incremento automático. |
| recipes |
id, category_id, title, description, ingredients, instructions, image |
INT, TEXT, VARCHAR(255) |
Receitas associadas a categorias por chave estrangeira, com listas de ingredientes e passos de confeção. |
| users |
id, first_name, last_name, email, password, role |
INT, VARCHAR(255) |
Contas de utilizador com restrição de e-mail único e palavras-passe devidamente encriptadas. |
4. Matriz de Componentes Técnicos
| Componente |
Implementação Técnica |
Vantagem de Desempenho & Utilizador |
| Pesquisa Assíncrona |
JavaScript ES6 Fetch API + search.php |
Experiência Fluida Filtragem dinâmica imediata sem recarregamento de página |
| Consultas Preparadas PDO |
PHP PDO Prepared Statements |
Segurança Máxima Proteção total contra vulnerabilidades de injeção SQL |
| Sanitização de Uploads |
getimagesize() + slugify() + uniqid() |
Integridade de Ficheiros Bloqueia ficheiros executáveis disfarçados e previne substituições acidentais |
| Encriptação de Palavras-Passe |
password_hash() & password_verify() (Bcrypt) |
Proteção de Dados Salvaguarda segura de credenciais de acordo com o padrão Bcrypt |
Experimente o Cuisinea Online
Explore a coleção de receitas, teste a pesquisa em tempo real e navegue pela aplicação.
Visitar Aplicação Cuisinea ↗