8768 sujets

Développement web côté serveur, CMS

Bonjour , j'ai un code qui permet d'exécuter plusieurs traitements à la fois (snmp, stockage dans la bd...) tout marche très bien sauf dans une partie ou j'ai un problème que je n'arrive pas à résoudre .ma table contient les champs suivants : un id , une date (datetime) , une clé étrangère (id_interface) , un etat d'une interface (up...), etat du trafic (normal , anormal..) et valeur est un entier contenant une valeur d'une bande passante.Le code que j'ai copié parcourt la table , et compare la valeur actuelle à celles des 7 derniers jours si elle est anormale il affiche une seule ligne (la premiére partie du script le premier if) sinon (le else il affiche toujours une seule ligne mais avec une couleur différente) le problème c'est qu'avec le if tout va bien mais avec le else le nombre de lignes affichées et égal à celui du résultat du while Voici mon code :

$result4 = mysql_query("SELECT valeur, HOUR(date)as heure, MINUTE(date) as minute, etat_trafic, logs_trafic.id_interface, date FROM logs_trafic WHERE logs_trafic.id_interface = '$ligne[6]' AND date BETWEEN date(now() - INTERVAL 7 DAY) AND now()");
 while ($ligne1 = mysql_fetch_array($result4)) {
 if (($date1 == $ligne1[1]) && ($date2 == $ligne1[2]) && ($ligne1[3] == 'normal') )
 {
 if ((($d > $ligne1[0] + $vcomparaison) || ($d < $ligne1[0] - $vcomparaison)))
 {
 
 echo "<tr style='font-size:small;padding:5px;vertical-align:top;#000000;background-color:#FFFFFF';color:black;><td><b>$ligne[2] <font color=\"chartreuse\">$e</font> </b></td><td style='font-size:small;padding:5px;vertical-align:top;#000000;border-right: 1px solid black;background-color:#FFFFFF';color:black;></td><td><font color=\"red\">$d</font> Mo/s</b></td></tr></br>";
 
$result8 = mysql_query("INSERT INTO logs_trafic (id_logs, date, id_interface, etat_interface, etat_trafic, valeur) VALUES ('', '$date', '$ligne[6]', 'Up', 'anormal', '$d')");
 }
 }
 else if (($date1 != $ligne1[1]) AND ($date2 != $ligne1[2]))
 {
   echo "<tr style='font-size:small;padding:5px;vertical-align:top;#000000;background-color:#FFFFFF';color:black;><td><b>$ligne[2] <font color=\"chartreuse\">$e</font> </b></td><td style='font-size:small;padding:5px;vertical-align:top;#000000;border-right: 1px solid black;background-color:#FFFFFF';color:black;></td><td><font color=\"chartreuse\">$d</font> Mo/s</b></td></tr></br>";
$result7 = mysql_query("INSERT INTO logs_trafic (id_logs, date, id_interface, etat_interface, etat_trafic, valeur) VALUES ('', '$date', '$ligne[6]', 'Up', 'normal', '$d')");
 
 }
}

quelques pattern pour les boucles avec test (suis pas certaine d'avoir compris exactement ce que tu veux, donc tu prends ce qui te convient) :

-> test est vrai : ça affiche une ligne à chaque tour
-> test est faux : ça affiche une ligne à chaque tour
while(/*la boucle*/)
{
     if(test){ /*le code si c'est bon*/}
     else { /*le code si c'est pas bon*/ }
}


---------------------------

-> si un seul test est vrai : ça n'affiche rien
-> si le test est faux : ça affiche une ligne à chaque tour

while(/*la boucle*/)
{
     if(!test){/*le code si c'est pas bon*/}
}


-----------

-> si le test est vrai : ça affiche une ligne à chaque tour
-> si le test est faux : ça n'affiche rien

while(/*la boucle*/)
{
     if(test){/*le code si c'est pas bon*/}
}


-----------

-> si au moins un test est vrai : ça affiche une ligne au final
-> sinon : ça n'affiche rien


$ok=false;
while(/*la boucle*/)
{
     if(test){$ok=true;}
}
if($ok)
{ /*code si c'est vrai*/
}


-----------
-> si au moins un test est faux : ça affiche une ligne au final
-> sinon : ça n'affiche rien

$nok=false;
while(/*la boucle*/)
{
     if(!test){$nok=true;}
}
if($nok)
{ /*code si c'est vrai*/
}


-----------
-> si tous les test sont vrai : on affiche un truc
-> sinon on affiche autre chose

$nok=false;
while(/*la boucle*/)
{
     if(!test){$nok=true;}
}
if(!$nok)
{/*code si tous les tests sont vrais*/}
else
{ /*autre chose*/
}

-----------
-> si tous les test sont vrai : on affiche un truc
-> si tous les test sont faux : on affiche un autre truc
-> sinon on affiche un troisième truc

$nok=false;$ok=false;
while(/*la boucle*/)
{
     if(test){$ok=true;}
     if(!test){$nok=true;}
}
if(!$nok)
{/*code si tous les tests sont vrais*/}
elseif(!$ok)
{/*code si tous les tests sont faux*/}
else
{ /*autre chose*/
}

-----------
-> si au moins un test est vrai : ça affiche une ligne au final
-> si au moins un test2 est vrai : ça affiche une autre ligne au final

$ok2=false;$ok=false;
while(/*la boucle*/)
{
     if(test){$ok=true;}
     elseif(test2){$ok2=true;}
}
if($ok)
{/*code si tous les tests sont vrais*/}
if($ok2)
{ /*autre chose*/
}


-----------
-> si le test est vrai : ça affiche une ligne à chaque passage
-> si au moins un test est faux : ça affiche une ligne au final

$nok=false;
while(/*la boucle*/)
{
     if(test){/*code à chaque passage*/}
     else{$nok=true;}
}
if($nok)
{ /*le truc à faire si au moins un test est faux*/
}




J'suis pas certaines, mais je pense avoir fait le tour des possibilités de base Smiley murf
Modifié par Lothindil (16 Jun 2014 - 13:17)