Select avec arguments

Signaler
Messages postés
8
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2012
-
hfdz
Messages postés
8
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2012
-
Bonjour a tous

j'espere que vous pourrez m'aider tres rapidement

voila pour mon programme en java j'ai entre autre une requete qui est la suivante


req"SELECT num_dossier,Date_dossier,Commune,Bien,Type_Acte from dossier where (commune '"+comm+"' or num_dossier='"+numd+"'or Bien='"+bien+"'or Type_Acte='"+typea+"'";

celle ci me renvoi le resultat voulu sans probleme mais quand je rajoute a la fin un LIKE comme ceci


req"SELECT num_dossier,Date_dossier,Commune,Bien,Type_Acte from dossier where (commune '"+comm+"' or num_dossier='"+numd+"'or Bien='"+bien+"'or "
Type_Acte='"+typea+"'or Personnes Like ('%"+TPers+"%'))";

ça fausse tout le resultat
je ne vois pas le probleme

merci d'avance

5 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
259
Bonjour,

Deux choses : Il manque un espace ici typea+"'[espace]or (et pour tous les autres aussi) et tu n'as pas besoin de parenthèses autour de TPers.

Je ne comprend pas ce que tu veux dire avec "ça fausse tout le resultat" ?
Messages postés
8
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2012

Bonjour et merci pour la reponse rapide

en fait voila c'est un moteur de rechrche
quand je laisse la partie avec le LIKE si il y a qqchose de rempli dans la variable "+TPers+" il fait la selection en la prenant en compte mais si c'est une autre variable qui est renseigné comme +typea+, la c'est comme si rien n'etait mis c'est a dire qu'il prends le tout
Messages postés
240
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
19 juillet 2012
2
Bonjour,

Pour t'expliquer ton probléme :
Lorsque tu fait un like tu peut faire aussi sur du "vide", et comme ta syntaxe lui dit de prendre tout ce qui existe avant ou aprés le "vide" cela revient à tout selectionné.

Ensuite juste une remarque : On ne construit JAMAIS (j'insiste la dessus) une requéte sql sans avoir vérifié les variables saisies par un utilisateur. J'espére que dans ton code tu as une méthode qui nettoie les saisies avant de faire ta requéte.

Pour revenir à ton probléme :

Une simple condition devrais suffire :

req"SELECT num_dossier,Date_dossier,Commune,Bien,Type_Acte from dossier where (commune '"+comm+"' or num_dossier='"+numd+"' or Bien='"+bien+"' or "Type_Acte='"+typea+"' ";
if(TPers != null && TPers != "") {
req += " or Personnes Like ('%"+TPers+"%'))";
}

Voila en espérant que cela t'aide.

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
259
Si tu te demandes pourquoi :

On ne construit JAMAIS (j'insiste la dessus) une requéte sql sans avoir vérifié les variables saisies par un utilisateur.


Cherches injection SQL sur google :)

Il te suffit en général de vérifier que ce que l'utilisateur a entré ne contient pas de '
Messages postés
8
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2012

Bonjour

et un grand merci pour vos réponses rapides et vos conseils

mais ça ne résout pas mon problème,

d'apres ce que tu me propose, si je ne mets rien dans le champ personne, il ne devrai donc pas le prendre en consideration et faire la recherche avec ce que je lui fournit via les autres champs.

or une fois que je rajoute ces ligne

if(TPers != null && TPers != "") {
req += " or Personnes Like ('%"+TPers+"%'))";
}

il ne prend plus en consideration les autres champs, si je ne fournis pas Les personnes, et que je fournis un num de dossier valide, il me donne tout
alors qu'il devrait me donner uniquement l'enregistrement ayant ce num de dossier