Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

huoxito

[Resolvido] Enquete com PHP, MySQL, Smarty, jQuery e ajax

Recommended Posts

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.