|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Bonjour,
je travaille toujours sur mon formulaire de recherche et j'ai un problème lors de la construction de la requête permettant de faire la recherche. Je m'explique... J'ai donc un formulaire de recherche qui contient: - une liste de champs (champs de certaines tables de ma base de données) - une liste d'opérateurs (par exemple: "est égal", "est différent de"...) - un champ input pour saisir une valeur. Le formulaire complété permet donc d'obtenir la requête suivante: "select * from maTable where". $champ . $operateur .$valeur; Le problème c'est que mes champs sont de type "entier" ou "string" ou date".... Donc si dans mon champ input je saisi une valeur d'un type différent du type du champ sélectionné dans ma liste, lors de la construction de ma requête, j'obtiens une erreur. Un exemple pour être plus clair: - je sélectionne dans ma liste des champs "id" qui est de type entier - comme opérateur je choisit "est égal" - comme valeur j'ai "abc". J'obtiens la requête: Code :
Quelqu'un aurait-il une idée sur comment gérer ce type d'erreurs ? Merci d'avance pour vos réponses. |
||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Développeur Web Inscription : octobre 2009 Messages : 72 ![]() |
Tu peux faire une première verif en javascript qui éviterait des requêtes inutiles via les regexp.
|
|
|
01
|
|
|
#3 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Merci pour ta réponse,
est-ce que tu pourrais être plus explicite? Il faudrait que je crée une fonction javascript qui test si la valeur entrée correspond au type de la variable dans ma base? Mais comment récupérer son type???? Encore merci pour ton aide mais j'aurai besoin de plus d'éclaircissement |
|
|
00
|
|
|
#4 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
La validation javascript n'est qu'une surcouche pour rendre la saisie plus user friendly, mais il ne faut jamais se passer de validation du côté serveur.
Zend à bien sûr implémenté ceci : http://framework.zend.com/manual/fr/....elements.html chapitre sur les validators.
__________________
|
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Effectivement, j'ai déjà eu à utiliser ces validators pour d'autres formulaires de saisie.
Mais dans mon cas ici, je ne vois pas comment récupérer le "type" des champs qu'on peut sélectionner dans ma liste déroulante. Je parle bien du type des champs dans ma base ( numeric, text....), car dans ma requête je compare les champs sélectionnés aux valeurs saisies dans le champ INPUT et l'utilisateur peut être amené à saisir pour un champ donné de type 'numeric' une valeur de type 'texte'. Alors lors de l'éxecution de ma requête, une erreur est donc lancée..... Comment peut on gérer cela???? J'ai évidemment pensé aux validateurs mais comment récupérer le type du champ dans ma base??? (je me répète là je crois... Merci |
|
|
00
|
|
|
#6 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Si tu utilises Zend_Db_Table_Select et les requêtes préparées, il me semble que le type de données est géré. Au moins au niveau de la différence string/int.
__________________
|
|
|
00
|
|
|
#7 | ||||||||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Peux-tu être plus précis.
J'utilise en effet Zend_Db_Table_Select avec des requêtes préparées. J'ai l'impression que tu ne comprends pas mon problème ou bien c'est moi qui n'est rien compris, je vais donc essayer de me réexpliquer: j'ai un formulaire de recherche de la forme ci-dessous Code :
"monChamp1=test et monChamp4>6 " ... Dans mon controleur je construis ma requete à partir des éléments renvoyé par le formulaire en utilisant Zend_Db_Table_Select: Code :
Mon problème c'est que dans mon champ 'value' je peux saisir une valeur de type 'text' alors que le champ sélectionné dans la liste des champs doit recevoir une valeur de type 'int'. J'obtiens par exemple la requête: Code :
Code :
Comment faire??? Merci pour tes réponses et j'espère que l'on va réussir à trouver la solution qui convient! |
||||||||
|
|
00
|
|
|
#8 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Ce que je voudrais connaître, c'est ce qu'il se cache derrière ceci :
Code :
__________________
|
||
|
|
00
|
|
|
#9 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Bonjour,
voilà comment je construis ma clause WHERE: Code :
|
||
|
|
00
|
|
|
#10 | ||||||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 174 ![]() |
Concrètement, le code suivant :
Code :
Quand tu pousses sur le bouton tu l'envoie dans une action d'un controller. A partir de là tu vérifies le contenu de cet Input, avec un validator, voir un filtre Dans ton action Code :
On peut aller plus loin, en disant filtrant les données, imagine que j'ai mis un blanc par erreur ou un signe par erreur, et bien d'abord je filtre Code :
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||||||
|
|
00
|
|
|
#11 | |||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
![]() Je reviens plus tard si j'ai le temps de t'expliquer comment faire.
__________________
|
|||
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
ok, merci snafu
j'attends donc ta réponse pour le moment je vais commencer à chercher sur google |
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Finalement je ne vois pas en quoi ces requêtes préparées pourront m'aider à résoudre mon problème.
Je ne comprends pas ce à quoi ça sert. J'attends donc avec impatience une aide un éclaircissement sur la chose... Merci d'avance! |
|
|
00
|
|
|
#14 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 174 ![]() |
Pour ce qui est de ta problématique au premier post, je t'ai donner une solution
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#15 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Merci, j'y ai également pensé mais ça ne peut pas s'appliquer ici.
D'ailleurs snafu m'avait proposé la même solution dans son premier post. Dans mon cas le type de mon champ "value" diffère selon le type du champ sélectionné dans la première liste. Pour exemple de champs que je peux trouver dans ma première liste: - identifiants de type int => dans "value" je dois saisir un int - titre/commentaires.... de type text => dans "value" je dois saisir une chaine de caractères - dates => dans "value" je dois saisir une date - ..... Je dois donc appliquer un validateur ('Zend_Validate_Digits' ou 'Zend_Validate_Alpha' ou ...) en fonction du type du champ sélectionné dans la première liste. Le problème c'est comment récupérer le type de ce champ???? |
|
|
00
|
|
|
#16 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
ça y est il n'y a plus personne,
aurais-je fais fuir tout le monde avec mon problème? Je n'espère pas, je suis toujours dans l'attente d'une réponse qui pourrait m'aider, ca fait longtemps maintenant que je cherche une solution mais rien... Merci d'avance. |
|
|
00
|
|
|
#17 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 174 ![]() |
on peut voir la liste déroulante, à quoi les valeurs corresponde ?
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#18 | ||||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Les valeurs de ma première liste déroulante correspondent aux noms de mes champs.
Dans mon formulaire, ils sont intégrées dans ma liste de la façon suivante: Code :
Code :
|
||||
|
|
00
|
|
|
#19 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Désolé, je suis vraiment surchargé.
Je pense que tu l'as déjà lu, mais cette page sera ta référence : http://framework.zend.com/manual/fr/zend.db.select.html Particulièrement le chapitre "Ajouter une clause WHERE" Exemple #17 Exemple d'un paramètre de type tableau pour la méthode where() Code :
Et pour voir tes requêtes, n'oublie pas de lire ceci également : http://framework.zend.com/manual/fr/....profiler.html en particulier ce passage, très facile à mettre en application avec firefox : "Profiler avec Firebug"
__________________
|
||
|
|
00
|
|
|
#20 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
Merci pour votre aide...
Finalement, j'ai procédé autrement: j'ai une table qui contient les attributs de chaque table concernée avec leur type sql. J'applique un validateur à mon élément 'value' de mon formulaire, en fonction du type sql de l'attribut sélectionné. Voilà! Si ça peut aider.... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com