Ir para conteúdo

POWERED BY:

Arquivado

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

anggelus

Cabeçalhor Header

Recommended Posts

Boa noite galera,

estou tendo um problema sério com o cabeçalho Header, o meu problema é que eu preciso gerar um gráfico usando o PHPlot e na meio da classe existe uma requisição ao cabeçalho Header.

Mas eu preciso que que o minha página tenha uma folha de estilo. E ai então aparece o problema do Cannot modify header information - headers already sent by então eu tentei usar o ob_start(); e o ob_end_flush();, mas continuou apresentando o mesmo problema. Se alguem souber como que resolve isso por favor me ajude. Se existe uma outra forma de incluir também a folha de estilo poderia resolver o meu problema.

O código do PHPplot está em http://www.phplot.com/ , para funcionar coloca apenas o arquivo phplot.php na mesma pasta

 

 

O meu código é

PHP

[*]<?php

[*]

[*]//Include the code

[*]include('phplot.php');

[*]

[*]//Define the object

[*]$graph =& new PHPlot(600,400);

[*]

[*]$graph->SetFileFormat("png");

[*]$graph->SetPlotType("bars");

[*]

[*]//Now do the second chart on the same image

[*]unset($example_data); //we are re-using $example_data (to save memory), but you don't have to

[*]$example_data = array(

[*]  array('Funcionário1',30),

[*]  array('Funcionário2',50), // here we have a missing data point, that's ok

[*]  array('Funcionário3',70),

[*]  array('Funcionário4',90),

[*]  array('Funcionário4',20),

[*]  array('Funcionário5',60),

[*]  array('Funcionário6',70)

[*]);

[*]

[*]

[*]$titulo="Relatório de Produção";

[*]$titulo_baixo="Nome do Funcionário";

[*]$titulo_lateral="Produção";

[*]

[*]$graph->SetDataType("text-data"); //Must be called before SetDataValues

[*]

[*]$graph->SetDataValues($example_data);

[*]

[*]$graph->SetTitle($titulo);

[*]$graph->SetXTitle($titulo_baixo);

[*]//coloca o Título na duas laterais

[*]$graph->SetYTitle($titulo_lateral, "both");

[*]

[*]$graph->SetYTickIncrement(10);

[*]$graph->SetXLabelAngle(0); //have to re-set as defined above

[*]

[*]

[*]$graph->SetYTickLength(5);

[*]$graph->SetYTickIncrement(5)//diferença entre cada linha no eixo Y

[*]$graph->SetXTickIncrement(999);

[*]$graph->SetXTickLength(15);

[*]

[*]$cor[0]=115;

[*]$cor[1]=141;

[*]$cor[2]=195;

[*]$graph->SetLightGridColor($cor);//cor da grade

[*]

[*]$graph->SetShading(10)//efeito 3D

[*]$graph->SetYTickLabelPos("both")//numeração na lateral direita

[*]$graph->SetPlotBorderType("sides");

[*]$graph->SetPrecisionY(2);//adiciona as casas decimais (precisão)

[*]

[*]//$graph->SetNewPlotAreaPixels(100,120,375,220);

[*]$graph->SetPlotAreaWorld(0,0,7,100)//o 7 é a quantidade de barras

[*]

[*]$graph->SetDrawXGrid(FALSE); //faz as grades

[*]$graph->SetDrawYGrid(TRUE);

[*]

[*]

[*]$graph->DrawGraph();

[*]

[*]//Print the image

[*]$graph->PrintImage();

[*]

[*]?>

[*]

 

Obrigado

Anggelus :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu testei exatamente esse codigo cara, e funcionou aqui em casa =/ qual a versao do seu php? talvez seja isso...tambem qual a versao do phplot que você testou?eu testei aqui em:apache2php5phplot5.0rc2[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao cara... o que você quer nao tem como...pq a gdlib retorna uma imagem, entao nao tem como você por 2 ou mais imagens numa mesma pagina... o unico jeito que certeza que daria certo é você usar 1 pagina com o mesmo codigo para cada imgdepois você chama todas numa index.php<img src="imagem1.php"><img src="imagem2.php"><img src="imagem3.php">=/ ate agora nao entendi o problema de criar 1 arquivo para cada img.. esse é o unico jeito mesmo =[, quebrei a cabeca aqui para pensar em algo e nao consegui chegar em nada =/[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema de eu usar uma página para cada gráfico é o seguinte, no meu sistema cada empresa tem seu funcionários, peças, clientes ....., então não tem como ser uma página (todo dia muda os dados), eu só preciso que o gráfico tenha os dados da empresa. Eu não estou conseguindo é mandar da minha página (página principal) os dados que devem ter no gráfico, entendeu.

Obrigado

Anggelus :D

 

PS: eu consegui um jeito, mas aparece apenas o gráfico, o PHPlot some com todos os dados da tela. Uma forma que eu tentei foi usar a sua dica, mas usando uma variável global pra mudar o valor das variáveis mas não funcionou. Eu não sei porque. A variavel "foi" para a outra página, mas o PHPlot não aceitou o valor dela. Se eu conseguir fazer isso o problema está solucionado. Se DEUS quiser. Obrigado

 

 

entao cara... o que você quer nao tem como...

 

pq a gdlib retorna uma imagem, entao nao tem como você por 2 ou mais imagens numa mesma pagina...

 

o unico jeito que certeza que daria certo é você usar 1 pagina com o mesmo codigo para cada img

 

depois você chama todas numa index.php

 

<img src="imagem1.php">

<img src="imagem2.php">

<img src="imagem3.php">

 

=/ ate agora nao entendi o problema de criar 1 arquivo para cada img..

 

esse é o unico jeito mesmo =[, quebrei a cabeca aqui para pensar em algo e nao consegui chegar em nada =/

 

[]'s

<{POST_SNAPBACK}>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o.onao erra para acontecer isso ^^enfim, posta como você testou para a gente achar o que estava errado[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigão tentei dessa forma:

 

exemplo pra enviar o Título (apenas um teste), esse seria o meu index.php

PHP

[*]<?

[*] global $titulo;

[*] $titulo="teste";

[*] echo "<IMG src='grafico.php'>";

[*]?>

 

esse seria o meu grafico.php, o ideal seria se tivesse como eu passar o valor do titulo para a pagina grafico.php. Outra ideia que eu tentei foi no index.php, foi usar o include_once ("grafico.php"); no lugar do echo "<IMG src='grafico.php'>";, ai a passagem do valor da variável titulo funciona, mas o PHPlot faz com que o resto da página some e fique apenas o gráfico.

PHP

[*]<?php

[*]global $titulo;

[*]$titulo = $_GET["titulo"];

[*]//Include the code

[*]include('phplot.php');

[*]

[*]//Define the object

[*]$graph =& new PHPlot(600,400);

[*]

[*]$graph->SetFileFormat("png");

[*]$graph->SetPlotType("bars");

[*]

[*]//Now do the second chart on the same image

[*]unset($example_data); //we are re-using $example_data (to save memory), but you don't have to

[*]$example_data = array(

[*]  array('Funcionário1',30),

[*]  array('Funcionário2',50), // here we have a missing data point, that's ok

[*]  array('Funcionário3',70),

[*]  array('Funcionário4',90),

[*]  array('Funcionário4',20),

[*]  array('Funcionário5',60),

[*]  array('Funcionário6',70)

[*]);

[*]

[*]

[*]

[*]$titulo_baixo="Nome do Funcionário";

[*]$titulo_lateral="Produção";

[*]

[*]$graph->SetDataType("text-data"); //Must be called before SetDataValues

[*]

[*]$graph->SetDataValues($example_data);

[*]

[*]//O valor da variavel $titulo teria que ser teste, como foi passado no index.php

[*]$graph->SetTitle($titulo);

[*]$graph->SetXTitle($titulo_baixo);

[*]//coloca o Título na duas laterais

[*]$graph->SetYTitle($titulo_lateral, "both");

[*]

[*]$graph->SetYTickIncrement(10);

[*]$graph->SetXLabelAngle(0); //have to re-set as defined above

[*]

[*]

[*]$graph->SetYTickLength(5);

[*]$graph->SetYTickIncrement(5)//diferença entre cada linha no eixo Y

[*]$graph->SetXTickIncrement(999);

[*]$graph->SetXTickLength(15);

[*]

[*]$cor[0]=115;

[*]$cor[1]=141;

[*]$cor[2]=195;

[*]$graph->SetLightGridColor($cor);//cor da grade

[*]

[*]$graph->SetShading(10)//efeito 3D

[*]$graph->SetYTickLabelPos("both")//numeração na lateral direita

[*]$graph->SetPlotBorderType("sides");

[*]$graph->SetPrecisionY(2);//adiciona as casas decimais (precisão)

[*]

[*]//$graph->SetNewPlotAreaPixels(100,120,375,220);

[*]$graph->SetPlotAreaWorld(0,0,7,100)//o 7 é a quantidade de barras

[*]

[*]$graph->SetDrawXGrid(FALSE); //faz as grades

[*]$graph->SetDrawYGrid(TRUE);

[*]

[*]

[*]$graph->DrawGraph();

[*]

[*]//Print the image

[*]$graph->PrintImage();

[*]

[*]?>

 

Com o include_once o meu index fica assim:

PHP

[*]<?

[*] global $titulo;

[*] $titulo="teste";

[*] include_once ("grafico.php");

[*]?>

 

Obrigado

Anggelus :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum cade o index???

 

tpo nao faz muito sentido seu codigo nao...

 

da onde vem o $titulo ?

global você so pode usar dentro de function()....

 

quando você da include() ja vem com a var nao precisa fazer isso...

 

olha eu faria assim:

 

<html>

 

<!-- todo seu html -->

 

<img src="grafico1.php">

 

<br>

<br>

 

<img src="grafico2.php">

 

</html>

 

<?php

$titulo = "Grafico 1";

//Include the code

include('phplot.php');

 

//Define the object

$graph =& new PHPlot(600' date='400);

 

$graph->SetFileFormat("png");

$graph->SetPlotType("bars");

 

//Now do the second chart on the same image

unset($example_data); //we are re-using $example_data (to save memory), but you don't have to

$example_data = array(

array('Funcionário1',30),

array('Funcionário2',50), // here we have a missing data point, that's ok

array('Funcionário3',70),

array('Funcionário4',90),

array('Funcionário4',20),

array('Funcionário5',60),

array('Funcionário6',70)

);

 

 

 

$titulo_baixo="Nome do Funcionário";

$titulo_lateral="Produção";

 

$graph->SetDataType("text-data"); //Must be called before SetDataValues

 

$graph->SetDataValues($example_data);

 

//O valor da variavel $titulo teria que ser teste, como foi passado no index.php

$graph->SetTitle($titulo);

$graph->SetXTitle($titulo_baixo);

//coloca o Título na duas laterais

$graph->SetYTitle($titulo_lateral, "both");

 

$graph->SetYTickIncrement(10);

$graph->SetXLabelAngle(0); //have to re-set as defined above

 

$graph->SetYTickLength(5);

$graph->SetYTickIncrement(5); //diferença entre cada linha no eixo Y

$graph->SetXTickIncrement(999);

$graph->SetXTickLength(15);

 

$cor[0']=115;

$cor[1]=141;

$cor[2]=195;

$graph->SetLightGridColor($cor);//cor da grade

 

$graph->SetShading(10); //efeito 3D

$graph->SetYTickLabelPos("both"); //numeração na lateral direita

$graph->SetPlotBorderType("sides");

$graph->SetPrecisionY(2);//adiciona as casas decimais (precisão)

 

//$graph->SetNewPlotAreaPixels(100,120,375,220);

$graph->SetPlotAreaWorld(0,0,7,100); //o 7 é a quantidade de barras

 

$graph->SetDrawXGrid(FALSE); //faz as grades

$graph->SetDrawYGrid(TRUE);

 

 

$graph->DrawGraph();

 

//Print the image

$graph->PrintImage();

 

?>

 

<?php

$titulo = "Grafico 2";

//Include the code

include('phplot.php');

 

//Define the object

$graph =& new PHPlot(600' date='400);

 

$graph->SetFileFormat("png");

$graph->SetPlotType("bars");

 

//Now do the second chart on the same image

unset($example_data); //we are re-using $example_data (to save memory), but you don't have to

$example_data = array(

array('Funcionário1',30),

array('Funcionário2',50), // here we have a missing data point, that's ok

array('Funcionário3',70),

array('Funcionário4',90),

array('Funcionário4',20),

array('Funcionário5',60),

array('Funcionário6',70)

);

 

 

 

$titulo_baixo="Nome do Funcionário";

$titulo_lateral="Produção";

 

$graph->SetDataType("text-data"); //Must be called before SetDataValues

 

$graph->SetDataValues($example_data);

 

//O valor da variavel $titulo teria que ser teste, como foi passado no index.php

$graph->SetTitle($titulo);

$graph->SetXTitle($titulo_baixo);

//coloca o Título na duas laterais

$graph->SetYTitle($titulo_lateral, "both");

 

$graph->SetYTickIncrement(10);

$graph->SetXLabelAngle(0); //have to re-set as defined above

 

$graph->SetYTickLength(5);

$graph->SetYTickIncrement(5); //diferença entre cada linha no eixo Y

$graph->SetXTickIncrement(999);

$graph->SetXTickLength(15);

 

$cor[0']=115;

$cor[1]=141;

$cor[2]=195;

$graph->SetLightGridColor($cor);//cor da grade

 

$graph->SetShading(10); //efeito 3D

$graph->SetYTickLabelPos("both"); //numeração na lateral direita

$graph->SetPlotBorderType("sides");

$graph->SetPrecisionY(2);//adiciona as casas decimais (precisão)

 

//$graph->SetNewPlotAreaPixels(100,120,375,220);

$graph->SetPlotAreaWorld(0,0,7,100); //o 7 é a quantidade de barras

 

$graph->SetDrawXGrid(FALSE); //faz as grades

$graph->SetDrawYGrid(TRUE);

 

 

$graph->DrawGraph();

 

//Print the image

$graph->PrintImage();

 

?>

 

nao é isso que voce quer?

porque voce nao tenta fazer desse modo? o.o

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigão não seria isso pelo seguinte os gráfico precisam ser dinâmico imagina o seguinte:

Relatório de Produção - Janeiro de 2005 Nome do Funcionário: Funcionário1  Produção = 50Nome do Funcionário: Funcionário2  Produção = 60Nome do Funcionário: Funcionário3  Produção = 70Nome do Funcionário: Funcionário4  Produção = 80Relatório de Produção - Fevereiro de 2005 Nome do Funcionário: Funcionário1  Produção = 20Nome do Funcionário: Funcionário2  Produção = 30Nome do Funcionário: Funcionário3  Produção = 40Nome do Funcionário: Funcionário4  Produção = 50

eu não tenho como saber qual que seria o nome do funcionário e nem qual a produção que ele fez, e também porque a empresa pode aumentar ou diminuir a quantidade de Funcionários. Para isso eu pego os valores no Banco de Dados. Entendeu.eu teria que arrumar um jeito de enviar para a página grafico.php os valores para que o PHPlot crie os gráficos corretamente.ObrigadoAnggelus :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

... sim cara eu entendi, mais isso voce tem que parar para pensar um pouco...ueh em cada grafico.php você abre a conexao com o db e passa os valores, ja tentou fazer isso?[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu pensei nisso sim, mas tem um porém, no caso o meu sistema tem criar um gráfico para cada Funcionário também. Mas o problema é identificar antes da consulta quais os parametros da consulta tipo primeiro fazer do Funcionário X e depois do Y. E por exemplo no outro mes eu não tenho mais o X, seria o Y e o Z por exemplo.

Obrigado

Anggelus :D

 

dá uma olhada na tabela que tem que ter no gráfico. Para criar essa tabela eu usei uma consulta sql dentro da outra, ai depois de cada Funcionário teria que ter um gráfico, e eu não tenho como saber se são 5, 10.... Funcionários que a empresa tem, e o gráfico tem que ficar debaixo de cada tabela pra fazer sentido.

 

Tabela

Imagem Postada

 

Tentei usar sessão mas não sei porque não funcionou. Dentro da página grafico.php não aceitou o valor da sessão. Muito estranho

Compartilhar este post


Link para o post
Compartilhar em outros sites

poh cara.. novamente eu repito para e pensa um pouquinho...ja tentou usar query string?<img src="grafico.php?functionario=10">depois no grafico.php você retorna$titulo = $_GET["funcionario"]ja tentou?[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, nem li tudo.

mas pode trocar o

//Print the image

$graph->PrintImage();

por

ImagePng($graph->img, $output_file);

 

 

Gravando as imagens gerada num arquivo e recuperando depois com html dai nem precisa saber nada, automatiza tudo.

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.