📘 Aprender PHP do Zero — Parte 9: Posts com Comentários e Notificações
Agora vamos construir um sistema que permite usuários logados:
- Criar postagens
- Outros usuários comentarem
- Ver notificações de novos comentários
🧱 1. Criar tabelas no banco de dados
Execute no seu MariaDB/MySQL:
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario_id INT,
titulo VARCHAR(100),
conteudo TEXT,
data DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE comentarios (
id INT AUTO_INCREMENT PRIMARY KEY,
post_id INT,
usuario_id INT,
texto TEXT,
visto BOOLEAN DEFAULT 0,
data DATETIME DEFAULT CURRENT_TIMESTAMP
);
---
📝 2. Formulário para criar post (form_post.html)
<form method="POST" action="criar_post.php">
Título: <input name="titulo"><br>
Conteúdo:<br>
<textarea name="conteudo"></textarea><br>
<input type="submit" value="Publicar">
</form>
---
🛠️ 3. Salvar post (criar_post.php)
<?php
session_start();
require "conexao.php";
if (!isset($_SESSION["usuario_id"])) {
die("Precisa estar logado.");
}
$titulo = $_POST["titulo"];
$conteudo = $_POST["conteudo"];
$usuario_id = $_SESSION["usuario_id"];
$stmt = $conn->prepare("INSERT INTO posts (usuario_id, titulo, conteudo) VALUES (?, ?, ?)");
$stmt->bind_param("iss", $usuario_id, $titulo, $conteudo);
$stmt->execute();
header("Location: painel.php");
?>
---
📄 4. Exibir todos os posts (painel.php)
<?php
session_start();
require "conexao.php";
$res = $conn->query("SELECT posts.*, usuarios.nome FROM posts JOIN usuarios ON usuarios.id = posts.usuario_id ORDER BY posts.id DESC");
echo "<a href='form_post.html'>Novo post</a><hr>";
while ($p = $res->fetch_assoc()) {
echo "<h3>" . htmlspecialchars($p["titulo"]) . "</h3>";
echo "<p>" . nl2br(htmlspecialchars($p["conteudo"])) . "</p>";
echo "<small>Por: " . htmlspecialchars($p["nome"]) . " em " . $p["data"] . "</small><br>";
echo "<a href='ver_post.php?id=" . $p["id"] . "'>Ver e comentar</a><hr>";
}
?>
---
🗨️ 5. ver_post.php (exibe post + comentários)
<?php
session_start();
require "conexao.php";
$post_id = $_GET["id"];
$res = $conn->query("SELECT posts.*, usuarios.nome FROM posts JOIN usuarios ON usuarios.id = posts.usuario_id WHERE posts.id = $post_id");
$post = $res->fetch_assoc();
echo "<h2>" . htmlspecialchars($post["titulo"]) . "</h2>";
echo "<p>" . nl2br(htmlspecialchars($post["conteudo"])) . "</p>";
echo "<small>Por: " . $post["nome"] . "</small><hr>";
// Formulário para comentar
if (isset($_SESSION["usuario_id"])) {
?>
<form method="POST" action="comentar.php">
<input type="hidden" name="post_id" value="<?= $post_id ?>">
Comentário:<br>
<textarea name="texto"></textarea><br>
<input type="submit" value="Comentar">
</form>
<?php
} else {
echo "Você precisa <a href='login.html'>entrar</a> para comentar.";
}
// Comentários
$com = $conn->query("SELECT c.*, u.nome FROM comentarios c JOIN usuarios u ON c.usuario_id = u.id WHERE post_id = $post_id ORDER BY c.id DESC");
echo "<h3>Comentários:</h3>";
while ($c = $com->fetch_assoc()) {
echo "<p>" . nl2br(htmlspecialchars($c["texto"])) . "<br><small>Por: " . $c["nome"] . "</small></p><hr>";
}
?>
---
💬 6. comentar.php (envia comentário)
<?php
session_start();
require "conexao.php";
if (!isset($_SESSION["usuario_id"])) {
die("Precisa estar logado.");
}
$post_id = $_POST["post_id"];
$usuario_id = $_SESSION["usuario_id"];
$texto = $_POST["texto"];
$stmt = $conn->prepare("INSERT INTO comentarios (post_id, usuario_id, texto) VALUES (?, ?, ?)");
$stmt->bind_param("iis", $post_id, $usuario_id, $texto);
$stmt->execute();
header("Location: ver_post.php?id=$post_id");
?>
---
🔔 7. Notificação simples (notificacoes.php)
<?php
session_start();
require "conexao.php";
$id = $_SESSION["usuario_id"];
$sql = "SELECT COUNT(*) AS total FROM comentarios
JOIN posts ON comentarios.post_id = posts.id
WHERE posts.usuario_id = $id AND comentarios.visto = 0";
$res = $conn->query($sql);
$row = $res->fetch_assoc();
echo "🔔 Você tem " . $row["total"] . " novo(s) comentário(s)";
?>
Você pode incluir isso no topo do painel com include 'notificacoes.php';
🧪 8. Testar no Android
- Use Acode, Termux ou Palapa
- Crie as tabelas no MariaDB
- Implemente os arquivos acima
- Teste login, postagens e comentários
✅ Conclusão da Parte 9
Agora você sabe:
- Criar posts com usuários logados
- Relacionar comentários com posts e autores
- Restringir comentários para usuários autenticados
- Mostrar nome de quem comentou
- Ver notificações de novos comentários
🔜 Na Parte 10:
Deseja aprender a:
- Adicionar likes e reações aos posts?
- Permitir edição/apagar comentário?
- Fazer sistema de categorias ou tags?
Comente se tiver dúvida e, como sempre, trago soluçãopra você 🚀