Récupérer données request.form ou aspsmartupload ?

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 513 fois - Téléchargée 36 fois

Contenu du snippet

Salut à tous !
J'ai longtemps cherché comment récupérer des champs provenant soit d'un formulaire contenant des fichiers (donc envoyé en ENCTYPE="multipart/form-data"), soit d'un formulaire "normal" (utile si on utilise par exemple la même page pour afficher une liste de données correspondant à des critères de recherches, pour valider la modification d'une donnée, la supprimer,...). Comment savoir quand utiliser request.form et aspsmartupload ?

Voila ma solution... Peut être pas la meilleure, mais elle me fait gagner pas mal de temps maintenant !
Il suffit de récupérer toutes les données en début de page d'une façon où de l'autre suivant le cas, et de les enregistrer dans un dictionnaire. Ainsi, on pourra faire appel aux éléments de ce dictionnaire (et donc, les champs du formulaire précédent) dans toute la page, et ce, de la même façon que l'on vienne d'un formulaire envoyé en multipart/form-data ou normal.

Le code que je vous met gère en fait 2 dictionnaires différents :
Un pour les champs "courants" (attention, il enregistrera aussi les boutons comme étant des champs)
Et un autre pour mes critères de recherches : Dans mon cas, l'utilisateur accède à une liste qui correspond à ses critères (Tous les "name" des champs critères commencent par "rec_" afin de pouvoir par la suite les différencier des autres : ex <input type="text" name="rec_motclé">).
Il peut ensuite naviguer dans les résultats (modifier / ajouter / ...), et donc changer de pages et il retrouve la liste correspondant à ses critères de recherche (il faut donc afficher sur toutes les pages tout les champs des critères de recherche).
Mémoriser les champs de mes critères de recherches dans un dictionnaire séparé me permet donc d'afficher rapidement via une boucle tout mes critères dans des champs cachés.

Bon, je suis pas des plus excellent dans la rédaction, vous l'auerz surement remarqué, mais j'espère avoir été clair. Sinon, regardez le code, il est pas bien compliqué, ou posez moi des questions !
A bientôt
Matt

Source / Exemple :


<%
' Script créé par matche
' matthieu.dev@laposte.net

'  ************************
' Script pour récupérer toutes les données 
' dans des dictionnaires
'  ************************

'  *********
' Création des 2 dictionnaires
'  *********
Dim listForm ' Pour les champs "courants"
Set listForm = Server.CreateObject("Scripting.Dictionary")
listForm.CompareMode = VBTextCompare ' => Pour ne pas faire de différence entre majuscule / minuscule

Dim listRec ' Pour les champs de recherche
Set listRec = Server.CreateObject("Scripting.Dictionary")
listRec.CompareMode = VBTextCompare ' => Pour ne pas faire de différence entre majuscule / minuscule

'  *********
' Si les données proviennent d'un formulaire "normal"
' On récupère toutes les données avec des request.Form
'  *********
if left(request.ServerVariables("CONTENT_TYPE"),11) = "application" then 

     For Each Champ in Request.Form

' Récupère dans un dictionnaire listRec les éléments correspondant aux critères de recherche
        if left(Champ, 4) = "rec_" then 
            listRec.Add Champ, Request.Form(Champ)
        else
' et dans un autre dictinnaire les autres éléments
            listForm.Add Champ, Request.Form(Champ)
        end if
    Next

'  *********
' Sinon, on vient d'une page qui envoi un fichier
' On récupère toutes les données avec le composant aspsmartupload 
'  *********
elseif left(request.ServerVariables("CONTENT_TYPE"),9) = "multipart" then
' Mise en place du composant
    Dim mySmartUpload
    Dim file
    Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
    mySmartUpload.DenyPhysicalPath = True
    mySmartUpload.MaxFileSize = 2097152
    mySmartUpload.Upload

' récupération des champs dans les 2 dictionnaires
    For each item In mySmartUpload.Form
        if left(item, 4) = "rec_" then 
            listRec.Add item, mySmartUpload.Form(item)
        else
            listForm.Add item, mySmartUpload.Form(item)
        end if
    Next
end if

'  ************************
' Pour pouvoir ensuite récupérer les éléments du dictionnaire
' Sur la page
'  ************************
titre = listForm("nom_du_champ")

'  ************************
' Agir sur les fichers
'  ************************
For each file In mySmartUpload.Files
    ...
next

'  ************************
' Et boucle qui permet d'afficher les champs cachés de tout
' les critères de recherche
'  ************************
akeys = listRec.Keys
aitem = listRec.Items
For i = 0 To listRec.Count - 1%>
<input type="hidden" name="<%=akeys(i)%>" value="<%=aitem(i)%>">
<%next
%>

Conclusion :


Pour toutes questions, n'hésitez pas à m'envoyer un mail

A voir également

Ajouter un commentaire

Commentaires

greatmonarch
Messages postés
8
Date d'inscription
jeudi 18 août 2005
Statut
Membre
Dernière intervention
22 septembre 2008
-
C'est un code prévu pour transmettre des infos d'un page web à une autre ?

J'ai déjà utilisé des trucs comme ça en asp, mais c'était juste pour le déboguage, imprimer près de 100 paramètres et éplucher le tout. (utilisé dans le process de tarification de ce site:
www.circleevent.com)

Jean=Marc LAMBERT
Jack9292
Messages postés
1
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
8 février 2006
-
J'ai essayé de l'adapter pour un quizz sur un autre site ( www.alternativeinformatique.com ) mais je n'y suis pas arrivé. Galère pour récupérer les données correctement... Mais je ne désespère pas !

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.