| Referência: Existem uma série de artigos sobre a criação de uma enquete em PHP, tratados anteriormente em CriarWeb.com. |
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:
$enquete[1]=array('Pergunta ',array('A','B','C','D','E','…',));
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; return ('O id da enquete nao…);
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:
<?
include('enquete_blt.ini.php');
echo show_enquete(1,true);
?>