Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1618 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Boucle For et condition if

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Boucle For et condition if

n°1720804
elmarokinh​o
Posté le 21-04-2008 à 10:51:21  profilanswer
 

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
mood
Publicité
Posté le 21-04-2008 à 10:51:21  profilanswer
 

n°1720829
babasss
Posté le 21-04-2008 à 11:01:42  profilanswer
 

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
n°1720844
elmarokinh​o
Posté le 21-04-2008 à 11:11:54  profilanswer
 

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

n°1720847
skeye
Posté le 21-04-2008 à 11:13:17  profilanswer
 

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 -
n°1720853
elmarokinh​o
Posté le 21-04-2008 à 11:19:14  profilanswer
 

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?

n°1720871
skeye
Posté le 21-04-2008 à 11:35:35  profilanswer
 

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 -
n°1720873
elmarokinh​o
Posté le 21-04-2008 à 11:37:24  profilanswer
 

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

n°1720874
skeye
Posté le 21-04-2008 à 11:38:12  profilanswer
 

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 -
n°1720881
elmarokinh​o
Posté le 21-04-2008 à 11:41:27  profilanswer
 

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

n°1720882
skeye
Posté le 21-04-2008 à 11:41:59  profilanswer
 

[:pingouino]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 21-04-2008 à 11:41:59  profilanswer
 

n°1720884
Melendril
Posté le 21-04-2008 à 11:42:57  profilanswer
 

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.

n°1720889
skeye
Posté le 21-04-2008 à 11:44:21  profilanswer
 

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 -
n°1720893
elmarokinh​o
Posté le 21-04-2008 à 11:50:10  profilanswer
 

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

n°1720899
skeye
Posté le 21-04-2008 à 11:52:23  profilanswer
 

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 -
n°1720915
elmarokinh​o
Posté le 21-04-2008 à 12:12:07  profilanswer
 

 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 ..

n°1720918
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-04-2008 à 12:15:03  profilanswer
 

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


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1720923
elmarokinh​o
Posté le 21-04-2008 à 12:20:53  profilanswer
 

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?

n°1720934
Melendril
Posté le 21-04-2008 à 12:29:53  profilanswer
 

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
n°1720937
elmarokinh​o
Posté le 21-04-2008 à 12:39:14  profilanswer
 

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
n°1720939
elmarokinh​o
Posté le 21-04-2008 à 12:44:17  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Boucle For et condition if

 

Sujets relatifs
[Résolu]Afficher résultat requête MAXRESOLU PHP bbcode dans une shoutbox
[php + Ajax] include "dynamique?" [résolu]petit souci avec variable d'un Input [résolu]
[Résolu] Affichage de la déconnexion d'un utilisateur[Résolu] Recherche avancée dans un array
[Résolu] Incorrect password avec Bookmark4U / php[Résolu]preg_match
[Résolu] Pb classe javascript 
Plus de sujets relatifs à : [Résolu] Boucle For et condition if


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR