Ir para conteúdo

POWERED BY:

Arquivado

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

Renan Costa_174249

[Resolvido] COMO atualizar uma DIV que contem dados da DB?

Recommended Posts

Boa Noite pessoal.

seguinte...

 

 

tenho uma pagina que exibe os pontos do usuario de acordo com o que esta na tabela do banco de dados, eu uso esse codigo:

<div id="pontos">Esta acumulado <?=$usuario->pontos ?> Pontos na sua conta</div>

 

porem ha cada 3 segundos esses pontos sofrem alteração no banco de dados, ou seja, ele pode ganhar ou perder pontos.

o que eu quero saber é como fazer para essa DIV atualizar automaticamente a cada 3 segundos?

 

 

***No momento eu uso uma iframe com refresh mas não esta ficando 'legal' dessa forma. Alguem sabe como fazer isso com javascript ou AJAX ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<div id="pontos">Esta acumulado <?=$usuario->pontos ?> Pontos na sua conta</div>

 

Faça da seguinte maneira:

<div id="pontos">Esta acumulado <span><?=$usuario->pontos ?></span> Pontos na sua conta</div>

 

Coloquei os pontos dentro de um span pois é ele que vamos atualizar quando fizermos as requisições no banco através do ajax. Aprenda mais sobre ajax aqui oh -> http://api.jquery.com/jQuery.ajax/

 

Dps que pegar o jeito do ajax() é só montar uma função com ele dentro, e utilizando setInterval() chamar essa função. Ex.:

 

$.fn.pontuacao = function() {
$.ajax({
	url: "pontuacao.php",
	dataType: "html",
	success:function(html) {
		$("#pontos").find("span").html(html);
	}
});
}

setInterval("$(this).pontuacao()",3000);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro. O valor do url é a página que será consultada na requisição do ajax. Ou seja, nessa página (pontuacao.php) você fará a consulta no seu banco de dados e colocará um echo $pontos;, por exemplo. Esse valor escrito na página será o valor de 'html', passado no success:function(html).

 

Deu pra entender? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara ainda nao esta dando certo... :(

 

eu coloquei dessa forma:

 

 

Pontuação.php

<script type="text/javascript" language="JavaScript">

//Atualizar SPAN
$.fn.pontuacao = function() {
       $.ajax({
               url: "functions.php",
               dataType: "html",
               success:function(html) {
                       $("#pontos").find("span").html(html);
               }
       });
}

setInterval("$(this).pontuacao()",3000);

//Atualizar SPAN
</script>

 

 

functions.php

<?php

function check_user($secret_key, &$db)
{

		$query = $db->execute("select * from `usuarios` where `id`=?", array($_SESSION['userid']));
		$userarray = $query->fetchrow();
		if ($query->recordcount() == 0)
		{
			session_unset();
			session_destroy();
			header("Location: index.php");
			exit;
		}
		foreach($userarray as $key=>$value)
		{
			$user->$key = $value;
		}
		return $user;
	}


?>

 

dessa forma na pagina pontuação fica aparecendo:

 

"Você tem acumulado 1200 pontos"

 

mas se eu alterar os pontos na DB para 700, a pagina da pontuação ainda não altera, continua mostrando apenas 1200 pontos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acrescenta no final do seu arquivo PHP antes do fechamento ?>

 

echo check_user();

 

Cara ... esse exemplo que te dei foi usando jQuery. Você importou a biblioteca?

 

No seu javascript, coloque assim:

 

<script type="text/javascript" language="JavaScript">
$(function() {
	//Atualizar SPAN
	$.fn.pontuacao = function() {
	        $.ajax({
	                url: "functions.php",
	                dataType: "html",
	                success:function(html) {
	                        $("#pontos").find("span").html(html);
	                }
	        });
	}

	setInterval("$(this).pontuacao()",3000);

	//Atualizar SPAN
});
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pontuação.php ou functions.php ?

 

Na functions.php. Lá você não chamou a função, por isso nada vai ser retornado naquela página. O ajax vai retornar pra você na variavel 'html' o que foi 'escrito' na página onde você fez a requisição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renan, vamos por parte. Primeiro, dentro de seu <head>, adicione isso

 

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>

 

Essa é a biblioteca jQuery. Estude isso cara. http://docs.jquery.com/

 

Agora vamos fazer um teste. Não vamos mexer na página pontuação.php. Vamos mexer apenas na functions.php.

 

Nela, vamos comentar seu código e vamos fazer um teste. Sua página functions.php ficará dessa maneira:

 

<?php
echo "Teste!";exit;

/*
function check_user($secret_key, &$db) {

                       $query = $db->execute("select * from `usuarios` where `id`=?", array($_SESSION['userid']));
                       $userarray = $query->fetchrow();
                       if ($query->recordcount() == 0)
                       {
                               session_unset();
                               session_destroy();
                               header("Location: index.php");
                               exit;
                       }
                       foreach($userarray as $key=>$value)
                       {
                               $user->$key = $value;
                       }
                       return $user;
               }

echo check_user();
*/
?>

 

Isso é só pra gente testar se está retornando corretamente o valor, entendeu? Depois de 3 segundos que você der reload na página, o resultado terá que ser este:

 

Você tem acumulado Teste! pontos

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK.. até ai deu certin, na pagina pontuação fica assim:

 

"Esta acumulado Pontos na sua conta" e após 3 segundos fica assim: "Esta acumulado Teste! Pontos na sua conta"

 

Então até aí está correto. Agora o que você tem que fazer é o seguinte. Descomente sua função e tire a linha que coloquei. Deve estar acontecendo este erro quando adicionei o echo check_user(); por causa dos parametros.

 

Na sua função você passa dois parâmetros. Você tem que passar eles quando chama essa função. Entendeu?

 

Por exemplo, caso o valor que variavel $secret_key vai receber não esteja página functions.php, você terá que passar essa variavel através do ajax. Aí vamos usar 'data'.

 

Exemplo:

 

pontuacao.php

<script type="text/javascript" language="JavaScript">
       $(function() {
               //Atualizar SPAN
               $.fn.pontuacao = function() {
                       $.ajax({
                               url: "functions.php",
                               data: "secret_key=<?=$secret_key?>",
                               dataType: "html",
                               type: "POST",
                               success:function(html) {
                                       $("#pontos").find("span").html(html);
                               }
                       });
               }

               setInterval("$(this).pontuacao()",3000);

               //Atualizar SPAN
       });
</script>

 

E seu functions.php desta maneira:

 

<?php
$secret_key = $_POST["secret_key"];

function check_user($secret_key, &$db) {

$query = $db->execute("select * from `usuarios` where `id`=?", array($_SESSION['userid']));
$userarray = $query->fetchrow();
if ($query->recordcount() == 0)
{
        session_unset();
        session_destroy();
        header("Location: index.php");
        exit;
}

foreach($userarray as $key=>$value)
{
        $user->$key = $value;
}

return $user;
}

echo check_user($secret_key,'');
?>

 

Cara ... a gente poderia ter resolvido seu problema na primeira resposta. A intenção desse passo-a-passo é pra você enteder o que está fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao Júlio, estamos quase la....

agora da dando esse erro na pagina:

 

Fatal error: Only variables can be passed by reference in /home/vhosts/korpg.xp3.biz/functions.php on line 24

 

a linha 24 é essa: echo check_user($secret_key,'');

 

entao eu simplismente exclui essa linha, mas agora na pagina mostra a pontuação durante 3 segundos e depois apenas o numero some.

 

o que devo fazer? j

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renan você viu que na sua função você passa dois parâmetros pra ela? Então, quando você chama essa função você tem que informar esses parâmetros. Se você colocar um echo "Teste";exit; na primeira linha da sua função, irá funcionar normalmente, agora não está funcionando porque o segundo não está passando.

 

Nessa página functions.php você está usando $_SESSION. Você colocou session_start()? Está fazendo uso de um objeto, mas você inicou ele? Fique atento a essas coisas.

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.