Select avec arguments

hfdz Messages postés 8 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 12 juin 2012 - 2 janv. 2012 à 15:04
hfdz Messages postés 8 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 12 juin 2012 - 4 janv. 2012 à 17:02
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 janv. 2012 à 16:38
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" ?
0
hfdz Messages postés 8 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 12 juin 2012
2 janv. 2012 à 16:49
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
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
4 janv. 2012 à 11:04
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.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
4 janv. 2012 à 11:16
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 '
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hfdz Messages postés 8 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 12 juin 2012
4 janv. 2012 à 17:02
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
0
Rejoignez-nous