[ASP.NET/VB.NET] GUID dans une URL

Résolu
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011 - 10 déc. 2004 à 18:55
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 16 déc. 2004 à 19:13
Bonjour,

Je me heurte à un problème lorsque je souhaite inclure un GUID et le récupérer via un QueryString...

J'ai une erreur!

Comment faut-il procéder ? Lorsque je fais :

Request.QueryString("s") = strG


sachant que :
- "s" est le GUID (Replication ID dans Access), qui permet d'identifier l'article à éditer ;
- "strG" récupère ce GUID afin de l'insérer dans une requête UPDATE, du genre :

UPDATE Articles SET ID strG, ArTitre txtArTitre.Text, ArAuteur = ddlArAuteur.SelectedItem, ArContenu = esp_ArContenu_Default.Text, ArStatus = rbArStatus.Value


Je ne sais pas si j'ai bien expliqué mon problème...

Merci d'avance !

@ bientôt, Mathieu aka Netlink

11 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
15 déc. 2004 à 23:28
d'apres cette page, la fonction replace existe pour sqlserver oralce et mysql :

http://sql.developpez.com/sqlaz/fonctions/

sinon je ne suis pas encore un pro de sql mais cela pourrait venir des arobases, qui servent à declarer les variables bien que ca m'etonnerait.

essaye comme ca :
SELECT champ1, champ2 FROM Test WHERE ID = '" & Request.QueryString("s") & "'"

j'ai entouré la variable d'apostrophe ...
sinon va voir sur sqlfr.com ton problème vient maintenant de SQL :) et je ne peux plus trop t'aider.

Cyril
3
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
10 déc. 2004 à 18:58
Ah mince une erreur dans la requête UPDATE :

UPDATE Articles SET ArTitre txtArTitre.Text, ArAuteur ddlArAuteur.SelectedItem, ArContenu = esp_ArContenu_Default.Text, ArStatus = rbArStatus.Value WHERE ID = strG


La requête marche, mais lorsque je veux afficher l'article en utilisant le GUID pour l'appeler, impossible, j'obtiens une erreur !

@ bientôt, Mathieu aka Netlink
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 déc. 2004 à 22:04
Je suis pas sur d'avoir saisi le problème.
t'as page à l'url :
http://site.com/tapage.aspx&s=1324-1234-1234-1234

t'as essayé de faire un simple response.write(request.querystring(s))

pour voir si la valeur du querystring est bien la bonne ?

et puis evites les requetes injectés, mais fait plutot des procédure stockés, imagine que je tape une URL de ce genre
http://site.com/tapage.aspx&s=Suppresion%20de%20ta%20base

faut faire gaffe :)

Cyril
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
11 déc. 2004 à 21:14
Oui...

Mais je ne sais pas trop comment faire des procédures stockées avec Access... :-S

Sinon oui j'ai une URL du type :
http://site.com/tapage.aspx&s=1324-1234-1234-1234

Et sur la page, s'affiche un contenu dont l'identifiant est "1324-1234-1234-1234", ainsi qu'un lien vers le fichier à télécharger.

Cet identifiant est généré aléatoirement sous forme de GUID donc, pour que le fichier ne soit téléchargé qu'une seule fois par l'utilisateur...

Donc pour expliquer vite fait, lorsqu'un utilisateur s'inscrit pour télécharger le fichier, on génère un GUID, on le stocke dans la base de données. On envoie un mail à l'utilisateur pour lui indiquer le lien de téléchargement (de la forme "page.aspx?s=1324-1234-1234-1234&fichier=8" (8 est l'identifiant du fichier)). Lorsque l'utilisateur a cliqué sur le lien, son enregistrement contenant le GUID dans la base de données est effacé, et donc il ne peut plus télécharger ce fichier, sauf en se réinscrivant sous un autre compte...
Un peu complexe, mais cela permet aux simples utilisateurs enregistrés de ne pas avoir un accès illimité aux fichiers comme les utilisateurs enregistrés comme "VIPs"...

Et d'autre part, si tu as des infos pour utiliser les procédures stockées avec Access (je crois avoir déjà vu ça mais où ?....) je suis preneur ;-))

@ bientôt, Mathieu aka Netlink
0

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

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 déc. 2004 à 22:27
J'utilise msde, j'ai jmais utilisé access ...

