Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Trbalhei com Smarty durante essa enquete, caso não queira usar Smarty basta igonar as classes do framework e usar os echos.
Arquivos para mostrar a enquete:
template(show_poll.tpl):
<div id="mostra_poll">
<p class="pergunta">{$pergunta}</p>
<form method="POST" action="result.php" name="poll" id="poll">
<input type="hidden" name="ref" id="ref" value="{$idpoll}">
<table width="98%">
{section name='i' loop=$opcoes}
<tr><td height="20"><input type="radio" class="opcao" name="opcao" value="{$valor[i]}"></td><td class="opcao">{$opcoes[i]}</td></tr>
{/section}
</table>
<p class="input_enquete">
<input type="submit" id="submit_poll" class="submit" value="Votar"> <input type="button" class="result" value="Resultados">
</p>
</form>
</div>
arquivo php (poll.php):
<?php
require('C:/Arquivos de programas/Apache Software Foundation/Apache2.2/htdocs/testsoh_smarty/smarty/setup.php');
$smarty = new Smarty_GuestBook();
//exibindo a enquete
$id_poll = 3; $smarty->assign('idpoll', $id_poll);
$enquete[1] = array('Teste com caracteres acentuados',
array('Você', 'União', 'Participação', 'Qualquer coisa', 'Outra coisa'));
$enquete[2] = array('Qual a sua cor preferida?',
array('Vermelho', 'Amarelo', 'Branco', 'Azul', 'Cor de rosa', 'Preto'));
$enquete[3] = array('Sobre a legalização da marijuana:',
array('Legalize já!', 'Legalize não!', 'Descriminalização sim, legalização não!', 'Tanto faz'));
$cookie_time = 7; //tempo definido em dias
$pergunta = array_shift($enquete[$id_poll]); $smarty->assign('pergunta', $pergunta); //define pergunta da enquete
$opcoes = array_pop($enquete[$id_poll]); //define opções da enquete escolhida
$n_poll = count($opcoes); //numero de opcoes da enquete
$i = 0;
while ($i <= $n_poll-1) {
$valor[$i]=$i+1;
$opcoes[$i];
$i++;
if ($i > 10) die();
} $smarty->assign('opcoes', $opcoes); $smarty->assign('valor', $valor);
//fim exibe a enquete
$smarty->caching = false;
$smarty->display('show_poll.tpl');
?>
Arquivo para tratar formulário da enquete:
result.php
<?php
include "conectabanco.php";
if ($_POST['ref'] && is_numeric($_POST['ref'])) {
$id_poll = $_POST['ref']; //verifica se o formulario foi postado
}
$cookie_time = 14; //tempo definido em dias
$ip_user = $_SERVER['REMOTE_ADDR']; //ip do usuario
$this_page = htmlentities($_SERVER['PHP_SELF']); //htmlentities pra segurança, evita code injection
$sql = mysql_query('SELECT * FROM enquete WHERE ip="'.$ip_user.'" AND id_enquete="'.$id_poll.'"') or die(mysql_error());
if (mysql_num_rows($sql)>=1 || isset($_COOKIE['poll'.$id_poll])) {
echo "<p class=\"msg_ajax\"><font color='red'>Voce nao pode votar novamente.</font></p>";
include "show_result.php";
}else{
setcookie('poll'.$id_poll, $id_poll, time()+60*60*24*$cookie_time);
mysql_query('INSERT INTO enquete VALUES("'.$id_poll.'","'.$_POST['opcao'].'","'.$ip_user.'")')or die(mysql_error());
echo "<p class=\"msg_ajax\"><b>Voto contabilizado</b></p>";
include "show_result.php";
}
?>
Arquivos para mostrar os resutados
Arquivo template (result_poll.tpl)
<div id="resultado">
<table width="98%">
{section name='i' loop=$resultado}
<tr><td width="100%" class="resultado">{$resultado[i].opcao} | {$resultado[i].porcentagem}% |</td></tr>
<tr><td width="100%" valign="top" height="12"><img style="border:solid 1px #2C5787;" src="images/poll_bar.gif" width='{$resultado[i].porcentagem}%' height="12"></td></tr>
{/section}
</table>
<p class="votos">{$totalvotos} votos <input type="button" class="voltar" value="Voltar"></p>
</div>
Arquivo php (show_result.php)
<?php
require('C:/Arquivos de programas/Apache Software Foundation/Apache2.2/htdocs/testsoh_smarty/smarty/setup.php');
$smarty = new Smarty_GuestBook();
include "conectabanco.php";
$id_poll = 3; $smarty->assign('idpoll', $id_poll);
$enquete[1] = array('Teste com caracteres acentuados',
array('Você', 'União', 'Participação', 'Qualquer coisa', 'Outra coisa'));
$enquete[2] = array('Qual a sua cor preferida?',
array('Vermelho', 'Amarelo', 'Branco', 'Azul', 'Cor de rosa', 'Preto'));
$enquete[3] = array('Sobre a legalização da marijuana:',
array('Legalize já!', 'Legalize não!', 'Descriminalização sim, legalização não!', 'Tanto faz'));
$pergunta = array_shift($enquete[$id_poll]); $smarty->assign('pergunta', $pergunta); //define pergunta da enquete
$opcoes = array_pop($enquete[$id_poll]); //define opções da enquete escolhida
$n_poll = count($opcoes); //numero de opcoes da enquete
$sql = mysql_query('SELECT * FROM enquete WHERE id_enquete="'.$id_poll.'"') or die(mysql_error());
$totalvotos = mysql_num_rows($sql); $smarty->assign('totalvotos', $totalvotos);
$i = 0;
while ($i <= $n_poll-1) { //vai calcular a porcentagem de cada voto
$sql = mysql_query('SELECT * FROM enquete WHERE id_enquete="'.$id_poll.'" and id_opcao="'.($i+1).'"') or die(mysql_error());
$votos = mysql_num_rows($sql);
$porcentagem = @round($votos*100/$totalvotos,1);
$resultado[$i]['porcentagem'] = $porcentagem;
$resultado[$i]['opcao'] = $opcoes[$i];
$i++;
if ($i > 10) die();
}
$i = 0;
while ($i <= $n_poll-1) {
//rsort($resultado); lista os resultados por ordem decrescente
$resultado[$i]['opcao'];
$resultado[$i]['porcentagem'];
$i++;
if ($i > 10) die();
} $smarty->assign('resultado', $resultado);
$smarty->caching = false;
$smarty->display('result_poll.tpl');
?>
****
Script, jquery e ajax, para validação e requisição de páginas.
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' ></script>
<script type='text/javascript' src='js/jquery.validate.js'></script>
{literal}
<script type='text/javascript'>
$(document).ready(function($) {
/* live event, faz com que outros pedidos ajax sejam aceitos futuramente */
$('.result').live('click',function(){
/* ?" + 1*new Date() uma random string que evita pagina do cache do ie */
$("#mostra_poll").load("show_result.php?" + 1*new Date(), function(){
$('#mostra_poll').replaceWith($('#resultado'));
});
});
$('.voltar').live('click',function(){
$('#resultado').load("poll.php", function(){
$('#resultado').replaceWith($('#mostra_poll'));
$('#loading').hide();
});
});
$('#submit_poll').live('click',function(){
var valida=$('#poll').validate({
rules: { opcao: "required" },
messages: { opcao: "Escolha uma das opções" },
errorClass: "msg_ajax",
errorPlacement: function(error, element){
error.insertAfter("p.input_enquete");
}
}).form();
if(valida){
var id_poll=$("#ref").val();
var opcao=$("input[@name='opcao']:checked").val();
$.ajax({
url: 'result.php',
type: 'POST',
data: 'ref=' + id_poll + '&opcao=' + opcao,
success: function(result){
$('.msg_ajax').remove();
$('#mostra_poll').replaceWith(result);
}
});
}
return false;
});
});
</script>
{/literal}
Exemplo do codigo funcionando na pagina: www.testsoh.com.br
Boa parte parte do codigo em php surgiu dessa pagina aqui, onde também há um script para crição do banco de dados.
Carregando comentários...