+1

Desenvolvendo um sistema de Enquete Completo (yourspot.com.br) - Parte 1

criado por Carlos Roberto em 03/10/2006 11:37am
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]
<?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>

Comentários:

Mostrando 1 - 3 de 3 comentários
nasser disse:
Parece bem completo,vc estarodando esta enquete em algum site que possa ver ela
24/07/2010 9:44am (~15 anos atrás)

nasser disse:
O que é este link: http://yourspot.com.br/systens/enquetev1/index1.php.
Ele não funciona
24/07/2010 9:36am (~15 anos atrás)

AnaLilo disse:
Nossa muito bom este sistema... vlw pelo código! =D
03/12/2009 3:42pm (~15 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)