Vous n'êtes pas identifié(e).
Salut a tous,
j'ai un petit soucis avec mon code. J'essaie d'afficher sur plusieurs colonne (une colonne par date) l'historique de l'état de serveurs. L'affichage marche à peut prêt sauf que si au cours de la semaine le nombre de serveurs change, le tableau ne sera plus exact car il y aura un décalage entre le nom du serveur et son état.
En effet jour j le tableau devrait ressembler à ca
Serveur etat_j1
serveur1 ok
serveur3 ko
serveur4 ko
au jour j+1 on ajoute le serveur2 et on obtient
Serveur etat_j1 etat_j2
serveur1 ok ok
serveur2 ko ok
serveur3 ko ko
serveur4 ok
On constate que l'on perd l'information du serveur4 et que tout est décalé au niveau des lignes donc qu'aucune information n'est correcte...
Avez-vous une idée ?
[code php]
<div align="left">
<?php
function week2date ($numSemaine, $annee) {
//-- les paramètres ------------
$timeStampPremierJanvier = strtotime($annee . '-01-01');
$jourPremierJanvier = date('w', $timeStampPremierJanvier);
//-- recherche du N° de semaine du 1er janvier -------------------
$numSemainePremierJanvier = date('W', $timeStampPremierJanvier);
//-- nombre à ajouter en fonction du numéro précédent ------------
$decallage = ($numSemainePremierJanvier == 1) ? $numSemaine - 1 : $numSemaine;
//-- timestamp du jour dans la semaine recherchée ----------------
$timeStampDate = strtotime('+' . $decallage . ' weeks', $timeStampPremierJanvier);
//-- recherche du lundi de la semaine en fonction de la ligne précédente ---------
$jourDebutSemaine = ($jourPremierJanvier == 1) ? date('d-m-Y', $timeStampDate) : date('Y-m-d', strtotime('last monday', $timeStampDate));
return $jourDebutSemaine;
}
function affiche_journee ($date_journee) //Fonction permetant d'afficher l'état du serveur à la date $date_journee
{
$rouge = "#FF0000";
$vert = "#66FF00";
$date = date("'Y-m-d'");
$m=date('m');
$d=date('d');
$Y=date('Y');
$date_requete = mktime(0, 0, 0, $m, $d, $Y);
if ( isset($_GET['ORDER']) )
{
$ORDER = $_GET['ORDER'];
}
else
{
$ORDER = "ID_ETAT";
}
if ( isset($_GET['ORDRE']) )
{
$ORDRE = "DESC";
}
else
{
$ORDRE = "ASC";
}
$db = mysql_connect('', '', '');
mysql_select_db('windows',$db);
$sql_etat = "SELECT NOM_SERVEUR, DATE_ETAT, JOURNAL, SERVICES FROM serveurs , etat_serveur
WHERE ETAT_SERVEUR.ID_SERVEUR = SERVEURS.ID_SERVEUR
AND ETAT_SERVEUR.DATE_ETAT = $date_journee" //>= $date_requete_lundi
." ORDER BY $ORDER $ORDRE ;";
$sql_date = "SELECT DATE_ETAT FROM etat_serveur
WHERE UNIX_TIMESTAMP(DATE_ETAT) = $date_requete" //BETWEEN $date_requete_lundi AND $date_requete_vendredi
." GROUP BY DATE_ETAT;";
$req_etat = mysql_query($sql_etat) or die('Erreur SQL !'.$sql_etat.''.mysql_error());
while ( $data = mysql_fetch_array( $req_etat ) )
{
$journal = $data['JOURNAL'];
$service = $data['SERVICES'];
if ( $journal == "ok" )
{
$bgcolor="$vert";
$print="ok";
}
else
{
$bgcolor="$rouge";
$print="ko";
} ?>
<tr>
<td align="center" width="20%" bgcolor="<?php echo $bgcolor; ?>">
<a href="#" title="<?php echo $journal; ?>" style="text-decoration:none; link color=black"><?php echo $print; ?></a>
</td>
<?php
if ( $service == "ok" )
{
$bgcolor="$vert";
$print="ok";
}
else
{
$bgcolor="$rouge";
$print="ko";
} ?>
<td align="center" width="20%" bgcolor="<?php echo $bgcolor; ?>">
<a href="#" title="<?php echo $service; ?>" style="text-decoration:none; link color=black"><?php echo $print; ?></a>
</td>
</tr>
<?php
}
}
function affiche_serveurs () //fonction permettant d'afficher la liste des serveurs
{
if ( isset($_GET['ORDER']) )
{
$ORDER = $_GET['ORDER'];
}
else
{
$ORDER = "ID_ETAT";
}
if ( isset($_GET['ORDRE']) )
{
$ORDRE = "DESC";
}
else
{
$ORDRE = "ASC";
}
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('windows',$db);
$sql_serveurs = "SELECT NOM_SERVEUR FROM serveurs , etat_serveur
WHERE ETAT_SERVEUR.ID_SERVEUR = SERVEURS.ID_SERVEUR
GROUP BY NOM_SERVEUR
ORDER BY $ORDER $ORDRE ;";
$req_serveurs = mysql_query($sql_serveurs) or die('Erreur SQL !'.$sql_etat.''.mysql_error());
$i=0;
while ( $data = mysql_fetch_array( $req_serveurs ) )
{
$serveur = $data['NOM_SERVEUR'];
if ($i%2 != 0)
{
$bgcolor="#123abcd";
}
else
{
$bgcolor="#823abcd";
}
?>
<tr bgcolor="<?php echo $bgcolor; ?>">
<td align="center">
<?php echo "$serveur"; ?>
</td>
</tr><?php
$i++;
}
}
if ( !isset($_GET['date_requete_lundi'] ))
{
$date_lundi = week2date(date('W'),date('Y'));
$tab = explode("-",$date_lundi);
$annee = $tab[0];
$mois = $tab[1];
$jour = $tab[2];
$date_requete_lundi = mktime(0, 0, 0, $mois, $jour, $annee);
}
?>
<table border="1">
<tr>
<td>
<table border="1" width="80"> <!-- Tableau qui contient le nom de tous les serveurs !-->
<tr>
<td>
.
</td>
</tr>
<tr>
<td>
Serveurs
</td>
</tr>
<?php affiche_serveurs(); ?>
</table>
</td>
<td valign="top"><?php
for ( $i = 0; $i < 5; $i++ )
{ ?>
<td valign="top">
<table border="1" valign="top"> <!-- Tableau qui contient les infos pour chaque journee !-->
<tr>
<td colspan="2">
<?php echo 'toto' ?> <!--affiche_date($date_journee); ?> !-->
</td>
</tr>
<tr>
<td>
Services
</td>
<td>
Journal
</td>
</tr>
<?php
//Partie qui permet de calculer la date du lendemain (du lundi au vendredi de la semaine choisie)
$date_journee = mktime(0,0,0,substr($date_lundi,5,2),substr($date_lundi,8,2)+$i,substr($date_lundi,0,4));
$date_requete_journee = $date_journee;
$date_journee = date("Y-m-d",$date_journee);
$date_journee = "'$date_journee'"; ?>
<?php affiche_journee($date_journee); ?>
</table>
</td><?php
}
?>
</td>
</tr>
</table>
<?php
mysql_close();
?>
</div>
[/code]
D'avance merci de votre aide
Dernière modification par Cyrilpop (13-01-2010 12:07:20)
Hors ligne
Je m'en suis finalement sorti en faisant du ligne à ligne... Mais le nombre de requête n'est pas terrible, une requête par table ce n'est pas génial... Voici le code
[code php]
<div align="left">
<?php
//Définition des variables utilisées dans la page
//La variable ORDER correspond au champs utilisé par le tri des requètes
if ( isset($_GET['ORDER']) )
{
$ORDER = $_GET['ORDER'];
}
else
{
$ORDER = "ID_ETAT";
}
//La variable ORDRE correspond à l'ordre de tri : ASC ou DESC
if ( isset($_GET['ORDRE']) )
{
$ORDRE = "DESC";
}
else
{
$ORDRE = "ASC";
}
//La variable date_lundi permet de savoir quelle est la date du lundi de la semaine en cours
if ( !isset($_GET['date_requete_lundi'] ))
{
$date_lundi = week2date(date('W'),date('Y'));
$tab = explode("-",$date_lundi);
$annee = $tab[0];
$mois = $tab[1];
$jour = $tab[2];
$date_requete_lundi = mktime(0, 0, 0, $mois, $jour, $annee);
}
$db = mysql_connect('', '', '');
mysql_select_db('',$db);
//$req_serveurs = mysql_query($sql_serveurs) or die('Erreur SQL !'.$sql_serveurs.''.mysql_error());
function affiche_date($date_journee)
{
//Requète qui récupère la date des différents etats des serveurs
$sql_date = "SELECT DATE_ETAT FROM etat_serveur
WHERE UNIX_TIMESTAMP(DATE_ETAT) = $date_journee" //BETWEEN $date_requete_lundi AND $date_requete_vendredi
." GROUP BY DATE_ETAT;";
?>
<td colspan="2" align="center"><?php
$req_date = mysql_query($sql_date) or die('Erreur SQL !'.$sql_date.''.mysql_error());
while ( $data = mysql_fetch_array( $req_date ) )
{
echo $data['DATE_ETAT'];
}?>
</td>
<?php
}
function affiche_titre($date_journee)
{
//Requète qui récupère la date des différents etats des serveurs
$sql_date = "SELECT DATE_ETAT FROM etat_serveur
WHERE UNIX_TIMESTAMP(DATE_ETAT) = $date_journee" //BETWEEN $date_requete_lundi AND $date_requete_vendredi
." GROUP BY DATE_ETAT;";
$req_date = mysql_query($sql_date) or die('Erreur SQL !'.$sql_date.''.mysql_error());
while ( $data = mysql_fetch_array( $req_date ) )
{ ?>
<td align="center">
Service
</td>
<td align="center">
Journal
</td><?php
}
}
function affiche_ligne ($id_serveur, $date_journee)
{
// Définition des couleurs utilisé dans le tableau
$rouge = "#FF0000";
$vert = "#66FF00";
$sql_etat_serveur = "SELECT JOURNAL, SERVICES FROM serveurs , etat_serveur
WHERE ETAT_SERVEUR.ID_SERVEUR = SERVEURS.ID_SERVEUR
AND ETAT_SERVEUR.ID_SERVEUR = $id_serveur
AND ETAT_SERVEUR.DATE_ETAT = $date_journee;";
$req_etat_serveur = mysql_query($sql_etat_serveur) or die('Erreur SQL !'.$sql_etat_serveur.''.mysql_error());
if (mysql_num_rows($req_etat_serveur) == 0)
{
?><td align="center" colspan="2">N/A</td><?php
}
while ( $data = mysql_fetch_array( $req_etat_serveur ) )
{
$journal = $data['JOURNAL'];
$service = $data['SERVICES'];
if ( $service == "ok" )
{
$bgcolor="$vert";
$print="ok";
}
else
{
$bgcolor="$rouge";
$print="ko";
} ?>
<td align="center" width="50" bgcolor="<?php echo $bgcolor; ?>"><?php
if ( $print == "ok" )
{
echo "ok";
}
else
{
?><a href="#" title="<?php echo $service; ?>" style="text-decoration:none; link color=black"><?php echo $print; ?></a><?php
} ?>
</td><?php
if ( $journal == "ok" )
{
$bgcolor="$vert";
$print="ok";
}
else
{
$bgcolor="$rouge";
$print="ko";
} ?>
<td align="center" width="50" bgcolor="<?php echo $bgcolor; ?>"><?php
if ( $print == "ok" )
{
echo "ok";
}
else
{
?><a href="#" title="<?php echo $journal; ?>" style="text-decoration:none; link color=black"><?php echo $print; ?></a><?php
} ?>
</td><?php
}
}
?>
<table border="1">
<tr>
<td rowspan="2" align="center">
Serveur
</td>
<!-- Ligne qui correspond à l'affichage de la date. Il y a une colone par date qu'on récupère par SQL !-->
<!-- On appelle la fonction qui va appeler la date !-->
<?php
for ( $i = 0; $i < 5; $i++ )
{
//Partie qui permet de calculer la date du lendemain (du lundi au vendredi de la semaine choisie)
$date_journee = mktime(0,0,0,substr($date_lundi,5,2),substr($date_lundi,8,2)+$i,substr($date_lundi,0,4));
$date_requete_journee = $date_journee;
$date_journee = date("Y-m-d",$date_journee);
$date_journee = "'$date_journee'";
affiche_date($date_requete_journee);
} ?>
</tr>
<tr>
<?php
for ( $i = 0; $i < 5; $i++ )
{
//Partie qui permet de calculer la date du lendemain (du lundi au vendredi de la semaine choisie)
$date_journee = mktime(0,0,0,substr($date_lundi,5,2),substr($date_lundi,8,2)+$i,substr($date_lundi,0,4));
$date_requete_journee = $date_journee;
$date_journee = date("Y-m-d",$date_journee);
$date_journee = "'$date_journee'"; ?>
<?php
affiche_titre($date_requete_journee);
} ?>
</tr>
<?php
//Requète qui l'ID des serveurs
$sql_serveurs = "SELECT SERVEURS.ID_SERVEUR, NOM_SERVEUR FROM serveurs;";
$req_serveurs = mysql_query($sql_serveurs) or die('Erreur SQL !'.$sql_serveurs.''.mysql_error());
$c=0;
while ( $data = mysql_fetch_array( $req_serveurs ) )
{
?>
<tr><?php
$id_serveur = $data['ID_SERVEUR'];
$serveur = $data['NOM_SERVEUR'];
if ($c%2 != 0)
{
$bgcolor="#123abcd";
}
else
{
$bgcolor="#823abcd";
} ?>
<td bgcolor="<?php echo $bgcolor; ?>"><?php
echo $serveur; ?>
</td><?php
$max_day = date('N');
for ( $i = 0; $i < $max_day; $i++ )
{
//Partie qui permet de calculer la date du lendemain (du lundi au vendredi de la semaine choisie)
$date_journee = mktime(0,0,0,substr($date_lundi,5,2),substr($date_lundi,8,2)+$i,substr($date_lundi,0,4));
$date_requete_journee = $date_journee;
$date_journee = date("Y-m-d",$date_journee);
$date_journee = "'$date_journee'";
affiche_ligne($id_serveur, $date_journee);
}
?>
</tr><?php
$c++;
} ?>
</table>
[/code]
Si quelqu'un a une idée pour optimiser le tout, je suis preneur
Hors ligne
>>Si quelqu'un a une idée pour optimiser le tout, je suis preneur
moi, je te propose une gomme
une poubelle, ce serai encore mieux
a++
Hors ligne
>>Si quelqu'un a une idée pour optimiser le tout, je suis preneur
moi, je te propose une gomme
une poubelle, ce serai encore mieux
a++
C'est intelligent ca...
Je ne suis pas expert en php/mysql (ca se voit surement) mais je suppose qu'il fortement possible d'optimiser le code de la page...
Donc si la solution est autre que tout détruire je suis preneur. Sinon passez votre chemin
Hors ligne
>>C'est intelligent ca...
a mon image :D
>>Je ne suis pas expert en php/mysql (ca se voit surement) mais je suppose qu'il fortement possible d'optimiser le code de la page...
toutes les affirmations de cette phrase sont exactes
>>Donc si la solution est autre que tout détruire je suis preneur
et bien, prends
a++
Hors ligne
Ta requête de base était correcte. Et tu récupérais le nom du serveur.
Sachant que si tu ordonnes ton tableau en fonction de l'ordre dans lequel tu devrais l'afficher tu n'as plus qu'à parcourir ainsi :
Hors ligne
Saluton,
Honnêtement, je n'ai pas le temps de me pencher sur ton script, mais le ton narquois de Pierrot me laisse augurer qu'il doit comporter une énormité genre ne pas utiliser une possibilité de jointure relationnelle en SQL.
Promis je regarde ça tiu finsemajno
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Ta requête de base était correcte. Et tu récupérais le nom du serveur.
Sachant que si tu ordonnes ton tableau en fonction de l'ordre dans lequel tu devrais l'afficher tu n'as plus qu'à parcourir ainsi :tableau_serveur = {serveur1,serveur2,serveur3,serveur4}
j = 0
Pour toutes les valeurs du tableau_sql : i
Si tableau_sql[i][nom_serveur] = tableau[j] alors
afficher tableau_sql[i][etat]
i++
Sinon
afficher "offline"
Fin Si
j++
Fin Pour
pas bête l'idée de mettre le retour de la requête sql dans un tableau php, j'avoue que je n'y avais pas pensé... Je vais me pencher la dessus Merci pour ce coup de pouce (aie ca fait mal un coup... Quoi que avec le pouce ca va )
Dès que j'ai eu le temps d'optimiser ca, je repasse par ici pour donner le code... Ca pourra toujours servir pour les suivants
Hors ligne
>>mais le ton narquois de Pierrot
je suis narquoi moaaaaaa ????
tous est fesable dans une requète
même le calcul des dates
par exemple ça :
//Partie qui permet de calculer la date du lendemain (du lundi au vendredi de la semaine choisie)
$date_journee = mktime(0,0,0,substr($date_lundi,5,2),substr($date_lundi,8,2)+$i,substr($date_lundi,0,4));
$date_requete_journee = $date_journee;
$date_journee = date("Y-m-d",$date_journee);
$date_journee = "'$date_journee'";
affiche_date($date_requete_journee);
quand je lis ça, ça me fais penser à :
pourquoi faire simple quand on peut faire compliqué :D
a++
Hors ligne