+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 (~14 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 (~14 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.)