anggelus 0 Denunciar post Postado Agosto 13, 2005 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
red neck * 0 Denunciar post Postado Agosto 13, 2005 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 Se alguém usa o PHPlot por favor me ajudar é muito urgente.Anggelus :unsure: Compartilhar este post Link para o post Compartilhar em outros sites
red neck * 0 Denunciar post Postado Agosto 15, 2005 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 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
red neck * 0 Denunciar post Postado Agosto 15, 2005 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 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
red neck * 0 Denunciar post Postado Agosto 15, 2005 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 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 = 50eu 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
red neck * 0 Denunciar post Postado Agosto 15, 2005 ... 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 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 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
red neck * 0 Denunciar post Postado Agosto 15, 2005 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
anggelus 0 Denunciar post Postado Agosto 15, 2005 vou tentar desse jeito, vlw kra.Brigadão ae :D Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo Costa 0 Denunciar post Postado Junho 21, 2006 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