Probléme pour generer un cvs
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.
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.
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 ?
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.
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 ?
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.
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?
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.
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 ?
... 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 :)
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: