[ASP.NET/VB.NET] GUID dans une URL [Résolu]

Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 10 déc. 2004 à 18:55 - Dernière réponse :
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 15 déc. 2004 à 23:28
3
Merci
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

Merci jesusonline 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de jesusonline
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 10 déc. 2004 à 18:58
0
Merci
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
Commenter la réponse de Netlink
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 10 déc. 2004 à 22:04
0
Merci
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
Commenter la réponse de jesusonline
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 11 déc. 2004 à 21:14
0
Merci
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
Commenter la réponse de Netlink
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 11 déc. 2004 à 22:27
0
Merci
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
Commenter la réponse de jesusonline
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 11 déc. 2004 à 23:49
0
Merci
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
Commenter la réponse de Netlink
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 12 déc. 2004 à 00:22
0
Merci
regarde la fonction replace qui existe aussi bien sql que dans vb.net
enfin il me semble

Cyril
Commenter la réponse de jesusonline
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 15 déc. 2004 à 21:19
0
Merci
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
Commenter la réponse de Netlink
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 15 déc. 2004 à 22:54
0
Merci
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
Commenter la réponse de Netlink
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Dernière intervention
12 juillet 2011
- 16 déc. 2004 à 17:28
0
Merci
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
Commenter la réponse de Netlink
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 16 déc. 2004 à 19:13
0
Merci
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
Commenter la réponse de jesusonline

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.