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.
Pergunta
Carlohcs
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.
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
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.