Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problemas com $_SESSION


Carlohcs

Pergunta

Olá pessoal, estou há mt tempo num script que ainda não entendo o porquê de não funcionar. Estou montando uma enquete que está feita numa classe. Puxo todos os dados para a página apenas com o "include".

O problema está na $_SESSION. Não estou conseguindo definir a $_SESSION com a hora de entrada do usuário para depois verificar o tempo da sessão e permitir que o usuário volte a votar. Segue o código.

<?php
class Enquete{
    public $opcao, $arquivoArr, $tpOp, $ipUser, $checa,$entrada;
    function defineDados($opcao = array("Google", "Amigos", "Publicações", "Outros"),
    $arquivoArr = array(
    0=>"class/enquete/google.txt",
    1=>"class/enquete/amigos.txt",
    2=>"class/enquete/publicacoes.txt",
    3=>"class/enquete/outros.txt",
    4=>"<p id='ask_poll'>Como você conheceu o JOI&D?</p>",
    5=>"class/enquete/ipUser.txt")){
        
        //Define a zona de horário para São Paulo
        date_default_timezone_set('America/Sao_Paulo');        
        $this->opcao = $opcao;
        $this->arquivoArr = $arquivoArr;
        $ipUser = $_SERVER["REMOTE_ADDR"];
        $this->ipUser = $ipUser;
        $this->tpOp = isset($_POST['tpOp']) ? $_POST['tpOp'] : FALSE;
    }
    function abreAr($arquivoInd){        
        $arquivoArr = array(
    0=>"class/enquete/google.txt",
    1=>"class/enquete/amigos.txt",
    2=>"class/enquete/publicacoes.txt",
    3=>"class/enquete/outros.txt",
    4=>"<p id='ask_poll'>Como você conheceu o JOI&D?</p>",
    5=>"class/enquete/ipUser.txt");
        
        $inserir = file($arquivoArr[$arquivoInd]);
        $abreAr = fopen($arquivoArr[$arquivoInd], "w");
        $insere = fwrite($abreAr, $inserir[0]+1); 
        if($insere){$msg = "Voto enviado.";}else{$msg = "Voto não enviado.";}
        echo "<p>".$msg."</p>";
        echo "<p><a href='$_SERVER[PHP_SELF]'>Voltar</a></p>";
    }
    function vota(){    
        $arquivo = file($this->arquivoArr[5]);
        if($this->tpOp != ""){        
            if($arquivo[0] != $this->ipUser){    
                $_SESSION['acesso'] = time(); //Aqui defino a hora de acesso para depois permitir o voto
                $_SESSION['entrada'] = date('H:i:s'); //Aqui é para exibição de quando o usuário entrou
                $abreAr = fopen($this->arquivoArr[5], "w");
                $insere = fwrite($abreAr, $this->ipUser);
                $checa = TRUE;
            }else{
                $checa = FALSE;
                if(isset($_SESSION['entrada']) && isset($_SESSION['acesso'])){ //Não reconhece
                    if((time() - $_SESSION['acesso']) > 60 * 2) { 
                        $_SESSION['acesso'] = time();
                        $_SESSION['entrada'] = date('H:i:s');
                        $abreAr = fopen($this->arquivoArr[5], "w");
                        $insere = fwrite($abreAr, "0.0.0.0");
                        $checa = TRUE;
                    }
                }
            }    
            if($checa == TRUE){
                switch($this->tpOp){
                    case '0':
                        $enq = new Enquete; $enq->abreAr('0');
                    break;
                    case '1':
                        $enq = new Enquete; $enq->abreAr('1');
                    break;
                    case '2':
                        $enq = new Enquete; $enq->abreAr('2');
                    break;                            
                    case '3':
                        $enq = new Enquete; $enq->abreAr('3');
                    break;
                }
            }else{
                echo "Você já votou. Hora do voto: ".$_SESSION['entrada']; //Não reconhece
                echo "<br />Você poderá votar novamente em 2 minutos!";
                echo "<br /><a style:'margin-left:5px;' href='$_SERVER[PHP_SELF]'>Voltar</a>";
            }
        }else{    
            echo "Selecione uma opção.<br /><a style='margin-left:10px;' href='$_SERVER[PHP_SELF]'>Tentar novamente</a>";
            exit;
        }
    }
    function resultados(){
        //Pega os valores dos arquivos
        $valor1 = file($this->arquivoArr[0]); $valor2 = file($this->arquivoArr[1]); 
        $valor3 = file($this->arquivoArr[2]); $valor4 = file($this->arquivoArr[3]); 
        //Define o total de votos
        $total = $valor1[0] + $valor2[0] + $valor3[0] + $valor4[0];
        //Define porcentagem de cada opção
        $pcGoo = number_format($valor1[0] / $total * 100);
        $pcAmig = number_format($valor2[0] / $total * 100);
        $pcPubli = number_format($valor3[0] / $total * 100);
        $pcOut = number_format($valor4[0] / $total * 100);
        //Exibe os resultados
        echo "<p>TOTAL DE VOTOS: ".$total."</p>";
        echo "<p>Google: ".$pcGoo."%</p>";
        echo "<p>Amigos: ".$pcAmig."%</p>";
        echo "<p>Publicações: ".$pcPubli."%</p>";
        echo "<p>Outros: ".$pcOut."%</p>";
        echo "<p><a href='$_SERVER[PHP_SELF]'>Voltar</a></p>";
    }

