Sql et **

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sql et **

Re: Sql et **

par Berzemus » 19 avr. 2016, 15:25

Une autre solution est d'enregistrer une représentation numérique de ton adresse IP dans ta table. Les opérations de recherche en deviendraient plus rapides, surtout si tu utilises les indexes a bon escient.

Php propose à cet effet ip2long() et long2ip().

Re: Sql et **

par John1 » 18 avr. 2016, 10:25

Bonjour,

Je n'est pas le choix d'utiliser une solution sqlite, c'est pourquoi mon choix est très limité

Re: Sql et **

par Berzemus » 18 avr. 2016, 10:23

@Berzemus, Merci pour votre message, cependant je n'est pas la possibilité d'utiliser ce genre de solutions. C'est pourquoi je cherche une alternative
Pas de soucis. Juste par sécurité, tu es sur de ne jamais utiliser IPv6 ?

Re: Sql et **

par Berzemus » 18 avr. 2016, 10:20

Tiens, je ne connaissais pas la fonction INET_ATON(), merci Berzemus ! :)
En fait, moi non plus :mrgreen: :mrgreen: :mrgreen:

Re: Sql et **

par John1 » 18 avr. 2016, 10:20

Merci de vos réponses très rapide en conclusion. Que dois-je ajouter comme adresse ip lors d'un rbannissement: 123.123.123.% ou bien 123.123.123.* ?
Ma requête est comme cela concernant le champ ip. Si j'introduit l'une de votre solution, dois je uniquement comparer l'adresse ip brut et le rbanissement et cela marchera ?
SELECT * FROM `BANNED` WHERE `NAME` = '%s' OR `IP` = '%s'
Merci encore de vos réponses
Et % correspondrait à un chiffre de l'adresse ip ?

@Berzemus, Merci pour votre message, cependant je n'est pas la possibilité d'utiliser ce genre de solutions. C'est pourquoi je cherche une alternative

Re: Sql et **

par @rthur » 18 avr. 2016, 10:16

Tiens, je ne connaissais pas la fonction INET_ATON(), merci Berzemus ! :)

Re: Sql et **

par Berzemus » 18 avr. 2016, 10:08

Une adresse IP étant une donnée d'un genre particulier et très courant, des opérations adaptées existent déjà (sans oublier les masques de sous-réseau).

MySQL par exemple offre inet_aton(), qui traduit une adresse IP en valeur numérique, donc facilement et rapidement comparable.

Genre:
Select RowID, IP_ADDR where INET_ATON(IP_ADDR) >= INET_ATON('123.123.123.0') AND INET_ATON(IP_ADDR) <= INET_ATON('123.123.123.255');
C'est propre, bien plus rapide, et y'a même l'avantage que ça ne marche qu'avec des IP valides. De plus, cette méthode offre même une possibilité de fonctionner avec les adresses IPv6 via inet6_aton()

Edit: Y'a pas de raisons de ne pas profiter de la syntaxe SQL pour enjoliver tout ca:
SELECT 
    MaTable.RowID,
    INET_ATON(MaTable.IPAddr) AS IP_int, 
    INET_ATON('123.123.123.0') AS IP_min,  
    INET_ATON('123.123.123.255') AS IP_max 
FROM MaTable
WHERE IP_int >= IP_min AND IP_int <= IP_max;
Par ailleurs, il ne reste plus qu'à convertir une adresse IP et son masque de sous-réseau en adresse de début et adresse de fin, fin prêts pour être utilisés avec INET_ATON. C'est élégant et parfaitement standard. C'est con, mais c'est le genre de solution qu'après presque une décennie de développement je privilégie malgré un effort initial plus important.

Re: Sql et **

par @rthur » 17 avr. 2016, 23:50

Bonjour,

C'est le caractère pourcent % qui est le caractère joker en SQL, à utiliser effectivement avec un LIKE comme indiqué par or1

Re: Sql et **

par or 1 » 17 avr. 2016, 20:48

ip like '123.123.123.1*'
doit fonctionner

Sql et **

par John » 17 avr. 2016, 20:41

Bonjour,

je suis en train de créer un service de banissement pour un serveur de jeu. Cependant, je rencontre quelque problème quant au "rbannissement" qui consisterait à supprimer les deux derniers chiffres d'une adresse ip (ex: 123.123.123.123 -> 123.123.123.1** ) et les remplacer pour des étoiles qui représente n'importe quel chiffre possible. En effet, chaque utilisateur qui se connecte avec une adresse ip commencant par 123.123.123.1(**) et ayant n'importe quel chiffre après serait banni.

Je rencontre des problèmes pour la détection car en effet, lors que la requête sql compare l'adresse IP :123.123.123.123 et 123.123.123.1**, l'utilisateur n'est pas bloqué car ** n'est pas considérer comme n'importe quel chiffre

Auriez vous une solution ?

MErci