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 :

Validation d'adresse IP [Débutant(e)] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut Validation d'adresse IP
    Bonjour chers développeurs,

    Récemment, je me suis dis que se serait bien que dans mes formulaires où l'utilisateur écrit une adresse IP, qu'il ne puisse pas taper des choses éronnés.
    J'ai chercher un peu, et j'ai trouver la réponse à mon problème : Les Regex

    Bon ... heu ... franchement je n'y comprend vraiment rien, tous ses symboles ...

    Alors je demande à vous chers professionnels du développement web, de me prêter main forte et de me guider sur la voie.
    Je voudrais savoir si vous connaissez un site qui traite d'un regex pour adresse IP ou si vous vous en utilisez un et si vous me l'offririez de bon coeur.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Un début de réponse :Regex flltrant des ip
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    pour une solution pure regex pour ton IP, disons par exemple :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ip = "192.168.1.22" ; 
    $resu = preg_match('!^([01]?\d?\d|2[0-4]\d|25[0-5])(\.([01]?\d?\d|2[0-4]\d|25[0-5])){3}$!') ;

    Le seul défaut est d'accepter les adresses 0.0.0.0.


    Explication :

    Quatre éléments séparés par des points, donc
    Code pseudo-regex : Sélectionner tout - Visualiser dans une fenêtre à part
    elem(\.elem){3}

    Chaque élément est :

    - un nombre entre 0 et 199, càd un chiffre tout seul, deux chiffres, ou trois chiffres dont le premier est 0 ou 1, donc [01]?\d?\d

    - ou alors un nombre entre 200 et 249, donc 2[0-4]\d

    - ou encore un nombre entre 250 et 255, donc 25[0-5]

    Chaque élément est donc :
    Code regex : Sélectionner tout - Visualiser dans une fenêtre à part
    ([01]?\d?\d|2[0-4]\d|25[0-5])

    Pour une solution plus simple à comprendre car sans regex (non testée) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ip = "192.168.1.22" ;
    $tablo = explode(".", $ip) ;
    if (count($tablo) != 4) {
      $resu = false ;
    } else {
      $resu = true ;
      foreach ($tablo as $elem) {
        if ($elem != abs((int) $elem) || $elem <= 255) $resu = true ; 
      }
      if (array_sum($elem) == 0 ) $resu = false ;
    }


    pour mieux t'y retrouver dans les regex : http://php.developpez.com/cours/?page=langage#regexp
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Celira = Oui j'avais déjà visiter ce topic, mais comme j'y comprenais pas grand-chose ...

    Autoun = Il y a une chose que je ne comprend pas, comment je fais pour appliquer un regex sur un formulaire, est-ce dans un onclik ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    oui, mais alors ce n'est plus du PHP mais du JavaScript...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    voir sur le forum javascript dans les contributions ...
    valider un formulaire ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Ah bon je savais pas ...
    Une ptite question, dans mon formulaire, ce qui est posté est envoyer dans une table composé à 80% d'adresse IP, j'avais mis comme type = TEXT pour pas me prendre la tête.
    Est-ce que si je met le type INT, cela empêchera à l'utilisateur de poster des caractères non-numériques ???

    SpaceFrog = Le problème est je ne connais pas encore le javascript, et que pour mon code, j'ai une contrainte, c'est que je ne peux utiliser que le PHP ( et HTML bien sur ).

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    non il n'y a pas de type INT, pour ce genre de sasise il n'existe que le type text...

    Si tu ne peux tuiliser que du php la verification en pourra se faire que sur le serveur après soumiission du formulaire ...

    SI tu ne peux pas utiliser javascript je te renvoie sur le forum php ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Oui tu peux me remettre la-bas
    Nan je suis pas sur que tu m'ai compris alors je recommence plus explicitement:
    Je pensais peut-être à mettre le champ de ma table d'adresse IP en type INT , comme ça il n'acceptera pas les lettres, enfin sa se trouve je me trompe.
    Est ce que tu avais bien compris sa ou pas ?

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    dans ce cas je ne suis pas sûr qu'il accepte plusieurs points non plus

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    Citation Envoyé par Archibald_Teepo Voir le message
    Oui tu peux me remettre la-bas
    Nan je suis pas sur que tu m'ai compris alors je recommence plus explicitement:
    Je pensais peut-être à mettre le champ de ma table d'adresse IP en type INT , comme ça il n'acceptera pas les lettres, enfin sa se trouve je me trompe.
    Est ce que tu avais bien compris sa ou pas ?
    Que ferais tu des points contenus dans l'adresse IP avec tes INT?

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    le test est à faire avec un regExp en php sur ton $_POST['champIP'] ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \b(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])\b
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Que ferais tu des points contenus dans l'adresse IP avec tes INT?
    Bah au pire au lieu des points on peut mettre des espaces.
    Faudra que je le précise à coté du formulaire c'est tout.

    le test est à faire avec un regExp en php sur ton $_POST['champIP'] ...
    Oui mais où je le place ?

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par Archibald_Teepo Voir le message
    Bah au pire au lieu des points on peut mettre des espaces.
    Pas du tout. Imagine que tu as 192.168.12.3 et 192.168.1.23. Si tu passes en INT ça donne 192168123, et tu n'as aucun moyen de reconstituer la bonne adresse IP.

    Il faut utiliser soit une colonne CHAR/VARCHAR, soit quatre colonnes TINYINT UNSIGNED (à supposer que tu sois en MySQL).

    Citation Envoyé par Archibald_Teepo Voir le message
    Faudra que je le précise à coté du formulaire c'est tout.
    Oui mais où je le place ?
    Nulle part. C'est une architecture 3-tier, donc ce que tu fais sur la couche base de données n'a pas d'influence directe sur la couche applicative (ton formulaire), et réciproquement.

    • couche client : contrôle en JavaScript effectué instantanément par le navigateur web
    • couche appli : contrôle en PHP effectué par le serveur web, suite à l'envoi des données
    • couche données : si c'est MySQL, pas de contrôle à part le type (d'où l'intérêt des quatre colonnes en TINYINT UNSIGNED, càd de 0 à 255)
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  15. #15
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Mais que jle mette en INT ou en VARCHAR, sa revient au même puisque le type INT ne rejette pas les espaces ( il me semble j'ai pas testé ).
    Après c'est si je voulais absolument mettre des points que j'aurais utilisé le VARCHAR.

    Architecture 3-tiers... tu parle de chose qui me dépasse totalement ...
    Je suis complètement largué, je pense que je vais aller essayer d'apprendre par cœur les tutos sur les regex.

    Merci d'avoir essayé de m'aider mais franchement je comprends rien ...

    A la prochaine et bonne fin de journée !

  16. #16
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par Archibald_Teepo Voir le message
    Mais que jle mette en INT ou en VARCHAR, sa revient au même puisque le type INT ne rejette pas les espaces ( il me semble j'ai pas testé ).
    je t'invite à tester

    Citation Envoyé par Archibald_Teepo Voir le message
    Après c'est si je voulais absolument mettre des points que j'aurais utilisé le VARCHAR.

    Architecture 3-tiers... tu parle de chose qui me dépasse totalement ...
    j'ai bien constaté

    Citation Envoyé par Archibald_Teepo Voir le message
    Je suis complètement largué, je pense que je vais aller essayer d'apprendre par cœur les tutos sur les regex.
    ça ne te servira à rien. Il faut d'abord que tu comprennes l'architecture 3-tier (sans S), autrement dit le fonctionnement JS/PHP/MySQL avant d'arriver à quoi que ce soit.

    Citation Envoyé par Archibald_Teepo Voir le message
    Merci d'avoir essayé de m'aider mais franchement je comprends rien ...

    A la prochaine et bonne fin de journée !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  17. #17
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    Sinon tu peut faire comme les flemmards en utilisant 4 select de 1 à 255.
    "On ne voit bien qu'avec le cœur, l'essentiel est invisible pour les yeux"
    Antoine de St Exupéry.

  18. #18
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par arthak Voir le message
    Sinon tu peut faire comme les flemmards en utilisant 4 select de 1 à 255.
    de 0 à 255, et envoyé dans quatre colonnes TINYINT UNSIGNED de MySQL.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  19. #19
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par Antoun Voir le message
    de 0 à 255, et envoyé dans quatre colonnes TINYINT UNSIGNED de MySQL.
    J'aurais plus dit regroupé par la suite en une seule variable mais..
    "On ne voit bien qu'avec le cœur, l'essentiel est invisible pour les yeux"
    Antoine de St Exupéry.

  20. #20
    Membre du Club Avatar de Archibald_Teepo
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Vous voulez dire séparer chaque octet et les envoyés dans 4 champs différents ?!
    C'est une idée !

    Mais comme ma table est constitué majoritairement d'adresse IP, IP réseau ... etc ... ma table va être énorme, mais tant pis, si au moins j'y arrive avec sa, autant le faire comme ça !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Mail] Validation d'adresses mail
    Par kev484 dans le forum Langage
    Réponses: 1
    Dernier message: 17/01/2008, 20h44
  2. Valider champ + adresse email
    Par benassis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/09/2007, 16h59
  3. page tampon de validation d'adresse
    Par ozzmax dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2007, 18h41
  4. Validation d'adresses mail
    Par Alyx² dans le forum Delphi
    Réponses: 4
    Dernier message: 20/07/2006, 14h48

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