Nix
Messages postés831Date d'inscriptionsamedi 15 mai 1999StatutMembreDernière intervention18 juillet 2009
-
12 avril 2004 à 12:13
michelsto
Messages postés27Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention12 avril 2009
-
13 avril 2004 à 19:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
michelsto
Messages postés27Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention12 avril 2009 13 avril 2004 à 19:40
Mais Nix à tout à fait raison. J'ai fait cette fonction quand j'ai débuté, il n'y à d'ailleur pas très ongtemps. Et je n'ai pas réfléchi par la suite. Stupide de ma part.
jmlucienvb
Messages postés129Date d'inscriptionmercredi 24 septembre 2003StatutMembreDernière intervention12 février 2009 13 avril 2004 à 14:40
Ok ok...
C'est vrai que je ne suis pas encore décidé à plonger dans le .Net...
Amitiés à Nix
jmluc
Nix
Messages postés831Date d'inscriptionsamedi 15 mai 1999StatutMembreDernière intervention18 juillet 2009 13 avril 2004 à 14:14
La source est indiquée comme .NET c'est pour ça que j'ai apporté mon commentaire en fonction de VB.NET
jmlucienvb
Messages postés129Date d'inscriptionmercredi 24 septembre 2003StatutMembreDernière intervention12 février 2009 13 avril 2004 à 14:10
Désolé mais je vois pas ce qui_ est spécifique à .Net...dans la fonction de michelsto...
Quand à celle de Nix, effectivement return...c'est du .Net mais en vb6 on mettrait :
Public Function DoubleQuote(ByVal pValue As String) As String
DoubleQuote=Replace(pValue,"'","''")
End Function
Ca doit marcher comme ça.
JM
Nix
Messages postés831Date d'inscriptionsamedi 15 mai 1999StatutMembreDernière intervention18 juillet 2009 13 avril 2004 à 13:01
akami, la fonction tu l'as justement
exemple :
"SELECT * FROM MaTable WHERE MonChamp = '" & DoubleQuote(mavaleuradoublequoter) & "'"
Ca parait lourd mais c'est le seul moyen de ne pas se faire script injecter quand on fait une requete sql.
Le mieux pour eviter le script injection reste les procédures stockées avec SQL server, pas besoin de se soucier des quotes.
Tu peux essayer de faire un "analyseur" de requete sql pour parser et double quoter l'ensemble sans avoir à juste double quoter la valeur mais alors bon courrage parce que la moindre erreur dans ta fonction peut être une catastrophe. La meilleur solution reste celle-ci, avoir une fonction qui doublequote une valeur.
akami
Messages postés6Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention 4 décembre 2006 13 avril 2004 à 12:53
C'est vrai la fonction REPLACE est la meilleur.
je felicite encore michelsto pour son humilité à l'egard de Nix.
Mais Imaginez maintenant que vous n'ayez pas penser avant et que vous avez déjà ecrit environ 2000 requêtes dans votre application et que parcourir chaque requête pour placer la fonction REPLACE devient fastidieux. Alors il faut formater le texte de la requête avant de la passer à exécution.
Comment donc ecrire la fonction de formatage?
Nix
Messages postés831Date d'inscriptionsamedi 15 mai 1999StatutMembreDernière intervention18 juillet 2009 13 avril 2004 à 11:55
oui sauf que sa source est une source VB.NET pas vb attention ;)
jmlucienvb
Messages postés129Date d'inscriptionmercredi 24 septembre 2003StatutMembreDernière intervention12 février 2009 13 avril 2004 à 11:45
Si on est en VBA la méthode de michelsto est intéressante car Replace n'existe pas en VBA (au moins jusqu'à 2000)
michelsto
Messages postés27Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention12 avril 2009 12 avril 2004 à 17:47
Exact Nix. Je n'ai pas pris cela comme une critique, et j'ai même adapté chez moi. Merci pour l'info.
Nix
Messages postés831Date d'inscriptionsamedi 15 mai 1999StatutMembreDernière intervention18 juillet 2009 12 avril 2004 à 12:13
Salut,
En plus simple et plus rapide :
Public Function DoubleQuote(ByVal pValue As String) As String
return pValue.Replace("'","''")
End Function
Il ne faut pas oublier que le framework est rempli de fonction comme celle-ci et surtout très optimisées.
C'est pas une critique, juste un façon plus simple de le faire ;)
13 avril 2004 à 19:40
13 avril 2004 à 14:40
C'est vrai que je ne suis pas encore décidé à plonger dans le .Net...
Amitiés à Nix
jmluc
13 avril 2004 à 14:14
13 avril 2004 à 14:10
Quand à celle de Nix, effectivement return...c'est du .Net mais en vb6 on mettrait :
Public Function DoubleQuote(ByVal pValue As String) As String
DoubleQuote=Replace(pValue,"'","''")
End Function
Ca doit marcher comme ça.
JM
13 avril 2004 à 13:01
exemple :
"SELECT * FROM MaTable WHERE MonChamp = '" & DoubleQuote(mavaleuradoublequoter) & "'"
Ca parait lourd mais c'est le seul moyen de ne pas se faire script injecter quand on fait une requete sql.
Le mieux pour eviter le script injection reste les procédures stockées avec SQL server, pas besoin de se soucier des quotes.
Tu peux essayer de faire un "analyseur" de requete sql pour parser et double quoter l'ensemble sans avoir à juste double quoter la valeur mais alors bon courrage parce que la moindre erreur dans ta fonction peut être une catastrophe. La meilleur solution reste celle-ci, avoir une fonction qui doublequote une valeur.
13 avril 2004 à 12:53
je felicite encore michelsto pour son humilité à l'egard de Nix.
Mais Imaginez maintenant que vous n'ayez pas penser avant et que vous avez déjà ecrit environ 2000 requêtes dans votre application et que parcourir chaque requête pour placer la fonction REPLACE devient fastidieux. Alors il faut formater le texte de la requête avant de la passer à exécution.
Comment donc ecrire la fonction de formatage?
13 avril 2004 à 11:55
13 avril 2004 à 11:45
12 avril 2004 à 17:47
12 avril 2004 à 12:13
En plus simple et plus rapide :
Public Function DoubleQuote(ByVal pValue As String) As String
return pValue.Replace("'","''")
End Function
Il ne faut pas oublier que le framework est rempli de fonction comme celle-ci et surtout très optimisées.
C'est pas une critique, juste un façon plus simple de le faire ;)