Bonjour,
Je vous explique mon souci, et ce que je veux faire.
J'ai une fonction, avec en paramètre une requête SQL, et un motif, les 2 choisis par l'utilisateur.
La requête SQL contient des éléments du type "$1", ou "%2", ou bien pourquoi pas "toto5", $, %, et toto étant respectivement alors le motif que l'utilisateur aura indiqué.
Par exemple, si l'utilisateur choisit "$" comme motif, la requête qu'il pourra vouloir faire sera :
Ou alors, si il choisit une chaine de caractère comme motif, on va prendre "toto", il peut avoir à écrire une requête telle que :Select * from table1 where colonne1 = '$1'
Voici le code que j'ai mis en place pour le moment :Select colonne2 from table6 where colonne1 like 'toto1' and where colonne3 like 'toto2'
La regexp permet de récupérer le début de la requête, puis le chiffre accolé au motif, qui lui subit un traitement pour être remplacé par une valeur existant dans la table en question, puis la fin de la requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 sub Fonction{ my $motif = shift; my $test = "\\"; $motif = $test.$motif; my $request = shift; while ($request =~ /$motif/) { if ($request =~ /(.*)$motif(\d+)(.*)/){ my $value = traitementValue($2); $request = $1.$value.$3; } } }
La bouche while, permet d'effectuer la substitution des chiffres (\d+), pour chaque chiffre qui suit le motif sélectionné.
On remarque que le motif choisi par l'utilisateur subit un traitement en amont, en lui accolant un antislash, afin de déspécifier le caractère (si s'en est un) choisit par l'utilisateur.
Tout cela marche bien tant que le motif choisit par l'utilisateur est un caractère spécial, comme un "$", un "+", "@".
Mais lorsque l'utilisateur choisit un mot comme motif, comme un anti-slash est accolé à ce mot, derrière ça se passe mal ...
Quel est le moyen de pouvoir laisser à l'utilisateur le choix du motif, de manière à ce que le traitement se déroule correctement?
Ai-je un moyen d'éviter de passer par l'utilisation d'une série de IF un peu lourde??
Merci pour votre aide.
Partager