sábado, 24 de dezembro de 2011

Criando um sistema simples de enquete em PHP

Olá pessoal. Aqui está mais um tutorial de PHP para vocês. Desta vez falaremos sobre a criação de um sistema de enquete simples (aquela enquete que permite que você vote quantas vezes quiser). Num próximo tutorial veremos como fazer essa enquete permitindo apenas um voto por IP.

Em primeiro lugar, baixe as imagens que serão as barras indicadoras de quantidade de votos aqui: DOWNLOAD.

Agora que você tem as imagens, vamos criar a seguinte estrutura (coloque em um servidor ou em localhost):
enquetes
admin
admin.php
enqadic.html
encadic.php
index.php
login.php
logout.php
imagens
barra1.gif
barra2.gif
barra3.gif
barra4.gif
enquete.php
votar.php
OBS.: Já deixe os arquivos criados, depois é só colocar o código.

Feito isso, hora de criar o banco de dados para armazenar as enquetes, votos e o login de administrador.

Abra o PhpMyAdmin e crie um banco de dados (com o nome que desejar, no tutorial demos o nome de “enquete” – sem aspas). Nesse banco de dados, vá na guia SQL e cole o seguinte código:

-- phpMyAdmin SQL Dump
-- version 2.11.3deb1ubuntu1.3
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Jan 04, 2010 as 09:40 PM
-- Versão do Servidor: 5.0.51
-- Versão do PHP: 5.2.4-2ubuntu5.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `enquetes`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `tblenc`
--

CREATE TABLE IF NOT EXISTS `tblenc` (
`encid` int(11) NOT NULL auto_increment,
`encprg` varchar(50) default NULL,
`encrpt1` varchar(50) default NULL,
`encrpt2` varchar(50) default NULL,
`encrpt3` varchar(50) default NULL,
`encrpt4` varchar(50) default NULL,
`encval1` int(11) NOT NULL default '0',
`encval2` int(11) NOT NULL default '0',
`encval3` int(11) NOT NULL default '0',
`encval4` int(11) NOT NULL default '0',
`enctot` int(11) NOT NULL default '0',
PRIMARY KEY  (`encid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `tblenc`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `tblusuario`
--

CREATE TABLE IF NOT EXISTS `tblusuario` (
`nomeusuario` varchar(16) NOT NULL,
`senha` varchar(32) NOT NULL,
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Extraindo dados da tabela `tblusuario`
--

INSERT INTO `tblusuario` (`nomeusuario`, `senha`, `id`) VALUES
('admin', '123456', 1);

Altere acima o nome do usuário (admin) e a senha (123456) para o desejado.

Veja na próxima página como criar o login a parte de “administração” das enquetes, onde você vai adicionar as enquetes.


A partir daqui, todos os arquivos a serem abertos são os da pasta “admin”. No arquivo index.php (que será a página de login) digite o seguinte código:

View source
<html>
 
 <head>
 
 <meta content="text/html; charset=ISO-8859-1"
 
 http-equiv="content-type">
 
 <title></title>
 
 </head>
 
 <body>
 
 <form method="post" action="login.php">Nome de Usuário: <input
 
 name="login" type="text"><br>
 
 Senha: <input type="password"><br>
 
 <input value="Enviar"></form>
 
 </body>
 
 </html>
Feito isso, abra o arquivo login.php e digite o seguinte código:

View source
<?
 
 session_start();
 
 $servidor="localhost"; //servidor do banco de dados, normalmente é localhost
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //a senha do seu banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password); //faz a conexão com o banco de dados
 
 mysql_select_db($base,$SQLid); //seleciona o banco de dados
 
 
 
 $login = $_POST['login']; //”recupera” o texto digitado no campo login
 
 $senha = $_POST['senha']; //”recupera” o texto digitado no campo senha
 
 
 
 if(!$login || !$senha){ //se a variável $login ou a variável $senha estiverem vazias
 
 echo "Você não digitou o usuário ou senha."; //avisa que os campos não foram preenchidos
 
 exit; //termina a execução do script
 
 } //termina o if(!$login || !$senha)
 
 $SQL = "select * from tblusuario where nomeusuario='$login' and senha='$senha'"; //seleciona todos os campos da tabela tblusuario onde o campo ‘nomeusuario’ seja igual a variável $login e o campo ‘senha’ seja igual a variável $senha
 
 $resultado=mysql_query($SQL) or die("Erro no banco de dados"); //executa o SQL acima
 
 $total=mysql_num_rows($resultado); //retorna o total de “linhas” encontradas pela consulta executada acima
 
 
 
 if($total){ //se $total tiver algum valor
 
 $dados=mysql_fetch_array($resultado); //retorna um array que corresponde a linha obtida
 
 if(!strcmp($senha, $dados["senha"])){ //se a senha digitada (armazenada na variável $senha) for igual a armazenada no banco de dados
 
 $_SESSION["id"] = $dados["id"]; //cria uma variável de sessão com o nome “id” e armazena o “id” do usuário
 
 $_SESSION["login"] = $dados["nomeusuario"]; //cria uma variável de sessão com “login” e armazena o “nomeusuario”
 
 $_SESSION["senha"] = $dados["senha"]; //cria uma variável de sessão com o nome “senha” que armazena a “senha”
 
 header("Location: admin.php"); //redireciona para a página “admin.php”
 
 exit; //termina a execução do script
 
 } //termina o if(!strcmp($senha,$dados[“senha”]))
 
 else{ //caso contrário (ou seja, se a senha digitada for diferente da armazenada no banco de dados)
 
 echo "Senha inválida"; //avisa que a senha está errada
 
 exit; //termina a execução do script
 
 } //termina o else
 
 } //termina o if($total)
 
 else{ //caso o usuário não exista no banco de dados
 
 echo "O usuário fornecido não existe"; //avisa que o usuário não existe
 
 exit; //termina a execução do script
 
 } //termina o else
 
 ?>
Agora que já temos o login, precisamos do logout. Abra o arquivo logout.php e digite o seguinte código:

View source
<?
 
 session_start(); //inicia a sessão
 
 session_destroy(); //destrói a sessão
 
 header("Location:index.php"); // redireciona para a página index.php
 
 ?>
Vamos agora codificar a página do administrador. Abra o arquivo admin.php e digite o seguinte código:

View source
<p align="center"><a href="/enqadic.html">Adicionar Enquete</p>
 
 <p align="center"><a href="/logout.php">Logout</a></p>
No momento, só falta um formulário para colocar os dados da nova enquete, e também o arquivo php que adiciona a enquete no banco de dados.
Abra o arquivo enqadic.html e digite o seguinte código:

View source
<form name="adiciona" method="post" action="enqadic.php">
 
 Pergunta: <input type="text"><br>
 
 Resposta 01: <input type="text"><br>
 
 Resposta 02: <input type="text"><br>
 
 Resposta 03: <input type="text"><br>
 
 Resposta 04: <input type="text"><br>
 
 <input type="submit" value="Enviar">
 
 </form>
Por último, abra o arquivo enqadic.php e digite o seguinte código:
View source
<?
 
 session_start();
 
 $pergunta = $_POST["txtperg"];
 
 $resp1 = $_POST["txtresp1"];
 
 $resp2 = $_POST["txtresp2"];
 
 $resp3 = $_POST["txtresp3"];
 
 $resp4 = $_POST["txtresp4"];
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 
 
 if(!$_SESSION["login"] || !$_SESSION["senha"]){
 
 echo "Você deve estar logado para adicionar uma enquete";
 
 exit;
 
 }else{
 
 $inclui = "INSERT INTO `$base`.`tblenc` (
 
 `encid` ,
 
 `encprg` ,
 
 `encrpt1` ,
 
 `encrpt2` ,
 
 `encrpt3` ,
 
 `encrpt4` ,
 
 `encval1` ,
 
 `encval2` ,
 
 `encval3` ,
 
 `encval4` ,
 
 `enctot`
 
 )
 
 VALUES (
 
 NULL , '$pergunta', '$resp1', '$resp2', '$resp3', '$resp4', '0', '0', '0', '0', '0'
 
 );";
 
 $executa = mysql_query($inclui);
 
 if($executa){
 
 echo "Enquete adicionada com sucesso. <a href='../index.php'>Clique aqui para voltar para a página principal";
 
 }else{
 
 echo "Erro ao adicionar a enquete";
 
 }
 
 }
 
 ?>
Pronto, a parte de administração (adição de enquete) está feita. Os arquivos que serão editados agora estão na raiz (direto na pasta enquetes).


Abra o arquivo enquete.php e digite o seguinte código (lembrando que os arquivos a serem editados daqui pra frente estão direto na pasta enquetes):

View source
<?
 
 //recebo o voto
 
 $voto = $_POST["voto"];
 
 //recebo o id da enquete
 
 $encid = $_POST["encid"];
 
 
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 $SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLquery = "SELECT * FROM tblenc where encid=$encid";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLrow = mysql_fetch_array($SQLresult);
 
 ?>
 
 <P ALIGN="center"><font size="4"><strong><em>RESULTADOS PARCIAIS DA
 
 ENQUETE</em></strong></font></P>
 
 <P ALIGN="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
 
 <?
 
 echo $SQLrow["encprg"] ;
 
 ?>
 
 </font></strong></P>
 
 <TABLE ALIGN="center" WIDTH="75%" BORDER="0" CELLSPACING="1" CELLPADDING="1">
 
 <!--DWLayoutTable-->
 
 <TR>
 
 <TD ALIGN="left" WIDTH="23%"><? echo $SQLrow["encrpt1"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra1.gif"></TD>
 
 <TD ALIGN="center" WIDTH="14%"><? echo $SQLrow["encval1"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt2"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval2"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra2.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval2"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt3"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval3"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra3.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval3"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt4"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval4"]*100/$SQLrow["enctot"];?>%" SRC="imagenes/barra4.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval4"];?> votos</TD>
 
 </TR>
 
 </TABLE>
 
 <P ALIGN="center">Total de votos emitidos: <? echo $SQLrow["enctot"];?></P>
Por ultimo, abra o arquivo votar.php e digite o seguinte código:

View source
<?
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 $SQLquery = "SELECT * FROM tblenc order by encid desc";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLrow = mysql_fetch_array($SQLresult);
 
 ?>
 
 <form method="post" action="enquete.php">
 
 <input name="encid" value="<?echo $SQLrow[0]?>">
 
 <table width="100" border="0" align="center" cellpadding="0" cellspacing="0">
 
 <tr>
 
 <td bgcolor="#000000"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">::::::::::::::::::</font></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <div align="center"><font color="#ffffff" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>
 
 <? echo $SQLrow[1]?>
 
 </strong></font></div></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <p> <font color="#ffffff" size="2">
 
 <label>
 
 <input value="1">
 
 <? echo $SQLrow[2]?></label>
 
 <br>
 
 <label>
 
 <input value="2">
 
 <? echo $SQLrow[3]?></label>
 
 <br>
 
 <label>
 
 <input value="3">
 
 <? echo $SQLrow[4]?></label>
 
 <br>
 
 <label>
 
 <input value="4">
 
 <? echo $SQLrow[5]?></label>
 
 <br>
 
 </font></p></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <div align="center">
 
 <input value="Aceitar">
 
 </div></td>
 
 </tr>
 
 </table>
 
 </form>
 
 
Pronto, seu sistema de enquetes está feito. Para adicionar a enquete na página principal, a mesma deve ser salva com a extensão .php e você deve adicionar o seguinte código onde desejar que ela apareça:

View source
<? include "votar.php"; ?>
É isso aí. Espero que tenham gostado e qualquer dúvida, só falar. Lembrando que no próximo tutorial iremos melhorar este sistema, permitindo apenas um voto por IP e adicionando o recurso de poder excluir uma enquete.

Nenhum comentário:

Postar um comentário