Enquete em PHP e MySQL


Autor/fonte: Ândres Oliveira
E-mail/Url: http://www.revistaphp.com.br/artigo.php?id=137
Tags: [ enquete ]



Digg del.icio.us

Montaremos neste artigo uma simples enquete, porém muito funcional e sutil, utilizada em muitos web sites como uma coleta de opiniões e preferências ante opções e uma pergunta central.

Para isso utilizaremos uma tabela de dados MySQL.

Estrutura da tabela:



O código fonte

Arquivo enquete_blt.ini.php:



Explicação do código

Antes que nada, como de costume criaremos a conexão com o servidor MySQL e selecionaremos o banco de dados com o qual trabalharemos.

Definiremos uma função com o nome de show_enquete($id_enquete, $protecao_IP), onde $id_enquete, se refere ao identificador da enquete que utilizaremos. Este sistema está adaptado para suportar um sem fim de enquetes, e $protecao_IP cujo valor deve ser sempre um booleano (TRUE ou FALSE) e é o encarregado de não permitir que um usuário vote mais de uma vez, utilizando seu endereço IP como referência.

Associamos em um array multidimencional o conteúdo de nossa enquete:



Onde 1, é o identificador de nossa enquete, se quisermos inserir uma nova pergunta utilizaremos $enquete [2] e assim sucessivamente seguindo o esquema, em ordem ascendente, cabe destacar que não podemos repetir o valor numérico, já que mudaríamos o conteúdo por este último. Pergunta, é a pergunta central da enquete e A,B,C,D,E,… são as opções a escolher pelos usuários. Podemos utilizar um sem fim de opções sempre e quando sigamos o esquema.

Logo, utilizamos a função array_key_exists(), para verificar que existe o identificador da enquete, esta função comprova se existe o índice ou a chave de um array. Colocamos o (!) ao começo para indicar se a condição da função anterior devolve FALSE, para retornar uma mensagem de erro ('o ID da enquete não se encontra disponível').

Agruparemos na variável $pergunta_da_enquete, o primeiro valor da matriz $enquete[$id_ENQUETE] com a função array_shift(), o que seria praticamente o mesmo utilizando $enquete[$id_ENQUETE][0]., porém, neste caso usamos uma função definida em PHP para este rol; como é o caso de array_pop(), que nos extrai o último valor da matriz $enqueta[$id_ENQUETE], que seria por sua vez outra matriz ou array com todas nossas opções da pergunta: array('A','B','C','D','E','…',)

Comprovaremos se $_POST[opcao] está definida ou toma algum valor, onde opção, é o nome do botão de OPCAO ou Radio. Se esta condição avalia TRUE, indica que alguma opção foi clicada e foi processado o formulário.

Para executar as seguintes instruções: Enviaremos uma petição ao servidor Mysql com mysql_query(consulta…) para obter todos os registros onde coincidem a fila IP, com o endereço IP do cliente $REMOTE_ADDR, utilizando a cláusula WHERE. Logo, iniciamos uma nova condição, agora indicando se $protecao_IP é TRUE e (Lógico &&) o total de registros da consulta anterior é igual ou maior a 1. Para gerar uma mensagem de erro e impedir o registro do novo voto.

Algo como: Meu IP é: 127.0.0.1.

Executo a consulta MySQL e me indica que esse IP já está registrado em um voto anterior.

O valor que atribui a $protecao_IP quando chamar minha função é TRUE.

Então estes dois valores são verdadeiros. E o programa me responde bye, bye, bye. Você já votou…

Se $protecao_IP for FALSE, então posso votar um montão de vezes mesmo estando registrado o IP, do contrário (else) insere-se um novo registro com dados essenciais para o funcionamento desta enquete. Fim do else.

A partir deste ponto trabalharemos sem importar se está definida ou não $_POST[opcao].

Realizando uma nova consulta a MySQL, para obter o total de registro correspondente à enquete que está correndo. Para utilizar este valor no cálculo da porcentagem de cada opção.

$html_enquete, esta variável conterá o resultado que se imprimirá em tela, por isso usam-se conectores (.=) e seu conteúdo são etiquetas de HTML, com o formulário e os demais textos.

Utilizamos o prático loop FOREACH, para fazer um percorrido rápido de todas as opções (a,b,c,d,..) onde obteremos o valor do $KEY ou Chave e o nome da $OPCAO.

Voltaremos a realizar uma consulta para buscar agora todos os votos dessa opção e dessa enquete. Obtemos o total de registros.

Para logo com a função round() arredondar o valor de ($votos_x_opcao*100/$total_votos) com 1 decimal. Onde $votos_x_opcao são todos os votos por essa opção e $total_votos o total de votos por toda a enquete.

O mesmo processo empregado para obter qualquer porcentagem, colocamos o (@) para evitar que se mostre um erro por acaso $total_votos eh == a 0 ( ZERO)

Finalmente com return, retornamos o conteúdo de $html_enquete.

Para chamar a função executamos o seguinte:





Enviado por xKuRt em


Itens relacionados

Exemplo de enquete com PHP e MySQL
Montando uma enquete com AJAX e PHP
PHPSurveyor - software livre de criação de questionários on-line

Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).


Envio de comentário:




  

Terça, 27 de Junho de 2017




Leitura recomendada

A Galáxia da Internet

Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Desenvolvendo Websites com PHP - Aprenda a Criar Websites Dinâmicos e Interativos com PHP e Banco de Dados


Capa do livro
Autodesk Revit Architecture 2013: Conceitos e Aplicações


Capa do livro
Cloud Computing - Computação em Nuvem - Uma Abordagem Prática





Hostnet

IMD