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
(~14 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
(~14 anos atrás)