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

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

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.