Site de publicação de notícias com editorial integrado.
🌐 Website: newsdrop.net.br
- Características
- Requisitos
- Instalação
- Estrutura do Projeto
- Funcionalidades
- APIs
- Contribuindo
- Documentação
- Troubleshooting
- 📝 Sistema Editorial Completo - Criar, editar e publicar notícias
- 👥 Autores/Colunistas - Gestão de múltiplos autores
- 📊 Analytics - Rastreamento de visualizações e compartilhamentos
- 🔍 Busca - Sistema de busca de notícias inteligente
- 📱 Responsivo - Design mobile-first
- 🔐 Autenticação - Login seguro com sessões
- 🌐 Compartilhamento Social - Twitter, Facebook, LinkedIn, WhatsApp
- 📧 Newsletter - Inscrição de leitores
- 🎯 Categorização - Organização por categorias
- PHP: 8.0 ou superior
- Banco de Dados: MySQL 5.7+ ou MariaDB 10.2+
- Servidor Web: Apache 2.4+ ou Nginx 1.20+
- Navegador moderno (Chrome, Firefox, Safari, Edge)
- JavaScript habilitado
- Cookies habilitados (para sessões)
php-pdo
php-pdo-mysql
php-curl
php-fileinfogit clone https://github.com/seu-usuario/newsdrop.git
cd newsdropOpção A: XAMPP (Recomendado para Produção)
# Iniciar MySQL no XAMPP
# 1. Abrir XAMPP Control Panel
# 2. Clicar "Start" em MySQL (porta 33306)
# Importar banco existente via phpMyAdmin
# http://localhost/phpmyadmin
# - Criar database: vini5607_noticias
# - Importar arquivo SQL gerado do backupOpção B: PHP Built-in Server (Desenvolvimento)
# Apenas para testes rápidos (sem XAMPP)
# MySQL precisa estar rodando em XAMPP
php -S localhost:8000Editar conexao.php:
<?php
// XAMPP Local (Porta 33306)
$host = 'localhost:33306';
$db = 'vini5607_noticias';
$user = 'root';
$pass = ''; // Sem senha no XAMPP
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$conn = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
?># Linux/Mac
chmod 755 tmp_sessions/
chmod -R 755 imagems/
# Windows (PowerShell - Se necessário)
icacls "tmp_sessions" /grant:r Users:(F)
icacls "imagems" /grant:r Users:(F)Local (PHP Server):
php -S localhost:8000
# Abrir: http://localhost:8000Production (XAMPP/Apache):
1. Copiar projeto para: C:\xampp\htdocs\newsdrop
2. Abrir: http://localhost/newsdrop
newsdrop/
├── index.php # Página inicial
├── login.php # Login de autores
├── logout.php # Logout
├── noticia.php # Página individual de notícia
├── busca.php # Busca de notícias
├── portifolio.php # Galeria de autores
├── recuperar_senha.php # Recuperação de acesso
├── inscricao_colunistas.php # Inscrição de novos autores
│
├── processa_*.php # Processamento de formulários
│ ├── processa_inscricao.php # Inscrição
│ ├── processa_newsletter.php # Newsletter
│ └── processa_estatisticas.php # Analytics (AJAX)
│
├── conexao.php # Conexão com banco de dados
│
├── css/ # Estilos
│ ├── style.css # Estilos principais
│ └── responsive.css # Media queries
│
├── js/ # Scripts
│ └── script.js # JavaScript principal
│
├── imagems/ # Imagens do site
│ ├── biblioteca.avif # Assets principais
│ └── thumbnails/ # Cache de miniaturas
│
├── painel/ # Painel Editorial (admin)
│ ├── dashboard2.php # Dashboard principal
│ ├── nova-noticia.php # Criar notícia
│ ├── editar-noticia.php # Editar notícia
│ ├── ver-noticias.php # Listar notícias
│ ├── editar-autor.php # Perfil do autor
│ ├── estatisticas.php # Analytics
│ ├── compartilhar.php # Modal de compartilhamento
│ ├── busca.php # Busca interna
│ ├── noticia.php # Preview de notícia
│ ├── salvar-noticia.php # Salvar criação
│ ├── salvar_edicao.php # Salvar edição
│ └── conexao.php # Conexão local
│
├── tmp_sessions/ # Arquivos de sessão (não commitar)
│
├── .gitignore # Git ignore
├── .gitattributes # Configuração de line endings
│
├── ANALISE_PROJETO.md # Análise de arquivos
├── MAPA_DEPENDENCIAS.md # Mapa de dependências
├── LIMPEZA_SCRIPT.md # Script de limpeza
└── README.md # Este arquivo
| Funcionalidade | Endpoint | Descrição |
|---|---|---|
| Listar Notícias | index.php |
Homepage com ultimas 12 notícias |
| Ver Notícia | noticia.php?id=X |
Página individual |
| Buscar | busca.php?q=termo |
Buscar por título/conteúdo |
| Compartilhar | Modal JS | Twitter, Facebook, LinkedIn, WhatsApp |
| Newsletter | index.php |
Form de inscrição na newsletter |
| Inscrição | inscricao_colunistas.php |
Formulário de inscrição colunista |
| Funcionalidade | Endpoint | Descrição |
|---|---|---|
| Dashboard | painel/dashboard2.php |
Visão geral de notícias |
| Criar | painel/nova-noticia.php |
Criar nova notícia |
| Editar | painel/editar-noticia.php?id=X |
Editar existente |
| Publicar | painel/salvar-noticia.php |
Salvar rascunho/publicar |
| Listar | painel/ver-noticias.php |
Todas as notícias do autor |
| Analytics | painel/estatisticas.php |
Visualizações, compartilhamentos |
| Perfil | painel/editar-autor.php |
Editar dados do autor |
// Visualização
fetch('processa_estatisticas.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'acao=registrar_visualizacao&id_noticia=1'
});
// Compartilhamento
fetch('processa_estatisticas.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'acao=registrar_compartilhamento&id_noticia=1&rede_social=twitter'
});
// Tempo de Leitura
fetch('processa_estatisticas.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'acao=registrar_tempo_leitura&id_noticia=1&tempo=120'
});| Endpoint | Método | Parâmetros | Descrição |
|---|---|---|---|
processa_inscricao.php |
POST | nome, email, tratamento, experiencia, biografia | Inscrição colunista |
processa_newsletter.php |
POST | nome, email | Inscrição newsletter |
processa_estatisticas.php |
POST | acao, id_noticia, [rede_social], [tempo] | Registrar ações |
- ✅ Hash de senhas com
password_hash() - ✅ Prepared statements contra SQL injection
- ✅ Sessão com token de CSRF
- ✅ Sanitização de entrada com
filter_input() - ✅ Proteção de upload de imagem
- Implementar reCAPTCHA em formulários públicos
- Adicionar rate limiting em login
- Implementar 2FA opcional
- Adicionar HTTPS enforcement
- Implementar CSP headers
- Adicionar validação de origem (CORS)
-- Autores/Colunistas
CREATE TABLE autor (
Id_autor INT PRIMARY KEY AUTO_INCREMENT,
Nome_autor VARCHAR(255) NOT NULL UNIQUE,
Email VARCHAR(255) NOT NULL UNIQUE,
Senha_hash VARCHAR(255) NOT NULL,
Tratamento VARCHAR(50),
Foto_autor VARCHAR(255),
Biografia TEXT,
Status_autor ENUM('ativo', 'inativo') DEFAULT 'ativo',
Data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Notícias
CREATE TABLE noticia (
Id_noticia INT PRIMARY KEY AUTO_INCREMENT,
Id_autor INT NOT NULL,
Titulo VARCHAR(255) NOT NULL,
Subtitulo VARCHAR(255),
Conteudo LONGTEXT NOT NULL,
Imagem_url VARCHAR(255),
id_categoria INT NOT NULL,
Id_subcategoria INT,
Status_noticia ENUM('rascunho', 'publicado') DEFAULT 'rascunho',
Data_publicacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
Data_atualizacao TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (Id_autor) REFERENCES autor(Id_autor),
FOREIGN KEY (id_categoria) REFERENCES categoria(Id_categoria)
);
-- Categorias
CREATE TABLE categoria (
Id_categoria INT PRIMARY KEY AUTO_INCREMENT,
Nome_categoria VARCHAR(100) NOT NULL UNIQUE,
Descricao TEXT,
Status_categoria ENUM('ativo', 'inativo') DEFAULT 'ativo'
);
-- Estatísticas
CREATE TABLE estatisticas (
Id_stat INT PRIMARY KEY AUTO_INCREMENT,
Id_noticia INT NOT NULL,
Tipo_evento ENUM('visualizacao', 'compartilhamento', 'tempo_leitura') NOT NULL,
Rede_social VARCHAR(50),
Usuario_ip VARCHAR(45),
Tempo_leitura INT,
Data_evento TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (Id_noticia) REFERENCES noticia(Id_noticia)
);- ✅ Hospedagem Atual: HostGator/PHP Compartilhado
- ✅ RAM: 2GB+ recomendado
- ✅ Espaço: 10GB+
- ✅ Banda: 50GB+ mensal
- FTP/SFTP para host
- Subir arquivos (exceto em
.gitignore) - Importar banco de dados
- Configurar
conexao.php - Testar todas as funcionalidades
- Configurar HTTPS
- Monitorar
error_log
Solução:
// Verificar caminho relativo
require_once '../conexao.php'; // Do painel
require_once './conexao.php'; // Da raizSolução:
- Verificar
tmp_sessions/existe e é gravável - Verificar
session.save_pathemphp.ini - Limpar cookies do navegador
Solução:
- Verificar permissões de
imagems/(755) - Verificar
upload_max_filesizeemphp.ini - Verificar
post_max_sizeemphp.ini
Solução:
- Verificar credenciais em
conexao.php - Verificar se database existe
- Verificar permissões do usuário MySQL
- Fork o projeto
- Criar branch (
git checkout -b feature/AmazingFeature) - Commit mudanças (
git commit -m 'Add AmazingFeature') - Push para branch (
git push origin feature/AmazingFeature) - Abrir Pull Request
Este projeto está sob a licença MIT. Ver arquivo LICENSE para mais detalhes.
NewsDrop
- 🌐 Website: newdsrop.net.br
- 📧 Email: contato@newsdrop.net.br
Para suporte, abrir issue no GitHub ou contatar via email.
Última atualização: 3 de março de 2026