[Résolu] Boucle For et condition if

Boucle For et condition if [Résolu] - PHP - Programmation

Marsh Posté le 21-04-2008 à 10:51:21    

Bonjour,
je realise un script qui énumere les differents port d'un routeur.  
 
je voudrais que la page affiche un message si le port est de type Fa0/i  (i allant de 1 a 49) et un autre message dans un autre cas .
 
Voila ce que j'ai fait mais cela m'affiche 49 ligne avec le meme resultat.

Code :
  1. <?php for ($i=1; $i<49; $i++) {
  2. $test = "Fa0/$i";
  3. if ($result_port=="$test" ) { ?>
  4. blabla... port : <font color="#FF0000"><?php echo "$result_port"; ?></font> ...blabla
  5.  
  6. <?php   
  7. }
  8. else { ?>
  9. blabla... port <font color="#FF0000"><?php echo "$result_port"; ?></font>
  10.  
  11. <?php }
  12. }
  13. ?>


 
merci de votre aide


Message édité par elmarokinho le 21-04-2008 à 14:18:19
Reply

Marsh Posté le 21-04-2008 à 10:51:21   

Reply

Marsh Posté le 21-04-2008 à 11:01:42    

En faisant comme ca, ca devrait être mieux :

 
Code :
  1. <?php
  2. for ($i=1; $i<49; $i++)
  3. {
  4. $test = 'Fa0/'.$i;
  5. if ($result_port == $test)
  6. {
  7.  print 'blabla...
  8.    port : <font color="#FF0000">'.$result_port.'</font>
  9.     ...blabla';
  10. }
  11. else
  12. {
  13.   print 'blabla...
  14.     port <font color="#FF0000">'.$result_port.'</font>
  15.     ';
  16. }
  17. }
  18. ?>


Message édité par babasss le 21-04-2008 à 11:02:38

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 21-04-2008 à 11:11:54    

oui merci j'avais déja penser a modifier cette partie :
 $test = 'Fa0/'.$i;  
 
mais j'ai toujours la meme erreur :(  ... pour info dans les if{} et else{} c'est du html mais ça ne change rien si je remplace par tout ce que tu m'a donné.
je ne sais pas d'ou ça viens.  
 
merci quand meme

Reply

Marsh Posté le 21-04-2008 à 11:13:17    

Réfléchis 5 secondes.
Tu fais une boucle de 1 à 48, et dans cette boucle quoi qu'il arrive tu affiches une ligne.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 11:19:14    

oui peut etre je m'y prend mal désolé ...
en fait je voudrais un truc comme sa :
si le port est de type Fa0/x :
" c'est un port fast-ethernet"
sinon " c'est un port d'interconnexion" ..
 
donc comme les num de port vont de 1 a 48, je pense qu'il faut testé pour chaque numéro.  
 
je me trompe?

Reply

Marsh Posté le 21-04-2008 à 11:35:35    

elmarokinho a écrit :

oui peut etre je m'y prend mal désolé ...
en fait je voudrais un truc comme sa :
si le port est de type Fa0/x :
" c'est un port fast-ethernet"
sinon " c'est un port d'interconnexion" ..
 
donc comme les num de port vont de 1 a 48, je pense qu'il faut testé pour chaque numéro.  
 
je me trompe?


 
oui, par contre il ne faut pas annoncer le résultat à chaque fois.
Là ce que tu fais, c'est tester chaque port, mais pour chacun de ces 48 ports tu annonces à l'utilisateur si c'est le bon ou pas.
Alors qu'il faudrait que tu testes les 48, et qu'une fois que tout est testé tu annonces le résultat de tes tests à l'utilisateur.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 11:37:24    

oui c'est exactement ce que je veux ,
mais peut tu m'indiquer comment faire stp ?

Reply

Marsh Posté le 21-04-2008 à 11:38:12    

bah au lieu d'afficher du html dans ta boucle, tu stockes le résultat, et après la boucle tu affiches quelque chose en fonction de ce résultat...[:skeye]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 11:41:27    

désolé mais je ne suis pas tres doué... tu propose un truc du genre :
 
if ( ) {
return true;
}
else {  
return false ;  
}
 
nan?  
mais apres comment je fais pour exploiter le true/false ?
 
merci pour ton aide

Reply

Marsh Posté le 21-04-2008 à 11:41:59    

[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 11:41:59   

Reply

Marsh Posté le 21-04-2008 à 11:42:57    

Salut
 
Je pense que tu devrais revoir ce à quoi sert le for parce que dans ton cas, cela ne sert pas du tout.
 
Tu devrais plutôt essayer de récupérer le chiffre dans Fa0/x (cf http://fr.php.net/manual/fr/function.substr.php) et de regarder s'il est compris entre 1 et 48 avec un simple if.

Reply

Marsh Posté le 21-04-2008 à 11:44:21    

Melendril a écrit :

Salut

 

Je pense que tu devrais revoir ce à quoi sert le for parce que dans ton cas, cela ne sert pas du tout.

 

Tu devrais plutôt essayer de récupérer le chiffre dans Fa0/x (cf http://fr.php.net/manual/fr/function.substr.php) et de regarder s'il est compris entre 1 et 48 avec un simple if.


c'est clair que c'est probablement faisable avec un simple test et une expression régulière...:D

 

Mais personnellement ce qui me chagrine c'est qu'il n'arrive même pas à corriger sa version non optimale tout seul, là...:(


Message édité par skeye le 21-04-2008 à 11:44:53

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 11:50:10    

en fait si j'enleve la partie Else .. ça marche a moitié.
-> si je teste le port Fa0/14
j'ai ce message  :
"  La machine se trouve sur le port Fa0/14 du  
La machine est branchée directement sur ce switch"
 
c'est exactement ce que je recherche.  
 
si je teste une machine sur le port Gi0/1 je n'ai evidement rien...  
mais comment inclure juste un phrase dans ce else?  
 
je regarde actuellement la solution proposée par melendril.  
 
merci a vous

Reply

Marsh Posté le 21-04-2008 à 11:52:23    

elmarokinho a écrit :

si je teste une machine sur le port Gi0/1 je n'ai evidement rien...  
mais comment inclure juste un phrase dans ce else?


 
Tu n'as rien à faire dans le else. Mais si tu n'as rien trouvé dans les 48, il faut que tu préviennes l'utilisateur. Donc il faut que tu stockes quelque part le fait d'avoir trouvé quelque chose dans ta boucle. C'est pourtant pas bien compliqué...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 12:12:07    

 Voila je teste ça , mais j'ai une erreur d'accollade qui apparait 50 ligne plus bas dans le script.
 
  <?php  
for ($i=1; $i<49; $i++)
{
$test = 'Fa0/'.$i;
if ($result_port == $test)
{  
$fa = true ;
 }
else  
{  
$fa = false;  
}
}
 if ($fa == true)
{ ?>
 
  La machine est branchée directement sur ce switch  
<?php }
 
else
{ ?>
Il s'agit d'un port d'interconnexion  
<?php }
}
?>
 
vraiment désolé mais je ne maitrise pas trop le php ..

Reply

Marsh Posté le 21-04-2008 à 12:15:03    

une accolode fermante de trop ici:
<?php }
}
?>


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 21-04-2008 à 12:20:53    

ok merci elle m'avait échapée... ;-)
mais je ne comprends pas. Si je test une machine sur le port Fa0/14 ou Gi0/1 j'ai le meme message  
" Il s'agit d'un port d'interconnexion"  
 
pourquoi?

Reply

Marsh Posté le 21-04-2008 à 12:29:53    

Normal, erreur d'algorithme du a  un mauvais usage du for.
 
En clair si tu exécutes ton code pas a pas avec la valeur Fa0/14 :
La variable $i vaut 1 => $fa = false
La variable $i vaut 2 => $fa = false
La variable $i vaut 3 => $fa = false
La variable $i vaut 4 => $fa = false
La variable $i vaut 5 => $fa = false
La variable $i vaut 6 => $fa = false
La variable $i vaut 7 => $fa = false
La variable $i vaut 8 => $fa = false
La variable $i vaut 9 => $fa = false
La variable $i vaut 10 => $fa = false
La variable $i vaut 11 => $fa = false
La variable $i vaut 12 => $fa = false
La variable $i vaut 13 => $fa = false
La variable $i vaut 14 => $fa = true
Et la c'est le drame parce que a la prochaine occurence de la boucle for :
La variable $i vaut 15 => $fa = false
....
 
En gros, ton code ne fonctionne que pour la valeur Fa0/48.
 
Solution :
Soit tu utilise un break : http://fr.php.net/manual/fr/contro [...] .break.php
Soit tu te passes du for qui n'a rien a faire dans une vérif de ce genre. cf mon dernier post


Message édité par Melendril le 21-04-2008 à 12:30:44
Reply

Marsh Posté le 21-04-2008 à 12:39:14    

oui j'ai regardé pour le substr .. ok je test les  derniers caractere du Fa0/2 -> ok
et gi0/2 ... ok aussi , mais nan ! lol

 

en fait moi sa marche avec ce bout de code a la barbare

 
Code :
  1. <?php
  2. for ($i=1; $i<49; $i++)
  3. {
  4. $test = 'Fa0/'.$i;
  5. if ($result_port == $test)
  6. { ?>
  7.   La machine est branchée directement sur ce switch 
  8. <?php }
  9. }
  10. for ($i=1; $i<3; $i++)
  11. {
  12. $test = 'Gi0/'.$i;
  13. if ($result_port == $test)
  14. { ?>
  15.   Interconnexion 
  16. <?php }
  17. }
  18. ?>
  


mais parfois (rarement) il ya des port types "vl1" donc si le script en trouve un c'est foutu.

 

:ouch: j'ai une idée ! lol ... je test les 2 premiere lettres :
Fa -> ok
else ->interconnexion

 

... je vérifie et je redit si sa marche


Message édité par elmarokinho le 21-04-2008 à 12:44:34
Reply

Marsh Posté le 21-04-2008 à 12:44:17    

parfait ça marche ...  
 
parfois c'est tout con mais jme prend la tete pour rien lol
 
merci a vous ,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed