IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème de "comparaison"


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Problème de "comparaison"
    Bonjour à tous!
    Voilà j'ai un petit soucis et étant novice en PHP je ne sais vraiment pas quoi faire!
    Je commence le PHP en cours (BTS) et nous avons décidés de réaliser un formulaire qui nous permet de rentrer un masque réseau et deux adresses IP.
    Lorsque nous entrons ces trois adresses, notre programme nous les renvoi converties en binaire :
    (255.255.255.0) en binaire (11111111.11111111.11111111.00000000).
    Mon soucis maintenant et qu'il faudrait que je puisse comparer le 1er bit de chacune de ces adresses de façon à me dire si ces adresses font parties du même réseau où pas.....et c'est là que je nage complétement.
    Merci d'avance à ceux qui auront la gentillesse de me porter secours en me donnant quelques conseils.

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    1) tu decoupe ton adresse via le . pour avoir tes 4 octets séparés
    2) tu coompare tes bits 1 par 1 :

    ça c est la theorie maintenant va falloir fare un peu de recherche pour pratiquer lol
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Exactement RideKick !!
    Je pense avoir déjà fait ce dont tu me parle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function couper_octets ($adr) {
         $tab_oct = explode ('.',$adr);
     
         // Je vérifie qu'il y a bien quatre cases
         if(count ($tab_oct) !=4){
              return false;
    }
    Ensuite je vérifie la validité des nombres en utilisant ctype_digit($str) afin de vérifier que les nombres rentrés soient bien compris entre 0 et 255.

    Mais c'est la façon de comparer les bits 1 par 1 qui me pose problème justement, je ne sais absolument pas comment faire pour comparer chaque 1er bit de chaque 1ere case de chaque 1ere adresse (C'est dur d'être clair lol!!)

    PS : J'ai cru comprendre que je n'avais pas posté mon message au bon endroit, où faudrait-il donc que je le place. Merci encore pour votre aide.

  4. #4
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    comparaison bit-à-bit :
    - et &
    - ou |

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $adresse = 255;
    $masque = 128; // = 2^7 = 1000 0000 en hexa
     
    if (($adresse & $masque) == $masque) {
      echo 'le 1er bit vaut 1';
    }
    Dia [ Page DVP ] [ Site pro ]

  5. #5
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    en reprenant ton code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function couper_octets ($adr) {
    $tab_oct = explode ('.',$adr);
     
    // Je vérifie qu'il y a bien quatre cases
    if(count ($tab_oct) !=4){
    return false;
    }else
    {
    return $tab_oct ;
    }
     
    $octet_unAdresse=couper_octets ($adr)[0]; //J'ai un doute la mais je pense que ça peut se faire
    $octet_unMasque=couper_octets ($masque)[0];
     
    for ($i=0 ; $i<8 ; $i++)
    {
    if($octet_unAdresse{$i}>$octet_unMasque{$i})
    {
    echo 'L\'octet '.$i+1.' de l\'adresse est superieur a celui du masque<br>';
    }
     
     
    }

    la je suis sur le 1er octet mais tu fais une boucle de 1 a 4 et hop le tour est joué !

    Explication : je compare les bits 1 a 1 !
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    le but est pas de comparer chacun des bits des 4 octets de l'adresse mais le premier seulement, ça suffit à déterminer si les adresses sont liées au même sous réseau ('fin j'crois, c'est loin mes cours de réseau !)

    et pourquoi tu fais une comparaison sur supérieur... pas compris

    l'année dernière j'utilisais mon histoire de masque avec les opérateurs bit à bit pour traiter des signaux ça marchait très bien :p
    Dia [ Page DVP ] [ Site pro ]

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci DIA FR et RideKick de vos réponses je vais essayer de me débrouiller avec tes infos DIA FR et la prochaine fois je ferais en sorte de poster mon message au bon endroit promis

  8. #8
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    tiens ça m'a tellement intrigué que je me suis tapé tout le code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?
    function couper_octets ($adr) {
    $tab_oct = explode ('.',$adr);
     
    // Je vérifie qu'il y a bien quatre cases
    if(count ($tab_oct) !=4){
    return false;
    }else
    {
    return $tab_oct ;
    }
    }
     
    $octet_Adresse=couper_octets ($adresse); 
    $octet_Masque=couper_octets ($masque);
     
     
     
    for ($j=0 ; $j<4 ; $j++){
     
    echo "<br>Octet : ".$j." : <br><br>";
     
    for ($i=0 ; $i < 8 ; $i++)
    {
     
    if($octet_Adresse[$j]{$i} > $octet_Masque[$j]{$i})
    {
    echo "bit ".$i." : l'adresse est superieur a celui du masque<br> ";
    }
     
    else
     {
      if($octet_Adresse[$j]{$i} < $octet_Masque[$j]{$i})
      	{
     
    		echo 	"bit ".$i." : l'adresse est inferieur a celui du masque<br>";
    	}
    	else
    	{
     
    	echo "bit ".$i." : Les bits sont egaux<br>";
    	}
     }
     
     
    }
    } 
    ?>

    Impulsion quand tu nous tiens ....
    Il faut que $adresse et $masque soit sous la forme '11111001.10100110.11111001.10100110' !

    Je te fais une comparaison bit a bit de l'adresse au complet je pense que tu vas pouvoir te depatouiller avec ça !?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    DIA FR a raison RideKick il faut en fait si tu veux que je compare le 1er bit du masque avec le 1er bit de l'IP1 et avec le 1er bit de l'IP2 :

    mask = 255.255.255.0 (adresse rentrer dans mon formulaire)
    en binaire = 11111111.11111111.11111111.00000000 (Résultat après la convertion)

    IP1 = 192.168.1.2 (adresse rentrer dans mon formulaire)
    en binaire = 11000000.10101000.00000001.00000010 (Résultat après la convertion)

    IP2 = 120.12.15.13 (adresse rentrer dans mon formulaire)
    en binaire = 01111000.00001100.00001111.00001101 (Résultat après la convertion)

    Il faurdrait donc que je puisse comparer les bits en rouge de façon à savoir si l'IP1 et l'IP2 sont sur le même réseau.
    Dans l'exemple que je donne, l'IP1 est sur le même réseau (puisque le 1er bit est à 1 comme le 1er bit du mask est aussi à 1) tandis que l'IP2 n'est pas sur le même réseau puisque son premier bit est à 0 (donc différent du 1er bit du mask)

    J'espère être assez clair dans ce que je raconte ...lol...
    Merci encore pour votre aide

  10. #10
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    qui peut le plus peut le moins :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?
    function couper_octets ($adr) {
    $tab_oct = explode ('.',$adr);
     
    // Je vérifie qu'il y a bien quatre cases
    if(count ($tab_oct) !=4){
    return false;
    }else
    {
    return $tab_oct ;
    }
    }
     
    $octet_Adresse=couper_octets ($adresse); 
    $octet_Masque=couper_octets ($masque);
     
    if ($octet_Adresse[0]{0} != $octet_Masque[0]{0}){
     
    	echo 'Ils ne sont pas sur le meme réseau' ;
    }
     
     
     
    ?>
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  11. #11
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    soit dis en passant :

    mask = 255.255.255.0 (adresse rentrer dans mon formulaire)
    en binaire = 11111111.11111111.11111111.00000000 (Résultat après la convertion)

    IP1 = 192.168.1.2 (adresse rentrer dans mon formulaire)
    en binaire = 11000000.10101000.00000001.00000010 (Résultat après la convertion)

    IP2 = 192.168.0.13 (adresse rentrer dans mon formulaire)
    en binaire = 11000000.10101000.00000000.00001101 (Résultat après la convertion)

    Les premiers bits sont tous a 1 mais IP1 et IP2 ne sont pas dans le meem reseau ....
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  12. #12
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    ip1 et ip2 sont sur le même réseau mais pas le même sous réseau là
    d'où la comparaison du 1er bit de chaque octet...

    on peut clore le topic ? sinon on va se faire accuser de flood
    Dia [ Page DVP ] [ Site pro ]

  13. #13
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Citation Envoyé par Dia_FR
    ip1 et ip2 sont sur le même réseau mais pas le même sous réseau
    Non non , j'insiste il ne sont pas sur le meme RESEAU dans mon exemple !
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ok RideKick merci de t'être penché sur la question, autant pour moi si je me suis trompé dans mes explications, je vais tout de même essayer de me dépatouiller avec tes infos et ton code.
    Vendredi 23/02 j'aurais la correction réaliser par mon prof donc je posterai ici ce qu'il a fait si jamais tu es toujours intéréssé par la solution.
    Merci encore pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  2. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo