Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

RicardoSRL

Javascript que execute php sem recarregar a pagina

Mensagens Recomendadas

RicardoSRL    0
RicardoSRL

Boas pessoal.

Eu tenho aqui uma dúvida de como fazer uma coisa. Tenho aqui este 2 códigos, um em javascript e outro em php.

JAVASCRIPT:

<script>
var i = 10; // segundos
function contagemRegressiva(){
if(i == 0){
        document.getElementById('cronometro').innerHTML = 'O tempo acabou!!';
}else{
        i--;
        document.getElementById('cronometro').innerHTML = i + ' segundos';
}
}
setInterval("contagemRegressiva()", 1000);
</script>
<body>
<div id="cronometro">10 segundos</div>
</body>

PHP:

<?

$id = $_GET['id'];

$sql = mysql_query("SELECT * FROM tabela WHERE id='$id'");
        while($rst=mysql_fetch_object($sql)){

		$pontos = $rst->pontos;

	}

if($pontos == 0){

$mensagem = 'Não tem pontos de constução soficientes!';

}else {

	$query = mysql_query("UPDATE tabela SET pontosdois = pontosdois + 1 WHERE id='$id' ");

	$mensagem = 'A sua conta foi creditada com 1 ponto de experiencia!';

	}

?>

E basicamente o que eu queria fazer era com que o código javascript fizesse a contagem decrescente e quando chegasse a zero em vez de dizer “O tempo acabou!” eu queria que ele executa-se o código php e que mostrasse a variável “$mensagem” consoante o resultado que o código php tivesse.

Ou seja, quando carrega-se esta pagina que ia ter um link do género http://qualquercoias.com/maisexperiencia.php?id=143 iniciaria uma contagem decrescente e quando chegasse a zero, sem a pagina ser carregada novamente, o código php seria executado e iria a base de dados confirmar se o utilizador tinha pontos suficientes. Se tivesse iria aparecer uma mensagem a dizer que ele tinha mais um ponto de experiencia e se não tivesse iria aparecer uma mensagem a dizer que ele não tinha pontos suficientes. Isto todo sem recarregar a página. À e o código php pode ou não estar numa pagina diferente à do javascript, tanto me faz, desde que funcione como eu pretendo.

Será que alguém me pode dar uma ajudinha?    :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1123
HappyHippyHippo

para isso usa o xmlHttpRequest.

quando chegar ao tempo "0", é feito um pedido a teu script php que responde num formato json (simplesmente para facilitar o tratamento da resposta) por parte do javascript

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

Eu não percebo muito de javascript e tive a procurar sobre “xmlHttpRequest” e ou não encontrei nada ou encontrei mas não percebi como adaptar ao que eu preciso (que é o mais provável  :)). Eu sei que deve ser pedir muito, mas não dá para dizer como fica +/- o código?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

Bem, o código funcionou bem, mas eu tenho outra dúvida. Eu fiz este código para ver se funciona.

Javascript:

<script>
var i = 10; // segundos
function contagemRegressiva(){
if(i == 0){
        var xhReq = new XMLHttpRequest();
    xhReq.open("GET", "phpcont.php?um=5&dois=6", false);
        xhReq.send(null);
        var serverResponse = xhReq.responseText;
	document.getElementById('cronometro').innerHTML = serverResponse;
       
}else{
        i--;
        document.getElementById('cronometro').innerHTML = i + ' segundos';
}
}
setInterval("contagemRegressiva()", 1000);
</script>
<body>
<div id="cronometro">10 segundos</div>
</body>

E este em PHP:

<?
$um = $_GET['um'];
$dois = $_GET['dois'];
$tres = $um + $dois;
if($tres < 10){ $mensagem = 'Menor que 10'; } else { $mensagem = 'Maior que 10';}
echo $mensagem;
?>

E o código funciona muito bem porque ele faz a contagem e depois executa bem a página em php. O meu problema agora é que eu não queria que a página php fosse visível através do código javascript como é. Ou seja eu não queria que as pessoas tivessem o link dela para só ser executada quando o código javascript o fizesse. Não dá para ocultar de certa forma o link da pagina php ou fazer com que ela só execute quando fosse pelo código javascript?

Porque eu queria que aquele ficheiro php ficasse de certa forma protegido, fora do alcance dos utilizadores do site. Alguém sabe de alguma maneira de fazer isto?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

Porque eu queria que aquele ficheiro php ficasse de certa forma protegido, fora do alcance dos utilizadores do site. Alguém sabe de alguma maneira de fazer isto?

Podes tentar esconder para ser difícil de encontrar. Fora isso não vejo outra maneira.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda

Mas o problema é que o link se encontra sempre no codigo javascript ou seja não dá para esconder.

Não dá para esconderes o link, é melhor desistir da ideia. No máximo controlas o acesso à página verificando se o acesso é feito por ajax ou não.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

sim, mas então tem que haver outras maneiras de ao fim de 10 segundos o codigo javascript executar aquele codigo php. Talvez se os codigos em vez de estarem em paginas diferentes estivessem em paginas iguais. mas nao sei como isso se faz. voces sabem?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

Mas o que eu quero fazer com isto é uma coisa parecida aos sites PTC que quando estamos a ver um site tem uma contagem decrescente e depois quando acaba o código javascript faz uma actualização na base de dados. Eu não quero fazer um site PTC é outra coisa mas tem isso da contagem decrescente e depois quando essa contagem chega a zero quero que ele actualize uns parâmetros na base de dados. E isso tem que dar para fazer sem o utilizador ter acesso ao código porque se não estava sempre a fazer refresh á pagina php e a fazer as actualizações na base de dados sem esperar esse tempo que eu preciso que espere. Isso tem que dar para fazer, atendendo a que muitos outros sites já fizeram. Agora, pode é não ser com este tipo de código. se calhar até é tudo javascript. mas eu quero saber o que é para poder pesquisar sobre isso. ou se alguém souber que me diga por favor.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

Esse é so um dos sites mais famosos da internet. Toda a gente conhece isso... mas ainda nao percebeu o que eu queria? é tipo uma pagina que tem uma contagem decrescente. e quando chega a zero faz um update numa base de dados sql. do genero, tens uma base de dados com uma tabela assim:

[table]

[td]ID[/td]

[td]NOME[/td]

[td]VISITAS[/td]

[td]1[/td]

[td]João[/td]

[td]5[/td]

[/table]

e depois tem uma contagem decrescente em javascript que quando chega a zero vai, por exemplo, a base de dados e ao id=1 aumentar uma visita. Ou seja depois da contagem decrescente a tabela da base de dados sql ia ficar assim:

[table]

[td]ID[/td]

[td]NOME[/td]

[td]VISITAS[/td]

[td]1[/td]

[td]João[/td]

[td]6[/td]

[/table]

Percebeu, mas isto so podia ser feito se a contagem chegasse a zero, e se os utilizadores tivessem acesso ao codigo php podiam estar a fazer refresh a pagina infinitas vezes e aquilo ia estar sempre a mudar na base de dados.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda

Esse é so um dos sites mais famosos da internet. Toda a gente conhece isso...

Não, não é.

Um site desses não faz nada demais. Basta que o php registe a abertura de um link pelo utilizador e o javascript comece a contar até chegar a zero e dizer ao php que o link já foi visto e que pode fechar o processo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RicardoSRL    0
RicardoSRL

Não, não é.

Um site desses não faz nada demais. Basta que o php registe a abertura de um link pelo utilizador e o javascript comece a contar até chegar a zero e dizer ao php que o link já foi visto e que pode fechar o processo.

e como é que eu faço isso? é que eu de PHP percebo, mas javascript é uma cena que ainda não me "assiste" muito x)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1123
HappyHippyHippo

isso faz-se facilmente com algum tipo de sessão ou gestão de sessão.

crias na base de dados um registo do tempo.

se o pedido for feito antes desse tempo, ignora ...

um pouco de imaginação não faz mal a ninguem

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

E mais. Normalmente, nessas coisas, não são as contagens decrescente no browser que coordena. Normalmente o js do browser mostra uma contagem decrescente que vai atualizando à medida que o tempo passa para se manter querente com o servidor (7 em 7 segundos, no que eu conheço. N sei se nesse é o mesmo). O que manda é o servidor e não o js do utilizador.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade