Como criar enquete com PHP

Criar enquetes no seu site é uma ótima forma de engajar o público e obter feedback. Neste post, vou te ensinar a criar uma enquete simples usando PHP, onde os usuários podem votar e ver os resultados em tempo real. Neste post, aprenda como criar enquete com PHP.

Passo 1: Estrutura HTML da enquete

Primeiro, precisamos de um formulário em HTML onde os usuários possam escolher entre as opções e enviar o voto.

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Enquete</title>
</head>
<body>
    <h2>Qual é o seu filme favorito?</h2>
    <form action="votar.php" method="POST">
        <input type="radio" id="filme1" name="opcao" value="Star Wars" required>
        <label for="filme1">Star Wars</label><br>

        <input type="radio" id="filme2" name="opcao" value="Matrix" required>
        <label for="filme2">Matrix</label><br>

        <input type="radio" id="filme3" name="opcao" value="Senhor dos Anéis" required>
        <label for="filme3">Senhor dos Anéis</label><br>

        <input type="submit" value="Votar">
    </form>

    <a href="resultados.php">Ver Resultados</a>
</body>
</html>

Passo 2: Armazenando votos com PHP

Agora, precisamos criar um script PHP para registrar os votos. Uma maneira simples de fazer isso é armazenando os votos em um arquivo de texto. Crie um arquivo chamado votar.php:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $opcao = $_POST['opcao'];

    // Verifica se a opção foi enviada corretamente
    if (!empty($opcao)) {
        // Abre o arquivo para adicionar o voto
        $arquivo = 'votos.txt';
        $dados = file_get_contents($arquivo);

        // Decodifica o JSON
        $votos = json_decode($dados, true);

        // Atualiza o contador de votos para a opção selecionada
        if (isset($votos[$opcao])) {
            $votos[$opcao]++;
        } else {
            $votos[$opcao] = 1; // Se a opção ainda não tiver votos
        }

        // Salva o novo resultado no arquivo
        file_put_contents($arquivo, json_encode($votos));

        echo "Voto registrado! <a href='resultados.php'>Ver resultados</a>";
    } else {
        echo "Por favor, selecione uma opção.";
    }
}
?>

Passo 3: Exibindo os resultados

Agora, vamos criar um arquivo resultados.php para exibir o total de votos em cada opção:

<?php
// Carrega os dados dos votos
$arquivo = 'votos.txt';
$dados = file_get_contents($arquivo);
$votos = json_decode($dados, true);

// Exibe os resultados
echo "<h2>Resultados da Enquete</h2>";
if ($votos) {
    foreach ($votos as $opcao => $contador) {
        echo "$opcao: $contador votos<br>";
    }
} else {
    echo "Ainda não há votos.";
}
?>

Passo 4: Criando o arquivo de votos

Se você ainda não tem o arquivo votos.txt, crie-o manualmente na pasta onde está rodando o seu projeto. Esse arquivo deve conter um array vazio, como mostrado abaixo:

{}

Agora você tem uma enquete funcional no seu site! Os usuários podem votar e ver os resultados em tempo real. Claro, esse é um exemplo básico. Algumas melhorias que você pode fazer incluem:

  • Limitar votos por IP para evitar múltiplos votos do mesmo usuário;

  • Adicionar mais opções de escolha;

  • Usar um banco de dados para armazenar os votos de forma mais segura e robusta.

Se você gostou desse tutorial, compartilhe com seus amigos ou deixe um comentário com dúvidas!

Outro exemplo prático com banco de dados

A enquete deste exemplo é composta de duas tabelas, uma para as perguntas (enquete) e outra para as respostas (respostas).

As estruturas SQL das tabelas são:

Para a tabela “enquete”:

INSERT INTO `enquete` VALUES (1,'Enquete');

Para a tabela “respostas”:

CREATE TABLE `respostas` (
	`Id` int(11) NOT NULL AUTO_INCREMENT,
	`enquetes_id` int(11) unsigned NOT NULL DEFAULT '0',
	`resposta` varchar(255) DEFAULT NULL,
	`votos` int(11) unsigned NOT NULL DEFAULT '0',
	PRIMARY KEY (`Id`)
	) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

Código PHP:

  //Dados para a conexão com o banco de dados
  $servidor = 'localhost';
  $usuario = 'root';
  $senha = '12345';
  $banco = 'nome_banco';
   
  $link = mysql_connect($servidor, $usuario, $senha) or die('Não foi possivel conectar: 
  ' . mysql_error());  
  $select = mysql_select_db($banco); 
  $_REQUEST["action"] = "voto";
	  
  //Verifica se o arquivo foi chamado a partir de um formulário
  if($_REQUEST["action"] == "votar")//se a var. action passada via URL for igual a "votar"
  {
    /* CÓDIGO DE VOTAR */
    
    //isset: para saber se uma variável existe 
    (retorna verdadeiro se existir e falso se não existir)
    
    //verifica se o voto válido foi enviado ao servidor
    if(isset($_POST["voto"]) && $_POST["voto"] != "")
    {
      $sql =  "UPDATE respostas SET votos = votos + 1 WHERE Id = ".$_POST["voto"];
      $result = mysql_query($sql); 	   
    }
     $sql = "UPDATE respostas SET votos = votos + 1 WHERE Id = ".$_POST["voto"];
     header("location: ?action=resultados"); //redireciona para visualizar os resultados
  }
  else if($_REQUEST["action"] == "resultados")
  {
    /* CÓDIGO DE VISUALIZAR OS RESULTADOS */
    
    // Seleciona a enquete mais recente
    $sql = "SELECT * FROM enquetes ORDER BY Id ASC LIMIT 1";
    $result = mysql_query($sql);
    if($tbl = mysql_fetch_array($result))
    {
      echo "".$tbl["enquete"]."";
            
    // Navega pelas respostas, exibindo em ordem de votos
     $sql = "SELECT * FROM resp WHERE enquetes_id = ".$tbl["Id"]." ORDER BY votos DESC";
     $result = mysql_query($sql);
      while($tbl = mysql_fetch_array($result))
      {
        echo "‹BR>".$tbl["resposta"]." (".$tbl["votos"]." votos)";
      }
    }
  }
  else //se variável action = 'voto' ...
  {
    /* CÓDIGO DE VISUALIZAR A ENQUETE */
      
    // Seleciona a enquete mais recente
    $sql = "SELECT * FROM enquetes ORDER BY Id ASC LIMIT 1";
    $result = mysql_query($sql);
    if($tbl = mysql_fetch_array($result))
    {
      echo "‹B>".$tbl["enquete"]."‹B>";        
        
   // Navega pelas respostas
   echo "<FORM action='?action=votar' method='POST'>";
   $sql = "SELECT * FROM respostas WHERE enquetes_id = ".$tbl["Id"]." ORDER BY Id ASC";
   $result = mysql_query($sql);
	  
   while($tbl = mysql_fetch_array($result))
   {
   echo "<BR›<INPUT type='RADIO' name='voto' value='".$tbl["Id"]."'› ".$tbl["resposta"]."";
   }	  
   echo "<center›<BR›<INPUT type='SUBMIT' value='Votar'›</center›";
   echo "</FORM›";
  }
 } 
QUER APRENDER PHP ORIENTADO A OBJETOS OU APERFEIÇOAR O QUE JÁ SABE?

Então conheça o curso online que já ajudou milhares de pessoas a aprender a programar e desenvolver seus próprios projetos do ZERO e usando orientação a objetos de uma forma fácil de entender.

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Sobre o Autor

Benedito Silva Júnior
Benedito Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *