Como criar avaliação com estrela em PHP
Neste tutorial, será apresentado como criar um formulário de avaliação com estrelas em PHP.
Primeiramente, será mostrado como receber os dados do formulário com PHP.
Em seguida, será apresentado como salvar no banco de dados as informações da avaliação.
Por fim, será mostrado como listar as avaliações.
Download do código fonte desenvolvido na aula: Download
Curso de PHP Developer: Mais Detalhes do Curso
Como limitar quantidade de caracteres no campo com JavaScript: Acessar
Como evitar SQL Injection: Acessar
Receber as aulas gratuitas do curso de PHP Developer: Acessar
Para começar, é criado o arquivo "index.php" com a estrutura básica do HTML.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Celke</title>
</head>
<body>
// Conteúdo da página
</body>
</html>
Implementado o formulário com a opção do usuário selecionar a quantidade de estrelas.
<!-- Inicio do formulário -->
<form method="POST" action="processa.php">
<div class="estrelas">
<!-- Carrega o formulário definindo nenhuma estrela selecionada -->
<input type="radio" name="estrela" id="vazio" value="" checked>
<!-- Opção para selecionar 1 estrela -->
<label for="estrela_um"><i class="opcao fa"></i></label>
<input type="radio" name="estrela" id="estrela_um" id="vazio" value="1">
<!-- Opção para selecionar 2 estrela -->
<label for="estrela_dois"><i class="opcao fa"></i></label>
<input type="radio" name="estrela" id="estrela_dois" id="vazio" value="2">
<!-- Opção para selecionar 3 estrela -->
<label for="estrela_tres"><i class="opcao fa"></i></label>
<input type="radio" name="estrela" id="estrela_tres" id="vazio" value="3">
<!-- Opção para selecionar 4 estrela -->
<label for="estrela_quatro"><i class="opcao fa"></i></label>
<input type="radio" name="estrela" id="estrela_quatro" id="vazio" value="4">
<!-- Opção para selecionar 5 estrela -->
<label for="estrela_cinco"><i class="opcao fa"></i></label>
<input type="radio" name="estrela" id="estrela_cinco" id="vazio" value="5"><br><br>
<!-- Campo para enviar a mensagem -->
<textarea name="mensagem" rows="4" cols="30" placeholder="Digite o seu comentário..."></textarea><br><br>
<!-- Botão para enviar os dados do formulário -->
<input type="submit" value="Cadastrar"><br><br>
</div>
</form>
<!-- Fim do formulário -->
Criado o arquivo "processa.php" para receber a quantidade de estrelas selecionada pelo usuário no formulário e salvar no banco de dados.
<?php
session_start(); // Iniciar a sessão
// Incluir o arquivo com a conexão com banco de dados
include_once './conexao.php';
// Definir fuso horário de São Paulo
date_default_timezone_set('America/Sao_Paulo');
// Acessar o IF quando é selecionado ao menos uma estrela
if (!empty($_POST['estrela'])) {
// Receber os dados do formulário
$estrela = filter_input(INPUT_POST, 'estrela', FILTER_DEFAULT);
$mensagem = filter_input(INPUT_POST, 'mensagem', FILTER_DEFAULT);
// Criar a QUERY cadastrar no banco de dados
$query_avaliacao = "INSERT INTO avaliacoes (qtd_estrela, mensagem, created) VALUES (:qtd_estrela, :mensagem, :created)";
// Preparar a QUERY
$cad_avaliacao = $conn->prepare($query_avaliacao);
// Substituir os links pelo valor
$cad_avaliacao->bindParam(':qtd_estrela', $estrela, PDO::PARAM_INT);
$cad_avaliacao->bindParam(':mensagem', $mensagem, PDO::PARAM_STR);
$cad_avaliacao->bindParam(':created', date("Y-m-d H:i:s"));
// Acessa o IF quando cadastrar corretamente
if ($cad_avaliacao->execute()) {
// Criar a mensagem de erro
$_SESSION['msg'] = "<p style='color: green;'>Avaliação cadastrar com sucesso.</p>";
// Redirecionar o usuário para a página inicial
header("Location: index.php");
} else {
// Criar a mensagem de erro
$_SESSION['msg'] = "<p style='color: #f00;'>Erro: Avaliação não cadastrar.</p>";
// Redirecionar o usuário para a página inicial
header("Location: index.php");
}
} else {
// Criar a mensagem de erro
$_SESSION['msg'] = "<p style='color: #f00;'>Erro: Necessário selecionar pelo menos 1 estrela.</p>";
// Redirecionar o usuário para a página inicial
header("Location: index.php");
}
No arquivo 'index.php', a sessão é iniciada e é verificado se existe mensagem de erro ou sucesso criada no arquivo 'processa.php'.
session_start(); // Iniciar a sessão
// Imprimir a mensagem de erro ou sucesso salvo na sessão
if(isset($_SESSION['msg'])){
echo $_SESSION['msg'];
unset($_SESSION['msg']);
}
Para finalizar, é criado o arquivo 'listar_avaliacoes.php' para listar as avaliações que estão salvas no banco de dados.
<?php
// Incluir o arquivom com a conexão com banco de dados
include_once './conexao.php';
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Celke - Listar as Avaliacoes</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="stylesheet" href="css/custom.css">
</head>
<body>
<!-- Criar menu básico -->
<a href="index.php">Avaliar</a><br>
<a href="listar_avaliacoes.php">Listar</a><br><br>
<h1>Avaliações dos Usuários</h1>
<?php
// Recuperar as avaliações do banco de dados
$query_avaliacoes = "SELECT id, qtd_estrela, mensagem
FROM avaliacoes
ORDER BY id DESC";
// Preparar a QUERY
$result_avaliacoes = $conn->prepare($query_avaliacoes);
// Executar a QUERY
$result_avaliacoes->execute();
// Percorrer a lista de registros recuperada do banco de dados
while ($row_avaliacao = $result_avaliacoes->fetch(PDO::FETCH_ASSOC)) {
//var_dump($row_avaliacao);
// Extrair o array para imprimir pelo nome do elemento do array
extract($row_avaliacao);
echo "<p>Avaliação: $id</p>";
// Criar o for para percorrer as 5 estrelas
for ($i = 1; $i <= 5; $i++) {
// Acessa o IF quando a quantidade de estrelas selecionadas é menor a quantidade de estrela percorrida e imprime a estrela preenchida
if ($i <= $qtd_estrela) {
echo '<i class="estrela-preenchida fa-solid fa-star"></i>';
} else {
echo '<i class="estrela-vazia fa-solid fa-star"></i>';
}
}
echo "<p>Mensagem: $mensagem</p><hr>";
}
?>
</body>
</html>
Baixar o código-fonte completo do projeto.
Bom, era isso. Espero que o tutorial tenha sido útil!