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

  FORUM HardWare.fr
  Programmation
  PHP

  Lister ports disponibles -> donc non utilisés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lister ports disponibles -> donc non utilisés

n°1619148
Orchrist
Life is a war
Posté le 04-10-2007 à 18:06:38  profilanswer
 

Salut à tous! Voila j'ai un ptit problème de php, et je me suis dit que certains d'entre vous pourraient m'aider a le résoudre :)
 
Voila dans mon site de streaming, je voudrais proposer aux membres de choisir leur port pour leur serveur. Je dois donc, quand ils s'inscrivent, leur donner une liste avec les ports disponibles... j'ai donc décidé de faire ceci (je supprime ici les fonctions genre mysql_connect ou autres qui sont assez inutiles dans mon problème)

Code :
  1. $queryport = mysql_query('SELECT port FROM serveur WHERE port!=""');
  2. while( $port = mysql_fetch_array($queryport)) {
  3. for($i=9000; $i<=9500; $i=$i+2)
  4.  {
  5.   if ( $port['port'] != $i )
  6.    {
  7.         echo '<option value="'.$i.'">'.$i.'</option>';
  8.    }
  9.  }
  10. }


Mais seulement voila, les ports de 9000 à 9500 sont tous affichés, bien que 9000 soit déjà utilisé (dont présent dans la table serveur sous la valeur port), tout comme 9002 etc. Comment faire marcher ma condition if ( $port['port'] != $i )?
 
Voila merci d'avance à vous pour vos éclairages!
 
A bientot!

mood
Publicité
Posté le 04-10-2007 à 18:06:38  profilanswer
 

n°1619167
omega2
Posté le 04-10-2007 à 18:14:09  profilanswer
 

Tu prend ton problème à l'envers. Ca ne sert à rien de dire "pour chaque port utilisé, je liste les autres port. Ce qu'il faut que tu fasses c'est :
- solution 1 : créer un tableau contenant la liste des ports utilisés et ensuite pour chaque port encore libre que tu fasses un in_array() pour savoir s'il est pris et ne l'afficher que s'il n'est pas pris
- solution 2 : créer un tableau contenant la liste des ports utilisable et ensuite pour chaque port utilisé le chercher dans la liste pour l'en enlever

n°1619243
Orchrist
Life is a war
Posté le 04-10-2007 à 19:39:50  profilanswer
 

Salut! Merci pour ta réponse, je crois que j'ai compris que effectivement je prend mon problème à l'envers. Je comprend le principe des tableaux, mais j'ai du mal à la mettre en oeuvre... Voila ce a quoi j'ai pensé pour le moment pour la solution 1:  
On peut partir du principe que mysql_fetch_array retourne le tableau avec les ports utilisés... non? mais après pour la boucle foreach, comment définir de comparer avec chaque nombre d'une tranche? (je n'utilise pas souvent la boucle et les tableaux, je n'en ai pour le moment pas trop eu besoin...) Après quand on compare, on test in_array() et si TRUE, on ne l'affiche pas... Au final on devrait avoir donc l'affichage des ports libres (ceux qui n'ont pas été supprimés) ... Mais je me mélange dans les valeurs.
 
Pour la solution 2 ca me parait bien aussi mais la boucle foreach pose encore problème...

n°1619261
zecrazytux
Posté le 04-10-2007 à 20:11:29  profilanswer
 

chaque nombre d'une tranche ?
 
tu as lu comment utiliser foreach ? ça n'as rien de bien compliqué

n°1619263
Orchrist
Life is a war
Posté le 04-10-2007 à 20:15:45  profilanswer
 

oui j'ai lu, j'ai fait des essais, mais ça n'a pas l'air de fonctionner je ne dois pas savoir quelle condition vérifier.
 
Chaque nombre d'une tranche: chaque nombre contenu dans l'intervalle (par exemple tous les nombres de 1000 à 2000 en sautant a chaque fois un chiffre: 1000 1002 1004 etc)

n°1619268
zecrazytux
Posté le 04-10-2007 à 20:21:56  profilanswer
 

Orchrist a écrit :

oui j'ai lu, j'ai fait des essais, mais ça n'a pas l'air de fonctionner je ne dois pas savoir quelle condition vérifier.
 
