PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : MySQL, PostgreSQL, etc... » Ordonner un tableau » 10-03-2010 10:45:56

Bon des fois je me demande comment je raisonne.... J'ai trouvé beaucoup plus simple....
[codephp]
<table border="1">
<tr><td><b>Type</b></td><td><b>Nombre</b></td><td><b>Temps Min</b></td><td><b>Temps max</b></td><td><b>Temp moyen</b></td></tr>
<?php
$sql_rapport = "SELECT type_csd, count(*), min(duree_csd), max(duree_csd), avg(duree_csd) from csd
                GROUP BY TYPE_CSD
                ORDER BY count(*) DESC;";
$req_rapport = mysql_query($sql_rapport) or die ('Erreur SQL !'.$sql_rapport.''.mysql_error());
while ( $data = mysql_fetch_array( $req_rapport ) )
{
   
    $type_csd = $data['type_csd'];
    $nb_csd = $data['count(*)'];
    $duree_max = $data['max(duree_csd)'];
    $duree_min = $data['min(duree_csd)'];
    $duree_moy = sprintf('%.2f',$data['avg(duree_csd)']);
    print '<tr><td><b>'.$type_csd.'</b></td><td>'.$nb_csd.'</td><td>'.$duree_min.'</td><td>'.$duree_max.'</td><td align="right">'.$duree_moy.'</td></tr>';
}
$sql_count = "SELECT type_csd, count(*), min(duree_csd), max(duree_csd), avg(duree_csd) from csd";
$req_count = mysql_query($sql_count) or die('Erreur SQL !'.$sql_count.''.mysql_error());
while ( $data = mysql_fetch_array( $req_count ) )
{
    $nb_csd = $data['count(*)'];
    $duree_max = $data['max(duree_csd)'];
    $duree_min = $data['min(duree_csd)'];
    $duree_moy = sprintf('%.2f',$data['avg(duree_csd)']);
    print '<tr><td><b>Total</b></td><td>'.$nb_csd.'</td><td>'.$duree_min.'</td><td>'.$duree_max.'</td><td align="right">'.$duree_moy.'</td></tr>';
}
mysql_close();
?>
</table>
[/code]

#2 MySQL, PostgreSQL, etc... » Ordonner un tableau » 10-03-2010 10:45:56

Cyrilpop
Réponses : 1

Salut à tous,


j'aimerai ordonner un peu mon tableau... Il faudrait que je puisse classer mon tableau par le nombre croissant de type mais je n'y parviens pas... Si vous voyez une astuce.....

[code php]
<table border="1">
<tr><td><b>Type</b></td><td><b>Nombre</b></td><td><b>Temps Min</b></td><td><b>Temps max</b></td><td><b>Temp moyen</b></td></tr>
<?php
$sql_type = "SELECT type_csd from csd
                GROUP BY TYPE_CSD;";
$req_type = mysql_query($sql_type) or die ('Erreur SQL !'.$sql_type.''.mysql_error());
while ( $data = mysql_fetch_array( $req_type ) )
{
    ?><tr><td><?php
    $type_csd = $data['type_csd'];
    print '<b>'.$type_csd.'</b>';
    ?></td><td><?php
    $sql_count_type = " SELECT count(*) FROM CSD
                        WHERE TYPE_CSD='$type_csd'
                        ORDER BY count(*) DESC";
    $req_count_type = mysql_query($sql_count_type) or die ('Erreur SQL !'.$sql_count_type.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_count_type) )
    {
        $nb_type = $data[0];
        echo "$nb_type ";
    }
    ?></td><td><?php
    $sql_min = "SELECT MIN( `DUREE_CSD` )
                    FROM csd
                    WHERE TYPE_CSD = '$type_csd';";
    $req_min = mysql_query($sql_min) or die ('Erreur SQL !'.$sql_min.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_min) )
    {
        $nb_type = $data[0];
        echo "$nb_type "; ?> </td>
        </td><?php
    }
    ?></td><td><?php
    $sql_max = "SELECT MAX( `DUREE_CSD` )
                    FROM csd
                    WHERE TYPE_CSD = '$type_csd';";
    $req_max = mysql_query($sql_max) or die ('Erreur SQL !'.$sql_max.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_max) )
    {
        $nb_type = $data[0];
        echo "$nb_type "; ?> </td>
        </td><?php
    }
    ?></td><td align="right"><?php
    $sql_moy = "SELECT AVG( `DUREE_CSD` )
                    FROM csd
                    WHERE TYPE_CSD = '$type_csd';";
    $req_moy = mysql_query($sql_moy) or die ('Erreur SQL !'.$sql_moy.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_moy) )
    {
        $nb_type = sprintf('%.2f',$data[0]);
        echo "$nb_type "; ?> </td>
        </td></tr><?php
    }
   
}
$sql_count = "SELECT count(*) FROM CSD";
$req_count = mysql_query($sql_count) or die('Erreur SQL !'.$sql_count.''.mysql_error());
while ( $data = mysql_fetch_array( $req_count ) )
{
    $nb_total = $data[0];
} ?>
<tr>
    <td><b>Total</b></td>
    <td><?php echo $nb_total;
    ?></td><td><?php
    $sql_min = "SELECT MIN( `DUREE_CSD` )
                    FROM csd;";
    $req_min = mysql_query($sql_min) or die ('Erreur SQL !'.$sql_min.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_min) )
    {
        $nb_type = $data[0];
        echo "$nb_type "; ?> </td>
        </td><?php
    }
    ?></td><td><?php
    $sql_max = "SELECT MAX( `DUREE_CSD` )
                    FROM csd;";
    $req_max = mysql_query($sql_max) or die ('Erreur SQL !'.$sql_max.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_max) )
    {
        $nb_type = $data[0];
        echo "$nb_type "; ?> </td>
        </td><?php
    }
    ?></td><td align="right"><?php
    $sql_moy = "SELECT AVG( `DUREE_CSD` )
                    FROM csd;";
    $req_moy = mysql_query($sql_moy) or die ('Erreur SQL !'.$sql_moy.''.mysql_error());
    while ( $data = mysql_fetch_array( $req_moy) )
    {
        $nb_type = sprintf('%.2f',$data[0]);
        echo "$nb_type "; ?></td><?php
    }
mysql_close();
?>
</tr>
</table>
[/code]



Merci pour tout smile

#3 Re : Javascript » Formilaire avec nombre de champs variable » 02-02-2010 10:44:26

Nickel, ca marche smile

Merci bcp pour ce coup de pouce smile
Bonne journée

#4 Re : Javascript » Formilaire avec nombre de champs variable » 02-02-2010 10:44:26

J'avoue que là j'ai du mal, j'ai bien vu e enregistrant sou la page au format html et en regardant le code source que les span et les td étaient fermés n'importe comment, mais là j'ai du mal avec le java pour bien placer mes fins de balise, j'ai essayé de le mettre partout (avant ouverture de td) mais ca ne fonctionne pas.

J'ai bien besoin de ton oeil ecaliré smile

#6 Javascript » Formilaire avec nombre de champs variable » 02-02-2010 10:44:26

Cyrilpop
Réponses : 6

Salut à tous,


j'essaie tant bien que mal de faire un formulaire dynamique avec un nombre de champs variable.
Je m'explique, je gère plusieurs serveurs et je souhaite faire un suivi des mise à jour Windows faites dessus. Pour cela j'ai fait un formulaire qui me permet de mettre à jour la base mysql pour une muse à jour. Mais le plus souvent il y a plusieurs mises à jour par serveur. J'aimerai donc mettre un bouton qui me permet d'ajouter un champs dans mon formulaire.

En cherchant sur le net j'ai pu trouver et adapter du java script (que je ne connais absolument pas) pour mon formulaire. Mais le soucis, est que la présentation est vraiment plus que laissant à désirer : la ligne de mon tableau n'est pas droite (même en ajoutant des valign="top").

Ma question est donc est ce que quelqu'un peu m'apporter un coup de main pour corriger ce bout de code...

[code java]
<html>
<head>
<title>Document sans nom</title>
<script language="javascript">
<!--
function create_champ(i)
{
var i2 = i + 1;

document.getElementById('input_'+i).innerHTML = '<td valign="top">KB<input type="text" name="KB_'+i+'" size="8" maxlength="6"></td>';
document.getElementById('input_'+i).innerHTML += (i < 5) ? '<td><span id="input_'+i2+'"><input type="button" onClick="javascript:create_champ('+i2+')" value="+"></span></td>' : '';
}
-->
</script>
</head>
<body>


<form method="post" action="/pages/verif_ajout_update.php">
<?php
$i="1";
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('windows',$db);
$sql = "SELECT NOM_SERVEUR, ID_SERVEUR FROM serveurs ORDER BY NOM_SERVEUR ASC ;";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
$nbl = mysql_num_rows($req);
?>
<table border="0" valign="top">
<tr valign="top">
    <td valign="top">
        Serveur : <SELECT name="id_serveur">
        <OPTION VALUE="">Choisissez le serveur...</OPTION>
        <?php
        while ( $data = mysql_fetch_array( $req ) )
        {
            $serveur = $data['NOM_SERVEUR'];
            $id_serveur = $data ['ID_SERVEUR'];
            ?>   
            <OPTION VALUE="<?php echo $id_serveur; ?>"><?php echo $serveur; ?></OPTION>
            <?php
        } ?>
        </SELECT>
    </td>
    <td>
         KB<INPUT value="" type="text" name="KB_1" size="8" maxlength="6">
    </td>
    <td>
        <span id="input_2">
            <input name="button" type="button" onClick="javascript:create_champ(2)" value="+">
        </span>
    </td>
    <td>
        Reboot : <INPUT type="radio" name="reboot_<?php echo $i; ?> value="oui">Oui  <INPUT type="radio" name="reboot_<?php echo $i; ?> value="non" checked>Non
    </td>
