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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    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 chevronné
    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 : 53
    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
    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
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    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 chevronné
    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 : 53
    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
    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
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    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 ?

+ 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