Chaque nombre d'une tranche: chaque nombre contenu dans l'intervalle (par exemple tous les nombres de 1000 à 2000 en sautant a chaque fois un chiffre: 1000 1002 1004 etc)


 de 1000 à 2000 en suatant les ports utilisés:
 

Code :
  1. for($i = 1000; $i <= 2000; $i++) {
  2.     if(in_array($i, $tab_des_ports_utilises)) {
  3.             // action port déja utilisé
  4.     } else {
  5.             // action port libre
  6.     }
  7. }

n°1619278
Orchrist
Life is a war
Posté le 04-10-2007 à 20:38:30  profilanswer
 

ah oui, ok... pas besoin d'utiliser la fonction foreach dans ce cas là alors...
 
Sinon j'aimerais comprendre comment je peux l'utiliser cette fonction... Dans mon cas ça donnerait quoi?
 
parce que en fait dans tous les exemple des pages de manuel on trouve des trucs comme ça:

Code :
  1. foreach( $array as $item );
  2. unset($item);


 
mais moi je serais plus tenté de supprimer du tableau la valeur $array qui vérifie la condition... Et ensuite quand j'ai mon tableau épuré des ports utilisés, comment afficher chaque valeur dans mes <option value=""> ? car je ne sais plus combien de ports sont restants dans le tableau: je ne peux donc plus utiliser for? (je fais un gros mélange a mon avis, je dois me compliquer l'existence)...

n°1619297
Orchrist
Life is a war
Posté le 04-10-2007 à 21:22:43  profilanswer
 

Correction boucle infini: réglé...
 
Autre soucis:  

Code :
  1. $port = mysql_fetch_array($queryport);
  2. for($i = 9000; $i <= 9500; $i=$i+2)
  3.  { 
  4.   if(!in_array($i, $port))
  5.    {   ?>
  6.     <option value="<?=$i ?>"><?=$i ?></option>
  7.   <? }
  8.  }


 
J'ai bien tout affiché: mais les ports utilisés ne sont pas enlevés...

Message cité 1 fois
Message édité par Orchrist le 04-10-2007 à 21:26:04
n°1619303
zecrazytux
Posté le 04-10-2007 à 21:33:24  profilanswer
 

Orchrist a écrit :

Correction boucle infini: réglé...
 
Autre soucis:  


fait un echo au lieu de fermer/ouvrir les <?php (question de perfs)
 
que donne echo "<pre>"; print_r($port); echo "</pre>";

n°1619311
Orchrist
Life is a war
Posté le 04-10-2007 à 21:41:27  profilanswer
 

le echo donne ceci:

Code :
  1. Array
  2. (
  3.     [0] => 15000
  4.     [port] => 15000
  5. )


 
Quand je fais la requete $queryport dans phpmyadmin j'obtiens ceci:
http://img235.imageshack.us/img235/8316/sanstitrefu3.jpg
 
Les autres ports que 9004 et 9100 sont d'autres services avec des ports différents. Ils ne changent donc rien à mon script normalement puisqu'ils sont en dehors de l'intervalle spécifié dans le for.

Message cité 1 fois
Message édité par Orchrist le 04-10-2007 à 21:41:49
mood
Publicité
Posté le 04-10-2007 à 21:41:27  profilanswer
 

n°1619314
zecrazytux
Posté le 04-10-2007 à 21:44:06  profilanswer
 

Orchrist a écrit :

le echo donne ceci:


ça te choque pas de dire "J'ai bien tout affiché: mais les ports utilisés ne sont pas enlevés..." alors que tu essai "d'enlever" 15000 dans la suite de 9000 à 95000 ?

n°1619318
Orchrist
Life is a war
Posté le 04-10-2007 à 21:46:40  profilanswer
 

ben 15000 n'étant pas contenu dans l'intervalle de la boucle for: on ne teste pas sa présence dans l'array, et on ne l'affiche pas je ne vois pas le soucis...

n°1619319
zecrazytux
Posté le 04-10-2007 à 21:48:32  profilanswer
 

Orchrist a écrit :

ben 15000 n'étant pas contenu dans l'intervalle de la boucle for: on ne teste pas sa présence dans l'array, et on ne l'affiche pas je ne vois pas le soucis...