    function get(){
        $voto = isset($_POST['frmVoto']) ? $_POST['frmVoto'] : FALSE;
        $resul = isset($_POST['frmResult']) ? $_POST['frmResult'] : FALSE;
        if($voto){$enq = new Enquete; $enq->defineDados(); $enq->vota();}
        if($resul){$enq = new Enquete; $enq->defineDados(); $enq->resultados();}
        if(!$resul && !$voto){$enq = new Enquete; $enq->defineDados(); $enq->exibeForm();}
    }    

    function exibeForm(){
    echo "<p id='t_poll'>Enquete</p>";
        echo "<p>".$this->arquivoArr[4]."</p>";
        echo "<form action=".$_SERVER['PHP_SELF']." method='POST' name='frmEn'>\n<ul>";
        while(list($key, $value) = each($this->opcao)){
            echo "<input type='radio' name='tpOp' value='$key' class='styled' /><li>".$value."</li>";
        }
         echo "<div id='align_poll'><input id='votar' type='submit' name='frmVoto' value='Votar'/>";
         echo "<input type='submit' id='result' name='frmResult' value='Resultado' /></div></ul>";
         
        echo "</form>";
    }
}
$enq = new Enquete;
$enq->get();
?>

Apenas resumindo: se o ip do usuário não estiver no servidor, permito que ele vote e defino o tempo de sessão. Se o tempo dele for maior que o limite, permito outro voto.

Se alguém souber...por favor..ajudas são bem vindas. Grato.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Pode parecer meio boba a pergunta, mas está usando o session_start()?

Tentou printar essas sessões na tela para ver o que está retornando?

Sim...já tinha usado Session Start...mas n deu em nada. O padrão é sempre usar...eu usei e n deu diferença. Quando fiz essa função sem classe, rodou perfeitamente...tentei printar sim...mas nada de aparecer. Ele não reconhece a sessão. Se eu tiro da classe, ela funciona.

Link para o comentário
Compartilhar em outros sites

  • 0
Ok, tente tirar o session_start da página aonde chama a classe, e coloque o mesmo na própria classe.

Fiz o contrário. Embora eu quisesse que o controle da session ficasse no próprio script php, coloquei no index mesmo. Ai só precisei chamar o Session_start. Queria manter o código apenas de controle da classe...mas já que não deu dentro da classe, vai fora mesmo. Resumindo, ficou assim:

<?php session_start(); ?>
<html>
....
<?php include('class/enquete/enq.class.php'); ?>

Grato a todos, vlw FIT. Moderador, pode fechar o tópico.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...