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

Formulário (html) e gráfico (jpgraph) na mesma página


mrf20

Pergunta

Oi gente :blush:

Agora realmente estou com um desafio a ser enfrentado.

Tenho um sistema com uma interface onde tenho um formulário html e logo abaixo um gráfico (jpgraph) em uma página php. A primeira vez que a página é aberta o gráfico é gerado capturando os dados de um banco de dados Mysql [o primeiro dado gravado e seus atributos].

Eu posso digitar dados no formulário que enviará fará alguns testes (tipo se já existe registro-atualiza, se não grava) e gravará dados no bd. Esses dados terão que atualizar o gráfico.

O problema é:

Eu consigo entrar com dados no form, gravar no bd mas quando a página retorna com os dados do form [após apertar o botão enviar], o gráfico ainda não está atualizado afinal acabei de dar um update no bd. Daí tenho que dar refresh na página quando então o gráfico me aparece atualizado, porém dando o refresh na página é gravado novamente o registro no bd já que os valores ficam armazenados no formulário.

A questão é: como atualizar o gráfico sem re-enviar os dados ao bd pelo form.

É complicado? Eu acho.. talvez me falta alguns conceitos...

Se tiver alguém com uma possível resposta, estou no aguardo ansiosa...

Thanks :huh:

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Especifique no cabeçalho da página que não é para fazer cache, exemplo do manual:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past

Isso teoricamente deve funcionar.

Link para o comentário
Compartilhar em outros sites

  • 0

olha só

coloquei o header na página dessa maneira:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>grafico_line_30d4</title>
<style type="text/css">
</style>
</head>
<body>

<?php
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, cachehack=".time());
header("Cache-Control: no-store, must-revalidate");
header("Cache-Control: post-check=-1, pre-check=-1", false);

include ("jpgraph.php");
include ("jpgraph_line.php");
.....

Mas mesmo assim não atualiza como quero.

Vou dizer o que exatamente acontece na página. Fiz vários echos pra administrar as variáveis e entendo assim, por exemplo:

tenho uma variável que lê um certo dado do bd ($recebimento=x), o código pega esse valor e soma a outro valor que o usuário acabou de preencher no form que será o valor atualizado no bd. Significa que este valor é o que será gravado mas quando dou enviar ele gravará e ainda não é processado para retornar e atualizar o gráfico. Dai na proxima vez que eu der refresh é que atualiza com este dado, o problema é que ao dar refresh, já grava o valor anterior mais o valor que ficou armazenado nas variáveis.

Será que dá pra entender?

Link para o comentário
Compartilhar em outros sites

  • 0
Significa que este valor é o que será gravado mas quando dou enviar ele gravará e ainda não é processado para retornar e atualizar o gráfico.

Se ele está fazendo dessa maneira é porque você está determinando... duas alternativas:

1 - Verifique se a query que busca os dados não está antes da que atualiza

2 - Pegue o dado recém enviado e o dado que está no BD e useos para atualizar, isso você pode fazer com isset, tipo

if(isset($_POST['campo que atualiza'])){
$alguma_coisa = $_POST['campo que atualiza']+$o que tá no bd;
}else{
$alguma_coisa = $o que tá no bd;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olha só

Meu código está um lixo porque estou tentando de tudo, mas talvez você consiga ver através dele o que eu tenho feito.

Antes disso é só a conexão.

....

$sql=("SELECT numrecurso, REPLACE(nomerecurso,' ','_') as nomerecurso, unidrecurso FROM tab_recursos") or die(mysql_errno());

$res2=mysql_query($sql, $db) or die(mysql_error());

$sql1=SELECT nomeprojeto,numrecurso,nomerecurso,unidrecurso FROM tab_recursos" or die(mysql_errno());

$res3=mysql_query($sql1, $db);

$nome = mysql_result($res3,0,'nomeprojeto');

$material = mysql_result($res3,0,'numrecurso');

$recurso = mysql_result($res3,0,'nomerecurso');

$unidade = mysql_result($res3,0,'unidrecurso');

$estoque_m = 0;

$data_recebimento = 0;

$sql2="SELECT numrecurso, DATE_FORMAT(FROM_UNIXTIME(dia),'%d-%m-%Y')as dia, consumo, recebimento FROM tab_estoque WHERE numrecurso='".$material."' ORDER BY DATE_FORMAT(FROM_UNIXTIME(dia),'%Y%m%d')";

$res4 = mysql_query($sql2, $db) or die(mysql_error());

$res5 = mysql_query($sql2, $db);

$data_v = mysql_result($res4,0,'dia');

$D=strtotime($data_v);

$DATA=$D;

$q_receber = mysql_result($res4,0,'recebimento');

# Capturando as variaveis

if(isset($_POST['num_material])){

//if(isset($_POST['material'])){

$num_material = $_POST['num_material'];

$numero=explode(":",$num_material);

$material=$numero[0];

$recurso=$numero[1];

$unidade=$numero[2];

$estoque_m = $_POST['estoque_m'];

$data_v = $_POST['data_v'];

$D = strtotime($data_v);

$DATA=$D;

$q_receber = $_POST['q_receber'];

$data_recebimento = ($_POST['data_recebimento']);

$data_r = strtotime($data_recebimento);

$sql_isset=SELECT numrecurso, DATE_FORMAT(FROM_UNIXTIME(dia),'%d-%m-%Y')as dia, consumo, recebimento FROM tab_estoque WHERE numrecurso='".$material."' ORDER BY DATE_FORMAT(FROM_UNIXTIME(dia),'%Y%m%d')";

$res_isset = mysql_query($sql_isset, $db);

$campo0=mysql_fetch_array($res_isset);

$dias=$campo0['dia];

//busca os dados na tab_estoque do bd

$sql3="SELECT nomeprojeto,numrecurso,dia,recebimento FROM tab_estoque WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." AND dia=".$data_r." ";

$res6=mysql_query($sql3, $db) or die(mysql_error());

if(mysql_num_rows($res6)!=0) { // já existe registro para aquele material e dia...

$sqla=mysql_fetch_array($res6);

$recebimento = $sqla['recebimento'];

$recebido = $recebimento+$q_receber; // adiciona a quantidade comprada ao que já existe

// atualiza o registro já existente

$sqlb=mysql_query("UPDATE tab_estoque SET recebimento=.$recebido." WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." AND dia=".$data_r." AND recebimento=".$recebimento." ") or die(mysql_error());

if($sqlb){

$aviso1 = "Este recurso já tem dado de recebimento gravado nesta data e não FOI GRAVADO, SÓ ATUALIZADO";

echo $aviso1."<br>";

}

}else{

// caso não exista, grava novo registro

$sqlc="INSERT INTO tab_estoque(nomeprojeto,numrecurso,dia,consumo,recebimento) VALUES('$nome','$material','$data_r',0,'$q_receber')";

$res2=mysql_query($sqlc, $db) or die (mysql_errno());

if($sqlc){

$aviso2 = "O campo foi inserido com sucesso";

//echo $aviso2."<br>";

}

}

//busca os dados na tab_estoque do bd já atualizados

$sql4="SELECT nomeprojeto,numrecurso,dia,recebimento FROM tab_estoque WHERE nomeprojeto='".$nome."' AND numrecurso=".$material." AND recebimento=".$recebido." ";

$res7=mysql_query($sql4, $db) or die(mysql_errno());

$valor=mysql_fetch_array($res7);

$receive=$valor['recebimento];

}

?>

<table border="1" align="center" cellpadding="5" cellspacing="3">

<tr>

<td>Recurso:</td>

<td>Data inicial para visualização:&nbsp;</td>

<td>Estoque inicial:&nbsp;</td>

<td>Data de recebimento:</td>

<td>Quantidade a receber:</td>

</tr>

<tr>

<form method="POST" name="myform" action="grafico_line_30d4.php">

<td><SELECT size="1" name="num_material">

<?php

while($num=mysql_fetch_array($res2)){

$num0=$num['numrecurso'];

$num1=$num['nomerecurso'];

$num2=$num['unidrecurso'];

$num_material = "";

$selected = "";

if(isset($_POST['num_material'])){

$num_material = $_POST['num_material'];

if($num_material == $num0.":".$num1.":"."(".$num2.")"){

$selected = "selected";

}

}

?>

<OPTION <?php echo $selected ?> value='<?php echo $num0.":";echo $num1.":";echo "(".$num2.")";?>'>

<?php echo $num0.":";

echo $num1.":";

echo $num2;

?>

</OPTION>

<?php } ?>

</SELECT></td>

<td><input name="data_v" value="<?php echo $data_v;?>" type="text" size="10"></td>

<td><input name="estoque_m" value="<?php echo $estoque_m;?>" type="text" size="10"></td>

<td><input name="data_recebimento" value="<?php echo $data_recebimento;?>" type="text" size="20"></td>

<td><input name="q_receber" value="<?php echo $q_receber;?>" type="text" size="10"></td>

</tr>

<tr>

<td colspan="6"><center><INPUT TYPE="submit" value="Enviar">&nbsp;&nbsp;&nbsp;<INPUT TYPE="reset" value="Redefinir"></center></td>

</tr>

</form>

</tr>

</table>

...

[code]

Depois disso vem restante do código para gerar o gráfico.

Link para o comentário
Compartilhar em outros sites

  • 0

ESerra

Tentei seguir algumas de suas sugestões mas ainda não tive sucesso. Como não consigui resolver esse impasse mudei algumas coisas por aqui, considerando sugestões de pessoas que entendem bem mais do que eu como você.

dividi o arquivo que tem o form e o gráfico em dois, onde um gera o gráfico e outro só faz o processamento de gravação no bd, retornando os dados para a página inicial através de GET. Ainda não resolvi meu problema, ou seja, quando a página inicial volta para o browser (lógico que é imperceptível) o gráfico ainda permanece com os dados anteriores, mesmo que as variáveis que aparecem na página já estejam com valores atuais do bd.

você me sugeriu duas coisas:

1 - Verifique se a query que busca os dados não está antes da que atualiza

2 - Pegue o dado recém enviado e o dado que está no BD e use-os para atualizar, isso você pode fazer com isset

Juro que a primeira no meu caso não se aplica, porque eu faço as query depois faço uso isset pra fazer cálculos com os valores pegos no bd, os quais aparecem atualizados quando dou echo. Significa, a meu ver, que o gráfico já deveria usar esses valores e não esperar que eu faça um refresh na página.

A segunda, no meu código eu tenho sempre as duas opções, dados pra um gráfico inicial (default) e dados com isset e as variáveis enviadas via GET.

Portanto continua o desafio, não consigo compreender a causa.

Estou usando a classe jpgraph para criar o gráfico, a menos que tenha algo a ver com ela pra atualizar o grafico automaticamente.

Se você ou alguém tiver uma vaga idéia, por favor.... help-me

thanks

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
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...