Desenvolvendo um sistema de Enquete Completo (yourspot.com.br) - Parte 1
O arquivo top.php estará incluído junto com a página da enquete para carregar as configurações do sistema. Isto podia ser feito tudo junto no arquivo enquete, mas para ficar um sistema mais organizado, particularmente prefiro fazer essa divisão e depois incluir em uma única página. Várias pessoas também preferem fazer essa divisão para facilitar futuras manutenções no script.
[top.php]
Esta é a página onde incluiremos os dois arquivos (enquetes.php e top.php)
[index.php]
[top.php]
<?php
//incluir arquivo de configuração
include ("config.php");
//se a URL no navegador for http://www.site.com.br/index.php?enquete=ID então exibi os seguintes resultados do MySQL
if (isset ($_REQUEST['enquete'])) {
//seleciona todas as tabelas do banco de dados do sistema de enquete para fazer uma verificação geral e exibi uma enquete específica
$resultado = mysql_query ("SELECT enqueteid, titulo, starts, expira, voto, votando, resultados, grafico, resultadosvotos, ip, cookies FROM enquetes WHERE status='on' AND enqueteid='$_REQUEST[enquete]'");
//caso cotrário, se não especificar nenhuma enquete, seleciona os dados do BD e exibi em ordem decrescente a última enquete publicada
} else {
$resultado = mysql_query ("SELECT enqueteid, titulo, starts, expira, voto, votando, resultados, grafico, resultadosvotos, ip, cookies FROM enquetes WHERE status='on' ORDER BY enqueteid DESC LIMIT 1");
}
//é feita a definição que a variável totalenquetes (é igual) a conexão com banco de dados para exibir $resultado
$totalenquetes = mysql_num_rows ($resultado);
//se $totalenquetes for maior que 0
if ($totalenquetes > 0) {
//exibi a variável enquete, que irá selecionar os dados do banco de dados ($resultado)
$enquetes = mysql_fetch_array ($resultado);
//a variável whatenquete é definida igual a $enquetes['enqueteid']
$whatenquete = $enquetes['enqueteid'];
//a variável titulo é definida igual a $enquetes['titulo']
$titulo = $enquetes['titulo'];
// Calcula a data em que a enquete expira
//utiliza a lista para exibir dias, meses e anos e o comando explode para "quebrar" estas variáveis e exibir data formatada: dia/mes/ano
list ($dayx, $monthx, $yearx) = explode ("/", $enquetes['expira']);
$now = mktime (0, 0, 0, date ("m"), date ("d"), date ("Y"));
$expire = mktime (0, 0, 0, $monthx, $dayx, $yearx);
//se o valor definido em $expire for menor ou igual ao valor definido em $now (hoje) então significa que já está expirado.
//exemplo: expira em 08/08/2006 e hoje é 05/10/2006, então a enquete está expirada, ou seja não está mais disponível pra votar, apenas pra visualizar resultados, isso é óbvio. =)
if ($expire <= $now) {
$expirado = "yes";
//caso contrário, ainda não expirou
} else {
$expirado = "no";
}
// Se não estiver expirado, então calcula o início da enquete
/*1*/ if ($expirado == "no") {
//utiliza a lista para exibir dias, meses e anos e o comando explode para "quebrar" estas variáveis e exibir data formatada: dia/mes/ano
list ($days, $months, $years) = explode ("/", $enquetes['starts']);
$starts = mktime (0, 0, 0, $months, $days, $years);
//se a data de início da enquete for maior que o dia de hoje então a enqueta ainda não foi iniciada - exemplo: inicia em 05/10/2006 e hoje é 08/08/2006, então irá aguardar a data de início para ser publicada
if ($starts > $now) {
$iniciado = "no";
//caso contrário, ou seja, se a data de início for menor ou igual a data de hoje, então exibirá a enquete
} else {
$iniciado = "yes";
}
//caso contrário (que retorna o 1º if) a enquete não foi iniciada
} else {
$iniciado = "no";
}
// Checa se o IP está bloqueado
//a variável blockcheck seleciona os dados da tabela bloqueado do banco de dados
$blockcheck = mysql_num_rows (mysql_query ("SELECT bloqueadoid FROM bloqueado WHERE (enquetes LIKE '%$enquetes[titulo]%' OR enquetes LIKE '%all%') AND ip='$_SERVER[REMOTE_ADDR]'"));
//se $blockcheck == 0 então não está bloqueado
if ($blockcheck == 0) {
$bloqueado = "no";
//caso contrário, está bloqueado
} else {
$bloqueado = "yes";
}
// Checa se o usuário já votou em uma enquete específica de acordo com seu IP
//se a verificação por IP estiver ativada, seleciona no banco de dados os dados necessários para verificação
if ($enquetes['ip'] == "yes") {
$check = mysql_query ("SELECT ipid, voto FROM ip WHERE titulo='$enquetes[titulo]' AND ip='$_SERVER[REMOTE_ADDR]'");
$checkip = mysql_num_rows ($check);
$ip = mysql_fetch_array ($check);
//se $checkip é igual a zero e $ip['voto'] é menor que a função: time () então $votoip = "yes"
if ($checkip == 0 | $ip['voto'] < time ()) {
$votoip = "yes";
//caso contrário, $votoip = "no"
} else {
$votoip = "no";
}
//se $ip['voto'] for menor ou igual a função: time ()
if ($ip['voto'] <= time ()) {
//então deleta o ip do usuário que estava gravado no banco de dados para uma determinada enquete
//pois a função time é justamente para o tempo que o usuário pode votar novamente na enquete
mysql_query ("DELETE FROM ip WHERE titulo='$enquetes[titulo]' AND ip='$_SERVER[REMOTE_ADDR]'");
}
} else {
$votoip = "none";
}
// Checa se o usuário já votou de acordo com os Cookies
//se a verificação por cookies está ativada
if ($enquetes['cookies'] == "yes") {
//comando para o cookie - $_COOKIE[$whatenquete] - para uma determinada enquete
if (isset ($_COOKIE[$whatenquete])) {
//se o cookie de acordo com a enquete for igual ao título então $votocookies = "no";
if ($_COOKIE[$whatenquete] == $titulo) {
$votocookies = "no";
//caso contrário $votocookies = "yes";
} else {
$votocookies = "yes";
}
} else {
$votocookies = "yes";
}
} else {
$votocookies = "none";
}
//Gravar o ip do usuário do banco de dados
if (isset ($_POST['stage'])) {
//seleciona os dados necessários das tabelas correspondentes
$enquetes = mysql_fetch_array (mysql_query ("SELECT titulo, voto, ip, cookies FROM enquetes WHERE status='on' AND enqueteid='$_POST[enquete]'"));
$opcoes = mysql_fetch_array (mysql_query ("SELECT opcaoid, opcoes, votos FROM opcoes WHERE enqueteid='$_POST[enquete]' AND opcaoid='$_POST[opcao]'"));
$titulo = $enquetes['titulo'];
//Faz com que o próximo voto do usuário, seja após o tempo definido
$nextvoto = $enquetes['voto'] + time ();
$votos = $opcoes['votos'] + 1;
if ($enquetes['ip'] == "yes" && $votoip != 'no') {
$ip = mysql_fetch_array (mysql_query ("SELECT ipid FROM ip ORDER BY ipid DESC"));
$ipid = $ip['ipid'] + 1;
mysql_query ("INSERT INTO ip (ipid, titulo, ip, voto) VALUES ('$ipid', '$enquetes[titulo]', '$_SERVER[REMOTE_ADDR]', '$nextvoto')");
}
//Se a verificação por cookies está ativada e $votocookies é diferente de não então grava o cookie de acordo com a enquete para definir o próximo voto após o tempo determinado
if ($enquetes['cookies'] == "yes" && $votocookies != 'no') {
setcookie ($whatenquete, $titulo, $nextvoto);
}
//Se todas as verificações forem compatíveis, atualizar os resultados
if ($votocookies != 'no' && $votoip != 'no' && $bloqueado != 'yes' && $iniciado == 'yes' && $expirado == 'no') {
mysql_query ("UPDATE opcoes SET votos='$votos' WHERE opcaoid='$opcoes[opcaoid]'");
}
}
}
?>
Esta é a página onde incluiremos os dois arquivos (enquetes.php e top.php)
[index.php]
<?php
include ("top.php"); //inclui a página top.php para verificações do sistema
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Enquete yourSpot</title>
<link href="css/css_2.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
include ("enquetes.php"); //inclui a página enquetes.php para a exibição das enquetes
?>
</body>
</html>

Parece bem completo,vc estarodando esta enquete em algum site que possa ver ela
24/07/2010 9:44am
(~15 anos atrás)
O que é este link: http://yourspot.com.br/systens/enquetev1/index1.php.
Ele não funciona
Ele não funciona
24/07/2010 9:36am
(~15 anos atrás)