Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2007, 14h52   #1
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 1
Points : 1
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.
MrSmirnoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h03   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h20   #3
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 1
Points : 1
Exactement RideKick !!
Je pense avoir déjà fait ce dont tu me parle :

Code :
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.
MrSmirnoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h28   #4
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
comparaison bit-à-bit :
- et &
- ou |

exemple :

Code :
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 ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h36   #5
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
en reprenant ton code :
Code php :
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h56   #6
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
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 ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 15h58   #7
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 1
Points : 1
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
MrSmirnoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h07   #8
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
tiens ça m'a tellement intrigué que je me suis tapé tout le code :

Code php :
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h09   #9
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 1
Points : 1
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
MrSmirnoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h12   #10
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
qui peut le plus peut le moins :

Code php :
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h15   #11
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h26   #12
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
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 ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h31   #13
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h34   #14
Invité de passage
 
Inscription : février 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 5
Points : 1
Points : 1
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
MrSmirnoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h26.


 
 
 
 
Partenaires

Hébergement Web