Ir para conteúdo

POWERED BY:

Arquivado

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

MicheleAlmeida

Sobre include

Recommended Posts

Hum.. vamos dividir e conquistar então.

Se você rodar todos num único arquivo.. copia e cola todos os códigos necessários e joga numa única página .php..

roda corretamente ?

 

Se você jogar os arquivos que incluem o arquivo de funções num só, e chamar apenas uma vez as funções, roda corretamente ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda nao tentei dessa forma, mais acho q tem alguma coisa errada no meu codigo de funções.

você pode dar uma olhada, por favor?

<?php

// Page: FusionCharts.php

// Author: InfoSoft Global (P) Ltd.

// This page contains functions that can be used to render FusionCharts.

 

 

// encodeDataURL function encodes the dataURL before it's served to FusionCharts.

// If you've parameters in your dataURL, you necessarily need to encode it.

// Param: $strDataURL - dataURL to be fed to chart

// Param: $addNoCacheStr - Whether to add aditional string to URL to disable caching of data

function encodeDataURL($strDataURL, $addNoCacheStr=false) {

//Add the no-cache string if required

if ($addNoCacheStr==true) {

// We add ?FCCurrTime=xxyyzz

// If the dataURL already contains a ?, we add &FCCurrTime=xxyyzz

// We replace : with _, as FusionCharts cannot handle : in URLs

if (strpos(strDataURL,"?")<>0)

$strDataURL .= "&FCCurrTime=" . Date("H_i_s");

else

$strDataURL .= "?FCCurrTime=" . Date("H_i_s");

}

// URL Encode it

return urlencode($strDataURL);

}

 

 

// datePart function converts MySQL database based on requested mask

// Param: $mask - what part of the date to return "m' for month,"d" for day, and "y" for year

// Param: $dateTimeStr - MySQL date/time format (yyyy-mm-dd HH:ii:ss)

function datePart($mask, $dateTimeStr) {

@list($datePt, $timePt) = explode(" ", $dateTimeStr);

$arDatePt = explode("-", $datePt);

$dataStr = "";

// Ensure we have 3 parameters for the date

if (count($arDatePt) == 3) {

list($year, $month, $day) = $arDatePt;

// determine the request

switch ($mask) {

case "m": return $month;

case "d": return $day;

case "y": return $year;

}

// default to mm/dd/yyyy

return (trim($month . "/" . $day . "/" . $year));

}

return $dataStr;

}

 

 

// renderChart renders the JavaScript + HTML code required to embed a chart.

// This function assumes that you've already included the FusionCharts JavaScript class

// in your page.

 

// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot

// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)

// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)

// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.

// $chartWidth - Intended width for the chart (in pixels)

// $chartHeight - Intended height for the chart (in pixels)

// $debugMode - Whether to start the chart in debug mode

// $registerWithJS - Whether to ask chart to register itself with JavaScript

function renderChart($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode, $registerWithJS) {

//First we create a new DIV for each chart. We specify the name of DIV as "chartId"Div.

//DIV names are case-sensitive.

 

// The Steps in the script block below are:

//

// 1)In the DIV the text "Chart" is shown to users before the chart has started loading

// (if there is a lag in relaying SWF from server). This text is also shown to users

// who do not have Flash Player installed. You can configure it as per your needs.

//

// 2) The chart is rendered using FusionCharts Class. Each chart's instance (JavaScript) Id

// is named as chart_"chartId".

//

// 3) Check whether we've to provide data using dataXML method or dataURL method

// save the data for usage below

if ($strXML=="")

$tempData = "//Set the dataURL of the chart\n\t\tchart_$chartId.setDataURL(\"$strURL\")";

else

$tempData = "//Provide entire XML data using dataXML method\n\t\tchart_$chartId.setDataXML(\"$strXML\")";

 

// Set up necessary variables for the RENDERCAHRT

$chartIdDiv = $chartId . "Div";

$ndebugMode = boolToNum($debugMode);

$nregisterWithJS = boolToNum($registerWithJS);

 

// create a string for outputting by the caller

$render_chart = <<<RENDERCHART

 

//START Script Block for Chart $chartId

<div id="$chartIdDiv" align="center">

Chart.

</div>

<script type="text/javascript">

//Instantiate the Chart

var chart_$chartId = new FusionCharts("$chartSWF", "$chartId", "$chartWidth", "$chartHeight", "$ndebugMode", "$nregisterWithJS");

$tempData

//Finally, render the chart.

chart_$chartId.render("$chartIdDiv");

</script>

<!-- END Script Block for Chart $chartId -->

RENDERCHART;

 

return $render_chart;

}

 

 

//renderChartHTML function renders the HTML code for the JavaScript. This

//method does NOT embed the chart using JavaScript class. Instead, it uses

//direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll

//see the "Click to activate..." message on the chart.

// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot

// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)

// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)

// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.

// $chartWidth - Intended width for the chart (in pixels)

// $chartHeight - Intended height for the chart (in pixels)

// $debugMode - Whether to start the chart in debug mode

function renderChartHTML($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode) {

// Generate the FlashVars string based on whether dataURL has been provided

// or dataXML.

$strFlashVars = "&chartWidth=" . $chartWidth . "&chartHeight=" . $chartHeight . "&debugMode=" . boolToNum($debugMode);

if ($strXML=="")

// DataURL Mode

$strFlashVars .= "&dataURL=" . $strURL;

else

//DataXML Mode

$strFlashVars .= "&dataXML=" . $strXML;

 

$HTML_chart = <<<HTMLCHART

<!-- START Code Block for Chart $chartId -->

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="$chartWidth" height="$chartHeight" id="$chartId">

<param name="allowScriptAccess" value="always" />

<param name="movie" value="$chartSWF"/>

<param name="FlashVars" value="$strFlashVars" />

<param name="quality" value="high" />

<embed src="$chartSWF" FlashVars="$strFlashVars" quality="high" width="$chartWidth" height="$chartHeight" name="$chartId" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />

</object>

<!-- END Code Block for Chart $chartId -->

HTMLCHART;

 

return $HTML_chart;

}

 

// boolToNum function converts boolean values to numeric (1/0)

function boolToNum($bVal) {

return (($bVal==true) ? 1 : 0);

}

 

?>

 

Obrigada

 

Hum.. vamos dividir e conquistar então.

Se você rodar todos num único arquivo.. copia e cola todos os códigos necessários e joga numa única página .php..

roda corretamente ?

 

Se você jogar os arquivos que incluem o arquivo de funções num só, e chamar apenas uma vez as funções, roda corretamente ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o bbcode do fórum qndo for postar códigos.

Faça:

código
é só digitar: [ c o d e ] código [ / c o d e ]

sem os espaços que coloquei entre as letras dentro dos []

 

Tenta fazer da forma que eu disse... precisamos saber se o erro, é mesmo dos includes, ou se tem algo mais ai.

Poste os trechos de códigos onde você usa a função:

encodeDataURL

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

// Page: FusionCharts.php

// Author: InfoSoft Global (P) Ltd.

// This page contains functions that can be used to render FusionCharts.

 

 

// encodeDataURL function encodes the dataURL before it's served to FusionCharts.

// If you've parameters in your dataURL, you necessarily need to encode it.

// Param: $strDataURL - dataURL to be fed to chart

// Param: $addNoCacheStr - Whether to add aditional string to URL to disable caching of data

function encodeDataURL($strDataURL, $addNoCacheStr=false) {

//Add the no-cache string if required

if ($addNoCacheStr==true) {

// We add ?FCCurrTime=xxyyzz

// If the dataURL already contains a ?, we add &FCCurrTime=xxyyzz

// We replace : with _, as FusionCharts cannot handle : in URLs

if (strpos(strDataURL,"?")<>0)

$strDataURL .= "&FCCurrTime=" . Date("H_i_s");

else

$strDataURL .= "?FCCurrTime=" . Date("H_i_s");

}

// URL Encode it

return urlencode($strDataURL);

}

 

 

// datePart function converts MySQL database based on requested mask

// Param: $mask - what part of the date to return "m' for month,"d" for day, and "y" for year

// Param: $dateTimeStr - MySQL date/time format (yyyy-mm-dd HH:ii:ss)

function datePart($mask, $dateTimeStr) {

@list($datePt, $timePt) = explode(" ", $dateTimeStr);

$arDatePt = explode("-", $datePt);

$dataStr = "";

// Ensure we have 3 parameters for the date

if (count($arDatePt) == 3) {

list($year, $month, $day) = $arDatePt;

// determine the request

switch ($mask) {

case "m": return $month;

case "d": return $day;

case "y": return $year;

}

// default to mm/dd/yyyy

return (trim($month . "/" . $day . "/" . $year));

}

return $dataStr;

}

 

 

// renderChart renders the JavaScript + HTML code required to embed a chart.

// This function assumes that you've already included the FusionCharts JavaScript class

// in your page.

 

// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot

// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)

// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)

// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.

// $chartWidth - Intended width for the chart (in pixels)

// $chartHeight - Intended height for the chart (in pixels)

// $debugMode - Whether to start the chart in debug mode

// $registerWithJS - Whether to ask chart to register itself with JavaScript

function renderChart($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode, $registerWithJS) {

//First we create a new DIV for each chart. We specify the name of DIV as "chartId"Div.

//DIV names are case-sensitive.

 

// The Steps in the script block below are:

//

// 1)In the DIV the text "Chart" is shown to users before the chart has started loading

// (if there is a lag in relaying SWF from server). This text is also shown to users

// who do not have Flash Player installed. You can configure it as per your needs.

//

// 2) The chart is rendered using FusionCharts Class. Each chart's instance (JavaScript) Id

// is named as chart_"chartId".

//

// 3) Check whether we've to provide data using dataXML method or dataURL method

// save the data for usage below

if ($strXML=="")

$tempData = "//Set the dataURL of the chart\n\t\tchart_$chartId.setDataURL(\"$strURL\")";

else

$tempData = "//Provide entire XML data using dataXML method\n\t\tchart_$chartId.setDataXML(\"$strXML\")";

 

// Set up necessary variables for the RENDERCAHRT

$chartIdDiv = $chartId . "Div";

$ndebugMode = boolToNum($debugMode);

$nregisterWithJS = boolToNum($registerWithJS);

 

// create a string for outputting by the caller

$render_chart = <<<RENDERCHART

 

//START Script Block for Chart $chartId

<div id="$chartIdDiv" align="center">

Chart.

</div>

<script type="text/javascript">

//Instantiate the Chart

var chart_$chartId = new FusionCharts("$chartSWF", "$chartId", "$chartWidth", "$chartHeight", "$ndebugMode", "$nregisterWithJS");

$tempData

//Finally, render the chart.

chart_$chartId.render("$chartIdDiv");

</script>

<!-- END Script Block for Chart $chartId -->

RENDERCHART;

 

return $render_chart;

}

 

 

//renderChartHTML function renders the HTML code for the JavaScript. This

//method does NOT embed the chart using JavaScript class. Instead, it uses

//direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll

//see the "Click to activate..." message on the chart.

// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot

// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)

// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)

// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.

// $chartWidth - Intended width for the chart (in pixels)

// $chartHeight - Intended height for the chart (in pixels)

// $debugMode - Whether to start the chart in debug mode

function renderChartHTML($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode) {

// Generate the FlashVars string based on whether dataURL has been provided

// or dataXML.

$strFlashVars = "&chartWidth=" . $chartWidth . "&chartHeight=" . $chartHeight . "&debugMode=" . boolToNum($debugMode);

if ($strXML=="")

// DataURL Mode

$strFlashVars .= "&dataURL=" . $strURL;

else

//DataXML Mode

$strFlashVars .= "&dataXML=" . $strXML;

 

$HTML_chart = <<<HTMLCHART

<!-- START Code Block for Chart $chartId -->

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="$chartWidth" height="$chartHeight" id="$chartId">

<param name="allowScriptAccess" value="always" />

<param name="movie" value="$chartSWF"/>

<param name="FlashVars" value="$strFlashVars" />

<param name="quality" value="high" />

<embed src="$chartSWF" FlashVars="$strFlashVars" quality="high" width="$chartWidth" height="$chartHeight" name="$chartId" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />

</object>

<!-- END Code Block for Chart $chartId -->

HTMLCHART;

 

return $HTML_chart;

}

 

// boolToNum function converts boolean values to numeric (1/0)

function boolToNum($bVal) {

return (($bVal==true) ? 1 : 0);

}

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá Okay.. esseai foi o arquivo: FusionCharts.php ne?!

Onde você usa a função: encodeDataURL ?

 

Tentou mudar os include para include_once, e os require para require_once ?

Colocou todos os códigos em apenas um arquivo ? continuou dando erro? qual ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei todos os codigos em um unico arquivo e o erro foi:

 

//START Script Block for Chart chartId

 

Ja mudei tb para iclude once e nada

 

 

Tá Okay.. esseai foi o arquivo: FusionCharts.php ne?!

Onde você usa a função: encodeDataURL ?

 

Tentou mudar os include para include_once, e os require para require_once ?

Colocou todos os códigos em apenas um arquivo ? continuou dando erro? qual ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O q eu notei foi o seguinte:

 

quando eu coloco o include do FusionCharts.php na pagina php que tem os dois includes dos graficos, ele mostra apenas o segundo grafico.

E a palavra Charts onde deveria aparecer o outro.

 

qunado eu coloco o include do FusionCharts.php em cada pg php que serao os includes da minha pg principal

aparece somente o primeiro grafico e o erro seguinte:

 

Fatal error: Cannot redeclare encodedataurl() (previously declared in C:\wamp\www\Charts_MICHELE\Includes\FusionCharts.php:11) in C:\wamp\www\Charts_MICHELE\Includes\FusionCharts.php on line 24

Compartilhar este post


Link para o post
Compartilhar em outros sites

repetindo novamente..

 

você está incluindo o mesmo aqruivo mais de uma vez.

 

a estrutura lógica do sistema de arquivos está errado

 

analise e encontre o problema

 

 

faça simples testes de depuração

 

por exemplo, na primiera ou ultima linha do arquivo "FusionCharts.php"

adicione

 

$contBug++;

na primeira página PHP que inclui o arquivo "FusionCharts.php"

adicione:

 

$contBug = 0;

 

logo após cada comando de include ou require que esteja carregando o "FusionCharts.php"

adicione

 

echo '<hr><b>contBug:</b> ' . $contBug;

 

 

vez estiver carregadno mai de uma vez,

 

aparecerá na tela algo do tipo

 

contBug: numero

 

se o numero for maior que ZERO com certeza está carregando o mesmo arquivo mais de uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente o q aconteceu:

contBug: 1

 

O problema é o seguinte: ambas as paginas chamam um mesmo arquivo "FusionCharts.php" que contem as funções.

 

Como posso fazer então?

Meus graficos funcionam com Drill Down dinamico.

 

 

repetindo novamente..

 

você está incluindo o mesmo aqruivo mais de uma vez.

 

a estrutura lógica do sistema de arquivos está errado

 

analise e encontre o problema

 

 

faça simples testes de depuração

 

por exemplo, na primiera ou ultima linha do arquivo "FusionCharts.php"

adicione

 

$contBug++;

na primeira página PHP que inclui o arquivo "FusionCharts.php"

adicione:

 

$contBug = 0;

 

logo após cada comando de include ou require que esteja carregando o "FusionCharts.php"

adicione

 

echo '<hr><b>contBug:</b> ' . $contBug;

 

 

vez estiver carregadno mai de uma vez,

 

aparecerá na tela algo do tipo

 

contBug: numero

 

se o numero for maior que ZERO com certeza está carregando o mesmo arquivo mais de uma vez.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que entendi

 

você está chamndo o fusionChart.php nos arquivos que necessitam dele

 

e num dos arquivos que usam fusionChart.php está fazendo include também de outro arquivo que também inclui o fusionchart.php

 

para resolver você deve definir um unico lugar para incluir uma unica vez.

 

o modo como você está fazendo:

a.php

<?php
include 'FusionChart.php';
// bla bla bla
?>

b.php

<?php
include 'FusionChart.php';
// bla bla bla
?>

 

c.php

<?php
include 'a.php';
include 'b.php';
// bla bla bla
?>

isso vai provocar o erro, pois o FusionChart.php já foi carregado pelo a.php, no momento que o a.php foi carregado pelo c.php

 

 

como resolver nesse caso ?

 

retire o include 'FusionChart.php'; dos arquivos a.php e b.php

e inclua no c.php

 

c.php

<?php

include 'FusionChart.php';

include 'a.php';
include 'b.php';
// bla bla bla
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz dessa forma, só aparece um grafico (um include somente), o outro não.

 

 

pelo que entendi

 

você está chamndo o fusionChart.php nos arquivos que necessitam dele

 

e num dos arquivos que usam fusionChart.php está fazendo include também de outro arquivo que também inclui o fusionchart.php

 

para resolver você deve definir um unico lugar para incluir uma unica vez.

 

o modo como você está fazendo:

a.php

<?php
include 'FusionChart.php';
// bla bla bla
?>

b.php

<?php
include 'FusionChart.php';
// bla bla bla
?>

 

c.php

<?php
include 'a.php';
include 'b.php';
// bla bla bla
?>

isso vai provocar o erro, pois o FusionChart.php já foi carregado pelo a.php, no momento que o a.php foi carregado pelo c.php

 

 

como resolver nesse caso ?

 

retire o include 'FusionChart.php'; dos arquivos a.php e b.php

e inclua no c.php

 

c.php

<?php

include 'FusionChart.php';

include 'a.php';
include 'b.php';
// bla bla bla
?>

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.