il n'y a que 15 000 dans le tableau $port. donc ton in_array retourne toujours false.

n°1619322
Orchrist
Life is a war
Posté le 04-10-2007 à 21:51:05  profilanswer
 

ben justement, c'est pour ça que je t'ai montré ma requete dans phpmyadmin: pourquoi les valeurs que j'obtiens dans phpmyadmin ne sont-elles pas retrouvées dans mon array?
 
la requete mysql:  

Code :
  1. $queryport = mysql_query('SELECT port FROM serveur WHERE port!="" ');


La mise en tableau:

Code :
  1. $port = mysql_fetch_array($queryport);


 
L'affichage de echo "<pre>"; print_r($port); echo "</pre>";

Code :
  1. Array
  2. (
  3.     [0] => 15000
  4.     [port] => 15000
  5. )

n°1619327
zecrazytux
Posté le 04-10-2007 à 22:02:06  profilanswer
 

mysql_fetch_array il faut l'effectuer en boucle.

n°1619329
Orchrist
Life is a war
Posté le 04-10-2007 à 22:04:55  profilanswer
 

j'avais essayé avec while:

Code :
  1. $queryport = mysql_query('SELECT port FROM serveur WHERE port!=""');
  2. while($port = mysql_fetch_array($queryport))
  3.  {
  4.   for($i = 9000; $i <= 9500; $i=$i+2)
  5.    { 
  6.     if(!in_array($i, $port))
  7.      {   ?>
  8.       <option value="<?=$i ?>"><?=$i ?></option>
  9.     <? }
  10.    }
  11.  }


 
Retour de echo "<pre>"; print_r($port); echo "</pre>"; : on obtient: <pre></pre> aucun array... Ca doit venir de la propriété de fetch array... Je pensais rentrer chaque valeur retournée par while($port = mysql_fetch_array($queryport)) dans un tableau, on en créé donc un petit a petit, pour etre sur que ça marche, mais c'est compliqué je pense ^^  :pt1cable:

Message cité 1 fois
Message édité par Orchrist le 04-10-2007 à 22:06:52
n°1619333
zecrazytux
Posté le 04-10-2007 à 22:10:03  profilanswer
 

Orchrist a écrit :

j'avais essayé avec while:


tu le met ou ton print_r ?
 
fais d'abord ton tableau de ports "fermés" et ensuite fait ta boucle de 9000 à 95000.  
 
et retire les ?> <? ?> <? ?>

n°1619334
Orchrist
Life is a war
Posté le 04-10-2007 à 22:10:55  profilanswer
 

c'est justement faire le tableau de ports fermés qui pose soucis! Comment dois-je la faire? Le print_r est après la boucle for


Message édité par Orchrist le 04-10-2007 à 22:11:13
n°1619336
zecrazytux
Posté le 04-10-2007 à 22:12:24  profilanswer
 

array_push par exemple

n°1619340
zecrazytux
Posté le 04-10-2007 à 22:14:38  profilanswer
 

d'ailleurs fetch plutot un row, y a pas d'interet a chopper un raay ici

n°1619342
Orchrist
Life is a war
Posté le 04-10-2007 à 22:16:51  profilanswer
 

Andouille que je suis... (oublié les caractéristiques d'output de mysql_fetch_row)  :pt1cable:  voila Tout marche:

Code :
  1. $port = array ('first');
  2. while($ports = mysql_fetch_row($queryport))
  3.  {
  4.  array_push ($port, $ports[0]);
  5.  }


 
J'arrive à ma liste avec les ports utilisés supprimés...  :love:  
 
Merci beaucoup a toi de m'avoir supporté, je suis vraiment à la masse  :(  
 
Je ne sais toujours pas comment faire pareil avec un foreach, mais là ça marche  :sweat: merci encore  :)  
 
Bonne nuit :)

Message cité 1 fois
Message édité par Orchrist le 04-10-2007 à 22:27:14
n°1619350
zecrazytux
Posté le 04-10-2007 à 22:35:07  profilanswer
 

Orchrist a écrit :

