Probléme pour generer un cvs

Répondre
djo
le 30/08/2007 à 15:50
djo
Bonjour,

Je doit generer un cvs avec le script ci dessous.
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=Historique_" . date("Ymd").".cvs");
$csv_output = "Month,DeviceName,InterfaceName,InterfaceDesc,Minor,Major,Critical";
$csv_output .= "\n";
include("../include/connection.php");
//Lecture de la data base
$query = ("
select
YEAR(FROM_UNIXTIME(History.eventdate)) as Year,
MONTH(FROM_UNIXTIME(History.eventdate)) as Month,
Devices.name as DeviceName,
Interfaces.name as InterfaceName,
Devices.name2 as devicesName2,
Interfaces.description as InterfaceDesc,
SUM(case StatusTypes.name when 'Normal' then 1 else 0 end) as Normal,
SUM(case StatusTypes.name when 'Minor' then 1 else 0 end) as Minor,
SUM(case StatusTypes.name when 'Major' then 1 else 0 end) as Major,
SUM(case StatusTypes.name when 'Critical' then 1 else 0 end) as Critical

from
History
inner join StatusTypes on History.statusid = StatusTypes.id
inner join Cells on History.cellid = Cells.id
inner join Interfaces on Cells.interfaceid = Interfaces.id
inner join ServiceTypes on Cells.serviceid = ServiceTypes.id
inner join Devices on Interfaces.deviceid = Devices.id

where
ServiceTypes.name = 'FEC'

group by
YEAR(FROM_UNIXTIME(History.eventdate)),
MONTH(FROM_UNIXTIME(History.eventdate)),
Devices.name,
Interfaces.name,
Interfaces.description



$result = mysql_query($query)
");
while($row = mysql_fetch_array($result)) {

$cvs_output = "$row[Month],$row[DeviceName],$row[InterfaceName],$row[devicesName2],$row[InterfaceDesc],$row[Ninor],$row[Major],$row[Critical]\n";
}
print $csv_output;
exit;
?>

Mais il me genere une erreur dans le cvs :
<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/var/www/monitoring/historique/cvs.php</b> on line <b>43</b><br />

Si quelqu'un pouvais me dire ou ce trouve l'erreur car perso je ne la trouve pas merci d'avance pour l'aide.
LupusMic
le 30/08/2007 à 19:33
LupusMic
Inverse les lignes 42 et 43. Mais surtout, télécharges et utilises un éditeur de texte avec coloration syntaxique.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
djo
le 31/08/2007 à 08:57
djo
Merci pour le conseil mais la il y a un truc qui fonctionne pas c'est que le fichier cvs est vide il ne m'ecrit pas les donnée dans le Fichier mon code serait'il faut ?
LupusMic
le 01/09/2007 à 02:29
LupusMic
Déjà, il faut dire CSV :p Ensuite, oui, tu écrase ta variable de buffering à chaque boucle While.

Fait des echos, tu n'as pas besoin de tamponné la sortie ici.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
djo
le 02/09/2007 à 13:54
djo
Hello,

Alors j'ai changer le script qui ressemble a ceci maintenent:
<?php
header("Content-type: text/x-csv");
header("Content-disposition: attachment; filename=Historique_SNR_" . date("Ymd").".csv");

include("../include/connection.php");
//Lecture de la data base
$sql = ("
select
YEAR(FROM_UNIXTIME(History.eventdate)) as Year,
MONTH(FROM_UNIXTIME(History.eventdate)) as Month,
Devices.name as DeviceName,
Interfaces.name as InterfaceName,
Devices.name2 as devicesName2,
Interfaces.description as InterfaceDesc,
SUM(case StatusTypes.name when 'Normal' then 1 else 0 end) as Normal,
SUM(case StatusTypes.name when 'Minor' then 1 else 0 end) as Minor,
SUM(case StatusTypes.name when 'Major' then 1 else 0 end) as Major,
SUM(case StatusTypes.name when 'Critical' then 1 else 0 end) as Critical

from
History
inner join StatusTypes on History.statusid = StatusTypes.id
inner join Cells on History.cellid = Cells.id
inner join Interfaces on Cells.interfaceid = Interfaces.id
inner join ServiceTypes on Cells.serviceid = ServiceTypes.id
inner join Devices on Interfaces.deviceid = Devices.id

where
ServiceTypes.name = 'SNR'

group by
YEAR(F0ROM_UNIXTIME(History.eventdate)),
MONTH(FROM_UNIXTIME(History.eventdate)),
Devices.name,
Interfaces.name,
Interfaces.description


;");
$resultat = mysql_query ($sql);
$list = "";
while ($snr = mysql_fetch_array ($resultat))
{
$month = $snr ['Month'];
$device = $snr ['DeviceName'];
$interface = $snr ['InterfaceName'];
$device2 = $snr ['InterfaceDesc'];
$minor = $snr ['Minor'];
$major = $snr ['Major'];
$critical = $snr ['Critical'];
$list .= "\"$month\",\"$device\",\"$interface\",\"$device2\",\"$minor\",\"$major\",\"$critical\"\r\n";
}
echo $list;
?>

mais j'ai une erreur a la ligne 42 sur le while
mysql_fetch_array(): supplied argument is not a valid MySQL result resource

la je sèche completement comment résoudre cette erreur une idée ?
LupusMic
le 02/09/2007 à 15:21
LupusMic
Pourquoi parenthèses-tu la chaine contentant le code SQL ?

Un gros conseil : relis la sections sur la syntaxe dans la documentation PHP.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
djo
le 02/09/2007 à 15:30
djo
et c'est le faite de mettre des parenthèse sur la chaine sql qui fait l'erreur sur le while?
LupusMic
le 03/09/2007 à 03:00
LupusMic
Non, mais d'avoir mis ces parenthèses montre que tu ne sais pas encore ce que tu fais.

Quoiqu'il en soit, tu utilises plein de fonctions qui peuvent générer une erreur. Il faut donc *systématiquement* traiter ces erreurs. Sino,, bah tu ne sauras jamais ce qu'il se passe.

Revois ton code, et pour chaque fonction, vérifie si elle peut générer une erreur, et comment tu peux récupérer une information sur l'erreur.

Je croyais que le fait de mettre des parenthèses transtypait ta chaine en objet, mais en fait non, c'est autre chose.

As-tu testé ton SQL avant de l'utiliser dans ton PHP ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
djo
le 03/09/2007 à 08:59
djo
La requette SQL fonctionne parfaitement sur ce script:
<? /*
Nom:
Creation:
Date:26.07.2007
Desc: Stats des alarmes SNR
*/?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>|Statistique| Alerts SNR</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
.mon_th_title {
background:#90929C;
color:#ffffff;
font-weight: bolder;
}

tr {
min-height: 5px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
}
h1 {
min-height: 6px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10pt;
}
-->
</style>
</head>
<body>
<table>

<tr class="mon_th_title">
<? //Construction URL
$url = 'index.php?';

if (!empty($_GET['limit_by']))
$url.= 'limit_by='.$_GET['limit_by'].'&';

if (!empty($_GET['limit']))
$url.= 'limit='.$_GET['limit'].'&';

if (!empty($_GET['desc'])) {

if ($_GET['desc']=='yes')
$url.= 'desc=no&';

if ($_GET['desc']=='no')
$url.= 'desc=yes&';
}
else {
$url.= 'desc=no&';
}

$url.= 'order='


?>
<th><a href="<?=$url.'Month'?>">Mois</a></th>
<th><a href="<?=$url.'Month'?>">Années</a></th>
<th><a href="<?=$url.'devices'?>">Devices</a></th>
<th><a href="<?=$url.'interface'?>">Interface</a></th>
<th><a href="<?=$url.'descinterface'?>">Desc Interface</a></th>
<th><a href="<?=$url.'minor'?>">Minor</a></th>
<th><a href="<?=$url.'major'?>">Major</a></th>
<th><a href="<?=$url.'critical'?>">Critical</a></th>
</tr>
<?

$limit = "";
$where = "";
$order = "";
$desc = "";

if (!empty($_GET['limit_by'])) {

switch ($_GET['limit_by']) {
case 'rows' :
$limit = 'LIMIT 0,'.$_GET['limit'];
break;

case 'month' :
$where = 'AND MONTH >'.(limit()-$_GET['limit']);
break;

case 'devices' :
$where = 'AND Devices.name >'.(limit()-$_GET['limit']);
break;

default :

break;
}

}
else {
$limit = 'LIMIT 0,1000';
}

if (!empty($_GET['order'])) {

switch ($_GET['order']) {
case 'month' :
$order = 'ORDER BY MONTH';
break;

case 'year' :
$order = 'ORDER BY YEAR';
break;

case 'devices' :
$order = 'ORDER BY Devices.name';
break;

case 'interface' :
$order = 'ORDER BY Interfaces.name';
break;

case 'descinterface':
$order = 'ORDER BY InterfaceDesc';
break;

case 'service' :
$order = 'ORDER BY ServiceTypes.name';
break;

case 'minor' :
$order = 'ORDER BY Minor';
break;

case 'major' :
$order = 'ORDER BY Major';
break;

case 'critical' :
$order = 'ORDER BY Critical';
break;
}

}
else {
$order = 'ORDER BY History.eventdate DESC';
}

if (!empty($_GET['desc'])) {
if ($_GET['limit_by']=="devices") {

switch ($_GET['desc']) {
case 'no' :
$desc = '';
break;

case 'yes' :
$desc = 'DESC';
break;

default :
$desc = '';
break;
}
}

}
else {
$desc = '';
}





include("../include/connection.php");
//Lecture de la data base
$sql_history = mysql_query("
select
YEAR(FROM_UNIXTIME(History.eventdate)) as Year,
MONTH(FROM_UNIXTIME(History.eventdate)) as Month,
Devices.name as DeviceName,
Interfaces.name as InterfaceName,
Devices.name2 as devicesName2,
Interfaces.description as InterfaceDesc,
SUM(case StatusTypes.name when 'Normal' then 1 else 0 end) as Normal,
SUM(case StatusTypes.name when 'Minor' then 1 else 0 end) as Minor,
SUM(case StatusTypes.name when 'Major' then 1 else 0 end) as Major,
SUM(case StatusTypes.name when 'Critical' then 1 else 0 end) as Critical

from
History
inner join StatusTypes on History.statusid = StatusTypes.id
inner join Cells on History.cellid = Cells.id
inner join Interfaces on Cells.interfaceid = Interfaces.id
inner join ServiceTypes on Cells.serviceid = ServiceTypes.id
inner join Devices on Interfaces.deviceid = Devices.id

where
ServiceTypes.name = 'SNR'

group by
YEAR(FROM_UNIXTIME(History.eventdate)),
MONTH(FROM_UNIXTIME(History.eventdate)),
Devices.name,
Interfaces.name,
Interfaces.description


".$where."
".$order."
".$limit.$desc."
;");
while($data_history = mysql_fetch_array($sql_history)) {


//Tableau d'affichage



{
echo "<tr>";
//echo '<tr class="mon_tr_ok" style="background-color:'.$couleur.';">';
echo '<td bgcolor="#CCCCCC">' . $data_history['Month']."<br>"."</td>";
echo '<td bgcolor="#CCCCCC">' . $data_history['Year']. "</td>";
echo '<td bgcolor="#CCCCCC">' . $data_history['DeviceName'] . "</td>";
echo '<td bgcolor="#CCCCCC">' . $data_history['InterfaceName'] . "</td>";
echo '<td bgcolor="#CCCCCC">' . $data_history['InterfaceDesc']. "</td>";
echo '<td bgcolor="#FFFF33">' . $data_history['Minor'] . "</td>";
echo '<td bgcolor="#FF9900">' . $data_history['Major'] . "</td>";
echo '<td bgcolor="#CC0000">' . $data_history['Critical']. "</td>";
// echo "<td>" . $data_history['interfacesSnr'] . "</td>";
// echo"<td>" . $image = imagecreatefromgif ("image_test.GIF"); ."</td>";
echo "</tr>";
}


}
?>
</table>
</body>
</html>


donc elle devrais fonctionner aussi sur ce script. Non ?
Necnom
le 03/09/2007 à 09:21
Necnom
... Fais des remplacements si non, des parcels de codes qui fonctionnent sur le nouveau script, vers l'ancien ... tu trouveras sûrement le problème après ^^
Necnom :)
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours