huoxito 0 Denunciar post Postado Setembro 16, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites