Skip to content

Instantly share code, notes, and snippets.

@uchoamaster
Last active August 19, 2025 23:48
Show Gist options
  • Save uchoamaster/3a4371d3d62c4f5479d560ba954850f3 to your computer and use it in GitHub Desktop.
Save uchoamaster/3a4371d3d62c4f5479d560ba954850f3 to your computer and use it in GitHub Desktop.
Projeto sistema de comentários php procedural com banco de dados mysql
<?php
// Inclui a conexão
include 'conexao.php';
// Processa o formulário se for enviado (método POST)
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Pega os dados do formulário (com sanitização básica)
$nome = mysqli_real_escape_string($conexao, $_POST['nome']);
$comentario = mysqli_real_escape_string($conexao, $_POST['comentario']);
$data_postagem = date('Y-m-d H:i:s'); // Data atual para o comentário
// Query INSERT com prepared statement para segurança
$stmt = mysqli_prepare($conexao, "INSERT INTO comentarios (nome, comentario, data_postagem) VALUES (?, ?, ?)");
if ($stmt) {
mysqli_stmt_bind_param($stmt, "sss", $nome, $comentario, $data_postagem); // "sss" para três strings
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
// Redireciona para evitar reenvio do form (boa prática)
header("Location: index.php");
exit();
} else {
echo "Erro ao preparar a query: " . mysqli_error($conexao);
}
}
// Query SELECT para exibir comentários
$resultado = mysqli_query($conexao, "SELECT * FROM comentarios ORDER BY data_postagem DESC");
if (!$resultado) {
echo "Erro na query: " . mysqli_error($conexao);
}
// Fecha a conexão no final (boa prática, mas PHP fecha automaticamente)
mysqli_close($conexao);
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistema de Comentários Simples</title>
<!-- Bootstrap 5 CDN -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body class="container my-5">
<h1 class="mb-4">Sistema de Comentários</h1>
<!-- Formulário para adicionar comentário -->
<form method="POST" class="mb-5">
<div class="mb-3">
<label for="nome" class="form-label">Seu Nome</label>
<input type="text" class="form-control" id="nome" name="nome" required>
</div>
<div class="mb-3">
<label for="comentario" class="form-label">Comentário</label>
<textarea class="form-control" id="comentario" name="comentario" rows="3" required></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar Comentário</button>
</form>
<!-- Lista de comentários -->
<h2>Comentários Existentes</h2>
<div class="row">
<?php if (mysqli_num_rows($resultado) > 0): ?>
<?php while ($row = mysqli_fetch_assoc($resultado)): ?>
<div class="col-md-6 mb-3">
<div class="card">
<div class="card-body">
<h5 class="card-title"><?php echo htmlspecialchars($row['nome']); ?></h5>
<p class="card-text"><?php echo nl2br(htmlspecialchars($row['comentario'])); ?></p>
<p class="card-subtitle text-muted">Postado em: <?php echo date('d/m/Y H:i', strtotime($row['data_postagem'])); ?></p>
</div>
</div>
</div>
<?php endwhile; ?>
<?php else: ?>
<p>Nenhum comentário ainda. Seja o primeiro!</p>
<?php endif; ?>
<?php mysqli_free_result($resultado); // Libera memória ?>
</div>
<!-- Bootstrap JS (opcional, para interatividade se precisar) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment