Last active
August 19, 2025 23:48
-
-
Save uchoamaster/3a4371d3d62c4f5479d560ba954850f3 to your computer and use it in GitHub Desktop.
Projeto sistema de comentários php procedural com banco de dados mysql
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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