</tr>
</table>
<input type="hidden" name="nb_entrees" value="<?php echo $i;?>">
<input type="submit" value="Envoyer">
</form></body></html>
[/code]

Encore merci par avance pour votre précieuse aide smile


PS, je ne sais pas si le soucis vient du java (mais je le suspecte quand même) donc j'ai posté ici, mais si ce n'est pas le bon endroit, il ne faut pas hésiter à le déplacer wink

[Edit] Le problème de mise en page n'apparait qu'avec FF
Avec IE les lignes sont bien respectées...

#7 Re : Forum Général PHP » Formulaire dynamique avec bouton radio » 01-02-2010 14:19:35

On est vraiment nuls, je viens de voir l'erreur en regardant la source de la page créée... Il manquait l'incrément de ma variable $i.... Quelle erreur bête :s

#8 Re : Forum Général PHP » organisation base de donnée » 02-02-2010 12:07:44

Bon désolé pour tout ce retard, mais j'étais plus au tafn donc plus derrière mon pc..


Pour le coup de numéroter les jours de la semaine, c'est bien vu ça fait gagner un peu de place dans la table semaine...
Imaginons Juliette DUPONT c'est la première personne que tu as entré dans la base elle a donc l'ID 1.
Elle est disponible les mercredi PM, samedi AM et PM et dimanche AM et PM.
Elle t'as prévenu qu'elle est en vacance du 10/02/2010 au 17/02/2010.
Nous sommes le dimanche 31/01/2010,
Tu interroges ta base ce qui donne.
Juliette est bien disponible le dimanche matin et après midi. Le 31/01/2010 n'est pas entre le 3/02/2010 et le 10/02/2010. Elle est donc effectivement disponible aujourd'hui.

Pour les critères supplémentaires c'est le même principe, je te conseille de faire une table pour les critères, une table pour les formations. En fait à chaque fois que tu veux une information récurrente et qui se répète plusieurs fois, je te conseille de l'extraire dans une table, ca fait un gain de place dans la base wink


Bon courage ^^

#9 Re : Forum Général PHP » organisation base de donnée » 02-02-2010 12:07:44

Voici la structure SQL que j'ai pu faire via mysql:
[code sql]


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `asso`
--

--
-- Structure de la table `benevole`
--

CREATE TABLE IF NOT EXISTS `benevole` (
  `id_benevole` int(11) NOT NULL AUTO_INCREMENT,
  `nom_benevole` varchar(20) NOT NULL,
  `prenom_benevole` varchar(30) NOT NULL,
  PRIMARY KEY (`id_benevole`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Structure de la table `disponibilite`
--

CREATE TABLE IF NOT EXISTS `disponibilite` (
  `id_disponibilite` int(11) NOT NULL AUTO_INCREMENT,
  `disponibilite` varchar(3) NOT NULL,
  `id_benevole` int(11) NOT NULL,
  `id_jour` int(11) NOT NULL,
  PRIMARY KEY (`id_disponibilite`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



--
-- Structure de la table `jour_semaine`
--

CREATE TABLE IF NOT EXISTS `jour_semaine` (
  `id_jour` int(11) NOT NULL AUTO_INCREMENT,
  `jour` varchar(15) NOT NULL,
  PRIMARY KEY (`id_jour`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Structure de la table `vacances`
--

CREATE TABLE IF NOT EXISTS `vacances` (
  `id_vacances` int(11) NOT NULL AUTO_INCREMENT,
  `debut_vacances` date NOT NULL,
  `fin_vacances` date NOT NULL,
  `id_benevole` int(11) NOT NULL,
  PRIMARY KEY (`id_vacances`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

[/code]

#10 Re : Forum Général PHP » Formulaire dynamique avec bouton radio » 01-02-2010 14:19:35

Ca ne marche pas mieux. Comme j'ai une 50aines d'entrée, je ne peux répondre qu'une fois pour tous les serveurs. Il y a environs 100 boutons radio à l'ecran et au lieu d'en cocher 50 (un par serveur) je ne peux toujours qu'en cocher 1...

#11 Re : Forum Général PHP » organisation base de donnée » 02-02-2010 12:07:44

Le problème de la condition vacances scolaires est que c'est une colonne variable. Si tu ne veux pas faire 50 changements de table, le mieux je pense est de faire une autre table vacances(ID_vacances, debut vacances, fin vacances, ID_bénévole) dans laquelle tu entres les congés des différents bénévoles.
Quand tu veux faire un planning tu joins les différentes tables et tu fais le test si le bénévole est en vacances à laquelle tu veux le planifier. S'il n'est pas dans la table vacances à la date voulue, c'est qu'il est disponible (bien sur s'il y a oui pour la table disponibilité le concernant).

#12 Re : Forum Général PHP » organisation base de donnée » 02-02-2010 12:07:44

Ce que tu peux faire c'est une table pour rentrer tous les bénévoles,
une table pour la disponibilité,
une table pour le jour de la semaine.
Ca va limiter le nombre de colonnes comme ca.

Je te propose les structures des différentes tables

benevole(ID_benevole, nom_benevole, prenom_benevole)
disponibilite(ID_dispo, disponible, ID_benevole, ID_jour)
jour_semaine(ID_jour, jour)


Comme tu peux le voir, il y a des clés étrangères. Avec cette structure tu vas gagner énormément de place dans la base (en fonction du nombre de bénévoles...

#13 Forum Général PHP » Formulaire dynamique avec bouton radio » 01-02-2010 14:19:35

Cyrilpop
Réponses : 4

Bonjour à tous,


j'aimerai faire un formulaire dynamique avec un bouton radio.

Voici le code que j'ai commencé à faire :
[code php]
<html><body>
<form method="post" action="pages/verif_ajout_etat.php">
<ul>
<?php
$i="0";
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('windows',$db);
$sql = "SELECT NOM_SERVEUR, ID_SERVEUR FROM serveurs ORDER BY NOM_SERVEUR ASC ;";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
$nbl = mysql_num_rows($req);

while ( $data = mysql_fetch_array( $req ) )
    {
    $serveur = $data['NOM_SERVEUR'];
    $id_serveur = $data['ID_SERVEUR'];
    $i = $i++;
    ?>
    <INPUT type="hidden" name="id_serveur_<?php echo $i; ?>" size="1" value="<?php echo $id_serveur; ?>">
    <li><?php
        echo "$serveur"; ?> : KB
        <INPUT value="" type="text" name="KB1_<?php echo "$i"; ?>" size="6" maxlength="6"> KB
        <INPUT value="" type="text" name="KB2_<?php echo "$i"; ?>" size="6" maxlength="6"> Reboot : oui
        <INPUT TYPE="radio" value="oui" name="reboot_<?php echo "$i"; ?>">  non
        <INPUT type="radio" value="non" name="reboot_<?php echo "$i"; ?>" CHECKED>
        </li>
    <?php
    }
    ?>
<input type="hidden" name="nb_entrees" value="<?php echo $i;?>">
<input type="submit" value="Envoyer">
</form></body></html>
[/code]

Mon problème vient de la balise radio. En effet, je pose plusieurs fois la même question pour plusieurs serveurs. Mais le fait d'indexer le nom name de mon "input type=radio" ne suffit pas à lui faire comprendre que ce n'est pas la même question. J'ai une 50aine de serveur à prendre en compte et la balise radio ne me permet de répondre oui ou non pour un seul des serveurs alors que ce n'est pas censé être la même question.


Avez vous une idée de comment je peux m'en sortir ?


Merci de tous vos conseils smile

#14 Re : Forum Général PHP » Tableau complexe avec interrogation de base de données » 15-01-2010 15:23:47

xTG a écrit :

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 smile Merci pour ce coup de pouce (aie ca fait mal un coup... Quoi que avec le pouce ca va big_smile)
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 smile

#15 Re : Forum Général PHP » Comment récupérer la valeur d'une fonction ? » 14-01-2010 17:04:08

De rien, you're welcome ^^
Ca sert à ca aussi les sites d'entr'aide (pour une fois que je peux donner un coup de main wink)

#16 Re : Forum Général PHP » Tableau complexe avec interrogation de base de données » 15-01-2010 15:23:47

Pierrot a écrit :

>>Si quelqu'un a une idée pour optimiser le tout, je suis preneur

moi, je te propose une gomme wink

une poubelle, ce serai encore mieux wink

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 wink

#17 Re : Forum Général PHP » Comment récupérer la valeur d'une fonction ? » 14-01-2010 17:04:08

Salut,

quand définis ta fonction yu fais
[code php]
function nom_de_lafocntion($variable1, $variable_2...)
{
instructions;
return $valeur_a_retourner;
}
[/code]

Quant tu appelle ta fonction tu fais

[code php]
$variable = nom_de_lafocntion($variable1, $variable_2...);
[/code]

Voili voilou

#18 Re : Forum Général PHP » Tableau complexe avec interrogation de base de données » 15-01-2010 15:23:47

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 smile

#19 Forum Général PHP » Tableau complexe avec interrogation de base de données » 15-01-2010 15:23:47

Cyrilpop
Réponses : 9

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 smile

Pied de page des forums

Propulsé par FluxBB