Boucle For et condition if [Résolu] - PHP - Programmation
Marsh Posté le 21-04-2008 à 11:01:42
En faisant comme ca, ca devrait être mieux :
Code : |
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
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.
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?
Marsh Posté le 21-04-2008 à 11:35:35
elmarokinho a écrit : oui peut etre je m'y prend mal désolé ... |
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.
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 ?
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...
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
Marsh Posté le 21-04-2008 à 11:41:59
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.
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...
Mais personnellement ce qui me chagrine c'est qu'il n'arrive même pas à corriger sa version non optimale tout seul, là...
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
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... |
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é...
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 ..
Marsh Posté le 21-04-2008 à 12:15:03
une accolode fermante de trop ici:
<?php }
}
?>
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?
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
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 :
|
mais parfois (rarement) il ya des port types "vl1" donc si le script en trouve un c'est foutu.
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
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 ,
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.
merci de votre aide
Message édité par elmarokinho le 21-04-2008 à 14:18:19