sábado, 24 de dezembro de 2011

Sistema de enquete - Parte 2

 segunda parte do nosso tutorial sobre enquetes, agora falando sobre votos únicos (impedir que o mesmo usuário vote mais de uma vez na enquete) e também sobre a exclusão de uma enquete.

OBS.: Os arquivos utilizados são os mesmos criados no tutorial anterior (sistema de enquete simples em php), portanto, caso você ainda não tenha feito, veja o tutorial neste link: http://infolayer.net/linguagens/php/30-enquete-simples-php

Então vamos lá...

Primeiramente vamos permitir apenas um voto por usuário. Para isso, abra o arquivo enquete.php e ache as seguintes linhas:
View source
  1. $SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
  2.  
  3. $SQLresult = mysql_query($SQLquery,$SQLid);
  4.  
  5.  
Apague as duas linhas e coloque o seguinte código no lugar
View source
  1. if(!$_COOKIE['enquete_site']){ //verifica se já existe um cookie com o nome enquete_site no computador do usuário, se não existir
  2.  
  3.  
  4.  
  5. $SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
  6.  
  7. $SQLresult = mysql_query($SQLquery,$SQLid); //adiciona o voto
  8.  
  9. setcookie("enquete_site", $_SERVER['REMOTE_ADDR'], time()+86400); //cria um cookie no computador do usuário com o nome enquete_site, contendo o IP do usuário e válido por 86400 segundos, ou seja, 24 horas, após isso o cookie expira e a mesma pessoa pode votar novamente
  10.  
  11. }else{ //se já existir o cookie enquete_site
  12.  
  13. echo "Você já votou nesta enquete. De qualquer forma, veja o resultado atual da enquete";
  14.  
  15. }
  16.  
  17.  
Pronto, o “bloqueio” está feito. Veja que usamos cookies para verificar se o usuário votou. O único problema é que se o usuário limpar os cookies do computador, ele vai poder votar novamente. Então a pergunta: não seria melhor guardar o ip do usuário no banco de dados e fazer a verificação por aí? A resposta é: daria na mesma, pois bastaria o usuário desconectar e conectar novamente que o ip é renovado, e também pelo próprio Windows o usuário pode renovar o ip.
Agora a parte de exclusão de enquetes. Na pasta admin, crie os seguintes arquivos:
  • remover_enquete.php e excluir.php
Antes de codificar esses arquivos, abra o arquivo admin.php (também está na pasta admin) e adicione a seguinte linha:
View source
<p align="center"><a href="/remover_enquete.php">Remover enquete</a></p>
Agora sim, abra o arquivo remover_enquete.php e digite o seguinte código:
View source
<p>Escolha a enquete que deseja remover:</p>
 
 
 
 <?
 
 
 
 $servidor="localhost";
 
 $usuario="root";
 
 $password="";
 
 $base="enquete";
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 $SQLQuery = "Select * from tblenc"; //sql que seleciona todas as enquetes do banco de dados
 
 $res = mysql_query($SQLQuery); //executa a sql acima
 
 echo "<table border='1'>";
 
 while ($linha = mysql_fetch_assoc($res)){
 
 $encid = $linha['encid'];
 
 $encprg = $linha['encprg'];
 
 echo "<tr><td>$encprg</td><td><a href='excluir.php?encid=$encid'>Excluir enquete</a></td></tr>";
 
 }
 
 echo "</table>";
 
 ?>
 
 
Agora você já pode escolher a enquete que deseja excluir, mas precisamos do código que realmente irá exclui-la, então abra o arquivo excluir.php e digite o seguinte código:

View source
<?
 
 
 
 $servidor="localhost";
 
 
 
 $usuario="root";
 
 
 
 $password="";
 
 
 
 $base="enquete";
 
 
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 
 
 mysql_select_db($base,$SQLid);
 
 
 
 $encid = $_GET['encid'];
 
 
 
 $SQLQuery = "Delete from tblenc where encid='$encid'";
 
 
 
 $res = mysql_query($SQLQuery);
 
 
 
 echo "Enquete apagada com sucesso. Clique <a href='admin.php'>aqui</a> para voltar para a administração";
 
 
 
 ?>
Pronto, agora você já pode excluir uma enquete e é permitido apenas um voto por usuário por dia.

Nenhum comentário:

Postar um comentário