Andouille que je suis... (oublié les caractéristiques d'output de mysql_fetch_row)  :pt1cable:  voila Tout marche:


ben je peux t'expliquer comment se servir d'un foreach si tu le veuz'

n°1619921
Orchrist
Life is a war
Posté le 05-10-2007 à 18:33:42  profilanswer
 

ben je voudrais bien oui, car j'aimerais vraiment savoir :) ça pourrait me servir! les exemples donnés sur la page officielle sont vraiment nuls... par exemple je ne comprend pas ce genre de choses:

Code :
  1. foreach( $myArray as $key => $element ) {
  2.   $element =& $myArray[$key];
  3.   echo $element;
  4. }


 
En effet ils ne mettent pas de tableau pour lequel on peut l'appliquer et ils ne montrent pas ce qu'on obtient avec un exemple précis (je marche assez bizarrement comme pour mes cours de médecine: il me faut des exemples précis, que je peux comprendre et réappliquer).
 
Voila :) merci a toi en tout cas :)

n°1619930
zecrazytux
Posté le 05-10-2007 à 18:59:16  profilanswer
 

Orchrist a écrit :

ben je voudrais bien oui, car j'aimerais vraiment savoir :) ça pourrait me servir! les exemples donnés sur la page officielle sont vraiment nuls... par exemple je ne comprend pas ce genre de choses:


foreach te permet de parcourir un tableau (equivalent à une boucle for, de 0 à n-1 éléments)
 

Code :
  1. foreach($tableau as $value)


"pour chaque valeur du tableau"
 
si tu as un tableau contenant 1, 2, 3, et 4, tu aura successivement $value = 1, $value =2, $value= 3, $value =4...
 
maintenant l'extension

Code :
  1. foreach($tableau as $key => $value)


fais la même chose, sauf que contrairement à l'exemple précédent, nous allons utiliser les cles également.  Tu dois savoir ce qu'est une clé, sinon retourne voir ce qu'est un tableau.
en PHP, tu peux utiliser des cles numeriques (normal) ou "texte" (trouve aps le mot). (tu as du déja voir des tableaux du genre $tab["titi"] = "totom";)
 
Ce foreach assigne la cles cles du tableau à $cle et les valeurs correspondantes à $value, en parcourant le tableau  
donc, si tu as un tableau de ce type:
titi => totom, windows => pourri, aujourdhui => vendred, tu aura dans ton foreach, successivement:
 
$cle = titi et $value = totom
$cle = windows et $value = pourri
etc
 
j'ai fais expres de te donner des exemples "parlés", à toi de faire tes propres essais "codés". tu comprendra mieux par toi même, avec des petits exemples sur des tableaux ;)

n°1619934
Orchrist
Life is a war
Posté le 05-10-2007 à 19:07:12  profilanswer
 

ok je comprend déjà mieux, justement les exemples "parlés" sont parfaits :) Sinon pour ce genre de choses a quoi correspondent-elles?

Code :
  1. $element =& $myArray[$key];

n°1619942
zecrazytux
Posté le 05-10-2007 à 19:23:28  profilanswer
 

Orchrist a écrit :

ok je comprend déjà mieux, justement les exemples "parlés" sont parfaits :) Sinon pour ce genre de choses a quoi correspondent-elles?


ça utilise les references... je t'invite à lire ceci: http://www.journaldunet.com/develo [...] nces.shtml
 
a permet de travailler avec les adresses en mémoire des variables et fonctions, et ne pas copier systématiquement le contenu


Message édité par zecrazytux le 05-10-2007 à 19:24:11
n°1619946
Orchrist
Life is a war
Posté le 05-10-2007 à 19:26:19  profilanswer
 

Ok merci pour cette précision :) si j'ai un problème de tableaux, je viendrai redemander ici :)

mood
Publicité
Posté le   profilanswer
 


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

  Lister ports disponibles -> donc non utilisés

 

Sujets relatifs
Créer un script permettant de lister dossier et sous-dossiersLogiciel pour lister et proposer des vidéos sur son site ?
[Résolu][MYSQL] lister les doublons + rapidementResolu [VBS] lister les connexions TCP (comme netstat)
[ANT] lister des repertoires puis iterrer dessusLister tous les services windows @ Programmation
[ WaitForMultipleObjects ] Lister tous les objets signales ?lister les groupes d'une active directory
Lister des fichiersBesoin aide en PHP,lister un fichier
Plus de sujets relatifs à : Lister ports disponibles -> donc non utilisés


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