Ir para conteúdo

POWERED BY:

Arquivado

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

marciarf

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

Recommended Posts

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

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 :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Marcia,

 

Se eu entendi direito a sua proposta, você tem o Gráfico e o Formuário na mesma pagina. É isso mesmo?

 

Se for esse o caso, quando você enviar o form para a pagina que faz a comunicação com o BD no final do seu codigo você pode usar um comando de redirecionamento para voltar a sua pagina inicial. Assim você terá o grafico atualizado e o formulário em branco.

 

você pode usar o seguinte para fazer isso:

header("Location: paginainicial.php");

Espero ter ajudado, qualquer coisa posta ae de novo!

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Doug_S.S.S.

Pois é, mas a própria página faz a gravação do dado no bd. O action do form chama a mesma página.

Ex: nome do arquivo: grafico.php e no <form action="grafico.php", entendeu?

Dai os dados ficam armazenados nas caixas do form para conferencia do usuário, ou seja, ela envia os dados para o form e volta a aparecer no browser com os valores marcados nas caixas e com o gráfico abaixo que é pra ser atualizado.

Entendeu?

Para usar a sua solução eu teria que ter outra página para inserir e usando o Location apareceria o gráfico inicialmente feito (default) e nao com as datas que eu escolho [ao abrir a pagina a primeira vez, o grafico aparece feito com dados default].

Acho que é isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, a quem possa interessar ver o código a que me refiro aqui vai:

Meu código está um lixo pq 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) { // jah 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 ja tem dado de recebimento gravado nesta data e NAO 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: </td>
	<td>Estoque inicial: </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">   <INPUT TYPE="reset" value="Redefinir"></center></td>
	  </tr>
   </form>
	</tr>


</table>
...
Depois disso vem restante do código para gerar o gráfico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:rolleyes: Bom, como não consigui resolver esse impasse mudei algumas coisas por aqui, considerando sugestões de pessoas que entendem bem mais do que eu.

 

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.

Me sugeriram 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 nao se aplica, pq 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 alguém tiver uma vaga idéia, por favor.... help-me

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

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.