Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kante

[Resolvido] Como evitar ou "driblar" a atualização da P

Recommended Posts

Olá phpmigos,

 

Tou fazendo um formulário de votação, onde após votar uma vez, o usuário que votou não pode votar de novo...

 

Fiz então o código abaixo, com o objetivo de controlar tal situação, ou seja, fazendo um select no banco antes de atualizar com os mesmos dados da atualização, seguido de um if para o controle pertinente...

 

 

Mas o problema é que tal if não está sendo respeitado pois ao clicar no botão atualizar do Mozzila Firefox, ele faz um uptdate novamente no banco:

 

PHP
$TotalTesteDeVoto=0

                                               

$TotalTesteDeVoto =

"select * from tbquestaluno Where JaVotou=1 and pkRespCod='".$ipkRespCod."'";   

                                               

$ResultTesteVotou = mysql_query($TotalTesteDeVoto) or die(mysql_error());

 

$TotalTesteVotou = mysql_num_rows($ResultTesteVotou);

 

if ($TotalTesteDeVoto==0) {

                                                        echo "<script language='Javascript'>

                                                        alert('Voto  já registrado. O sistema não permite dupla votação')</script>";

                                                }

if ($TotalTesteDeVoto !=0)

                                                {                                   

                                                        $SqlAtualizaVoto= "update tbvotacoes

                                                                set FlagJaVotou=1

                                                               WHERE pkRespCod='".$ipkRespCod."'";

                                                                                                                                               

                                                      mysql_query($SqlAtualizaVoto) or die(mysql_error());      

                                                      echo "<script language='Javascript'>

                                                      alert('Seu Voto Acaba de Ser Registrado. Muito Obrigado pela Tua Colaboração')</script>";

       

}

?>

 

Alguém poderia me dizer o que está acontecendo ??? Imaginei que um refresh no banco antes do referido teste talvez resolveria o problema, mas tou começando em php agora e nem imagino como fazer isso...

 

Alguém helpeia-me ?

 

Agradecido desde já,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use cookie. Basta determinar um tempo para a existência dele.

Também é possível usar sessões, mas, nesse caso, o bloqueio só ocorreria enquanto o navegador não for fechado.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

include("../global.php");

//funcoes para conexao com database

 

$id_r = $_GET['id_r']; // id da resposta

$id_p = $_GET['id_p']; // id da pergunta

$todo = $_GET['todo']; // action

 

$enq = "enq1";

$msg = "";

 

$conn_enq = mysql_connect($host,$userDB,$pwdDB);

if (!$conn_enq) {

die ("Falha de Conexão!"); }

mysql_select_db($dataBase);

 

 

if ($todo=="votar") {

// PHP adiciona um hit á resposta da enquete

// recupera os dados dos campos hidden

 

if (!$_COOKIE[$enq]) {

$remotaddr = $_SERVER["REMOTE_ADDR"];

$query=mysql_query("update enquete set hits= hits + 1 where id_enquete=$id_r",$conn_enq);

setcookie ("$enq", $remotaddr,time()+86400);

}

 

$msg = "Agradecemos sua participação!";

}

else

$msg="Você já votou nesta enquete hoje!!!";

@mysql_free_result($query);

mysql_close($conn_enq);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isso só é possível com cookie ativado né ?

 

E outra coisa, se o usuário excluir o cookie como fica ? (É q numa votação séria podem ter alguns mal intensionados que venham a excluir o cookie para poder votar de novo).

 

Existe alguma outra técnica além dos cookies ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o cara excluir o cookie, pode votar de novo, sim.

Se você fizer com sessão, basta ele fechar o navegador e abrir de novo.

 

Se fizer restrição por IP, basta reconectar (outro problema é qunato a usuários em uma mesma rede: todos usam o mesmo IP).

 

 

Cada um tem uma forma de transgressão. Mas ainda acho cookie mais eficiente. Lembre-se de que leigos, muitas vezes, nem sabem o que é um cookie, muito menos como removê-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o cara excluir o cookie, pode votar de novo, sim.

Se você fizer com sessão, basta ele fechar o navegador e abrir de novo.

 

Se fizer restrição por IP, basta reconectar (outro problema é qunato a usuários em uma mesma rede: todos usam o mesmo IP).

 

 

Cada um tem uma forma de transgressão. Mas ainda acho cookie mais eficiente. Lembre-se de que leigos, muitas vezes, nem sabem o que é um cookie, muito menos como removê-lo.

 

Pois é Beraldo, mas é bom lembrar que com a interligação global das informações propiciadas pela internet, existe cada vez menos leigos no mercado né ?

 

Além disso existem também vários supostos concorrentes que podem "testar" teu sistema de qualquer parte do planeta com o objetivo de achar "furos" e desmoralizá-lo e assim talvez ganhar teu cliente...Por isso que vou ficar insistindo na busca de novas alternativas...

 

Imagino que uma das soluções esteja na utilização correta do teste de consulta no MySQL que postei no início do tópico e que não sei porque não está funcionando...

 

Se puder me ajudar neste sentido, com certeza será de grande valia...

 

Mas, mesmo assim, continuarei pesquisando até achar e quando conseguir posto aí...Se achar, espero que poste também visto que pelo que entendi tal solução é do interesse de ambos né ?

 

Baita abraço e grato novamente pela tua contribuição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos,

 

Informo-lhes que consegui resolver o problema simplesmente utilizando as facilidades das consultas SQL, em conformidade com o que estava tentando fazer no início do tópico, mas com o erro de não testar a variável certa, ou seja, a "$TotalTesteVotou", a qual armazena o total de registros, resultando em '0' no caso do cara ainda não ter votado.

 

Aproveito para agradecer a todos os que contribuiram direta e indiretamente para chegar a esta solução. http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.