Aprender PHP do Zero - Parte 9

Agora vamos construir um sistema que permite usuários logados: Criar postagens Outros usuários comentarem Ver notificações de novos comentários

📘 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

  1. Use Acode, Termux ou Palapa
  2. Crie as tabelas no MariaDB
  3. Implemente os arquivos acima
  4. 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ê 🚀

1 comentário

  1. Anónimo
    Muito bom