CAFÉ AURORA — WEB II — CHECKPOINT DO CAPÍTULO 6

Este checkpoint serve para conferência ou retomada depois da construção prática.
Ele inclui os capítulos anteriores e acrescenta a gravação protegida das mensagens no SQLite.

COMO EXECUTAR
1. Abra a pasta cafe-aurora-web2 no VS Code.
2. Confira o PHP e os módulos no terminal:
   php -v
   php -m | findstr /I "PDO sqlite"
3. Verifique a sintaxe:
   php -l public/index.php
   php -l public/cardapio.php
   php -l public/contato.php
   php -l src/banco.php
   php -l src/inicializar-banco.php
4. Prepare o banco:
   php src/inicializar-banco.php
5. Confirme a mensagem:
   Banco e tabela preparados com sucesso.
   Mensagens cadastradas: 0
6. Inicie o servidor:
   php -S localhost:8000 -t public
7. Abra http://localhost:8000/contato.php no navegador.
8. Envie uma mensagem válida e confirme a mensagem de sucesso.
9. Em outro terminal, execute novamente:
   php src/inicializar-banco.php
10. Confirme que agora existe uma mensagem cadastrada.
11. Para encerrar o servidor, pressione Ctrl + C no terminal.

O QUE FOI ACRESCENTADO
- token CSRF aleatório associado à sessão;
- campo oculto que devolve o token ao servidor;
- comparação do token com hash_equals;
- conexão do formulário com a função conectarBanco;
- INSERT com marcadores nomeados;
- execução preparada com os valores validados;
- telefone vazio armazenado como ausência de valor;
- tratamento de falha sem expor detalhes técnicos na página;
- confirmação verdadeira depois da gravação;
- preservação do padrão POST–Redirect–GET.

CONFIRA
- o arquivo dados/cafe-aurora.sqlite permanece fora de public;
- enviar com o campo csrf_token removido no DevTools retorna 403 e não grava;
- um envio válido concluído acrescenta uma linha;
- atualizar a confirmação não grava novamente;
- um nome com apóstrofo, como Ana O'Connor, é tratado como dado;
- executar o inicializador novamente preserva os registros;
- validação, acessibilidade e capítulos anteriores continuam funcionando.

IMPORTANTE
- SQLite é o banco desta etapa e PDO é a interface usada pelo PHP;
- não coloque o arquivo cafe-aurora.sqlite dentro de public;
- não publique o banco, mensagens, e-mails ou telefones em um repositório;
- comandos preparados não substituem a validação dos campos;
- o token CSRF não substitui controle de robôs, limite de uso ou autenticação;
- detalhes de falhas do banco ficam no registro de erros do servidor;
- as imagens WebP, a responsividade e a acessibilidade do projeto foram preservadas;
- o próximo capítulo deverá consultar as mensagens sem expor dados pessoais ao público.