pour ce qui est de ton problème, je comprend deja mieux le but, et je trouve que c'est une joli solution :) ton problème vient peut etre des tirets, tu peux pas generer un code aléatoire à partir de vb.net, et le mettre dans ta bdd, et le mettre sans les tirets.

Pour sql, les tirets et les procédures stockés regarde peut etre par ici http://sql.developpez.com/

j'ai pas plus d'idées pour l'instant

Cyril
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
11 déc. 2004 à 23:49
Oui je pense aussi que le problème vient des tirets, parce que lorsque j'utilise des identifiants "classiques", du genre 1, 2, 3... ça marche très bien...

Donc sinon pour les procédures stockées, après une brève recherche sur Google, j'ai trouvé un article sur ASP-PHP :
http://www.asp-php.net/tutorial/asp-php/proc_stockee.php

Ils appellent ça des requêtes enregistrées plutôt que des procédures stockées.

Sinon sur le lien que tu m'as donné, je viens d'aller voir je n'ai rien trouvé. Par contre il y a quelques trucs sur Access et le langage SQL qui m'ont l'air intéressant vu que j'ai encore des progrès à faire !!!

Voilà, donc je vais essayer de supprimer les tirets du GUID en l'insérant dans une variable de type String, supprimer les tirets et insérer dans la base de données.
Je crois que pour ça il faut utiliser une RegExp non ?

@ bientôt, Mathieu aka Netlink
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 déc. 2004 à 00:22
regarde la fonction replace qui existe aussi bien sql que dans vb.net
enfin il me semble

Cyril
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
15 déc. 2004 à 21:19
Bonsoir !

Je n'ai pas réussi à trouver d'informations sur la fonction Replace en SQL, par contre en VB.NET, ça semble marcher!

Donc j'ai fait un Replace("-", "%T") lors de l'insertion pour la preimère fois dans la base de données, et donc le GUID qui circule dans l'URL est déjà formaté, et lors de la récupération du QueryString, je n'ai plus d'erreur !

Merci pour tes indications Cyril je n'avais pas pensé à utiliser Replace ^^

Maintenant il me reste à utiliser les requêtes enregistrées comme tu me l'as suggéré pour plus de sécurité !

@ bientôt, Mathieu
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
15 déc. 2004 à 22:54
Pfff ça ne marche plus :'(

J'obtiens cette erreur :

 Erreur de syntaxe (opérateur absent) dans l'expression 'ID = 653f3e64@5415@49a2@8e2d@392af06f235f'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.OleDb.OleDbException: Erreur de syntaxe (opérateur absent) dans l'expression 'ID = 653f3e64@5415@49a2@8e2d@392af06f235f'.

Source Error:

Line 13:         Dim cmd As New OleDbDataAdapter(SQL, conn)
Line 14: 
Line 15:         cmd.Fill(ds, "Test")
Line 16: 
Line 17:         DataList1.DataSource = ds.Tables("Test").DefaultView

Source File: C:\WEBSERVER\domaine.com\testGUID\Afficher.aspx.vb    Line: 15 


Comme on peut le voir j'ai essayé de remplacer dans le GUID, "%T" par des "@" dans le Replace, mais ça me donne toujours cette erreur...

Une idée ? :-S

Voici le code pour le replace :

Sub Page_Load(ByVal source As Object, ByVal e As EventArgs)
        Dim strGUID As String = Guid.NewGuid.ToString()
        txtID.Text = strGUID.Replace("-", "@")
    End Sub


Et celui de la requête de selection :

SELECT champ1, champ2 FROM Test WHERE ID = " & Request.QueryString("s")


Lors de l'insertion dans la base, aucune erreur, ça marche très bien...

@ bientôt, Mathieu
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
16 déc. 2004 à 17:28
Waouw ;-)

Cette fois-ci je pense que c'est la bonne ça marche avec les apostrophes !

Pour le SQL, oui ok mais moi j'utilise Access et je ne crois pas qu'il y ait les mêmes fonctions pour tous les SGBDR

En tout cas merci beaucoup lol le coup des apostrophes j'y avais pas pensé ^^

@ bientôt, Mathieu
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
16 déc. 2004 à 19:13
ok pour acces effectivement on peut pas faire grand chose avec, et la fonction replace n'est pas pris en compte pour access, l'url que je t'ai donné le dit :)

sur ce bonne prog

Cyril
0
Rejoignez-nous