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

Requêtes MySQL Discussion :

comment bloquer les % avec like MySql


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Points : 33
    Points
    33
    Par défaut comment bloquer les % avec like MySql
    Bonjour,

    Je voudrais distribuer des coupons cadeau. Le problème que si on utilise le % à la place du code ça fonctionne alors que ça ne devrait pas.

    Ma requête pour tester si le coupon existe est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from coupontable where code like codecouponàtester
    j'utilise pourtant les fonctions prepare() et execute() pour mes requêtes.

    Quelqu'un a une idée ?

  2. #2
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Selon vos besoins, utilisez une expression régulière ou un simple str_replace().

    Cordialement,

    Jc.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pas sûr d'avoir compris le problème mais si tu ne veux pas de %, remplace le LIKE par un = !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Points : 33
    Points
    33
    Par défaut
    merci pour vos réponses. Pour l'instant j'ai utilisé str_rplace().

    Par contre, je sais pas si ca fonctionne si on utilise une expression régulière à la place du coupon cadeau (code) mais je pense que oui.

    coupon cadeau est un varchar j'utilise donc like et donc pas =. Ai-je tort ?

  5. #5
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    1) Coté SQL, le str_replace (PHP) ou REPLACE() (SQL) est le plus adapté et peut donc être fait au niveau de la requête
    2) Au niveau expression régulière dans ce cas de figure il est plus adapté de l'utiliser côté PHP avec un preg_replace(). Cependant si le % est le seul caractère à filtrer, le str_replace est plus adapté et performant dans ce cas.

    Pour le coupon cadeau, il faut faire une comparaison stricte avec = pour éviter les problèmes de sécurité.

    Le meilleur conseil que je puisse vous donner, de manière à préserver la qualité de vos données en toute circonstances, c'est de contrôler le type et la valeur de tous vos paramètres à tous les stades applicatif, et ne pas faire confiance aux variables passés au niveau SGBDR et donc d'y avoir la même démarche. Vous y gagnerez beaucoup à tous les niveaux.

    Cordialement,

    Jc.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    merci de ta réponse. J'ai changé le "like" par un "=", ce qui résout le problème du %.

    Par contre, si un utilisateur tente une expression régulière je ne sais pas comment le code va réagir. Est ce que la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from coupontable where coderentré = [a-z]*
    peut fonctionner ? (ou un truc du genre) Comment l'éviter ?

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai l'impression que tu as besoin de cours sur le SQL !

    Ta première requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) FROM coupontable WHERE code LIKE codecouponàtester
    Elle signifie, entre autres, que la table "coupontable" comporte une colonne nommée "code".

    Si tu fais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(*) 
    FROM coupontable WHERE code = '.$codecouponàtester.'
    Et si tu protèges bien la variable passée à la requête pour éviter les injections SQL, tant que l'utilisateur n'aura pas fourni un code de coupon existant dans la table, la requête retournera zéro.

    Si par contre tu fais ta deuxième requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM coupontable WHERE coderentré = [a-z]*
    Et que "coderentré" est le code saisi par l'utilisateur, ta requête ne retournera probablement jamais de résultat et provoquera par contre une erreur parce que [a-z]* sans guillemets et sans fonction REGEXP ne peut pas être compris par MySQL.
    Et si tu utilises la fonction REGEXP, il est fort probable que la requête renverra toute la table !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Points : 33
    Points
    33
    Par défaut
    Merci CinePhil. Les 3 dernières lignes de ton post ont répondu à ma question.

    Merci à tous

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

Discussions similaires

  1. [horde/imp] comment bloquer les profils
    Par oligig dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 05/10/2007, 09h38
  2. Réponses: 6
    Dernier message: 12/09/2007, 10h01
  3. Comment bloquer les photos sur mon site
    Par footeuse13 dans le forum Sécurité
    Réponses: 5
    Dernier message: 08/08/2007, 16h54
  4. Réponses: 1
    Dernier message: 26/04/2007, 23h47
  5. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33

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