2010-09-06 5 views
6

Je forme suivante,ASP: request.form ne renvoie pas la valeur?

<form action="contact_us.asp" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <input name="firstname" type="text" id="firstname" size="30" /> 
    <input name="lastname" type="text" id="lastname" size="30" /> 
    <input type="submit" name="submit" id="submit" value="Submit" /> 
</form> 

Mais quand je suis en train d'obtenir la valeur de ces variables post dans mon fichier ASP contact_us.asp il retourne vide. Le code est ci-dessous:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
</head> 
<% 

Dim FirstName, LastName, Email, Message 
FirstName = request.form("firstname") 
LastName = request.form("lastname") 

response.write(FirstName & "OK") 

%> 

Son retour seulement "OK" pour moi. rien dans la variable Message?

S'il vous plaît aidez-moi et dites-moi ce qui ne va pas ici?

+0

? il n'y a pas de message '' (ou 'email' d'ailleurs) dans le HTML ci-dessus. – bobince

+0

Lorsque j'enlève 'enctype =" multipart/form-data "' depuis le tag HTML alors son fonctionnement fonctionne bien et retourne la valeur. – Prashant

+1

Si vous n'avez pas besoin de faire des téléchargements de fichiers, vous pouvez supprimer enctype = "multipart/form-data" – Cris

Répondre

18

ASP classique ne prend pas en charge multipart/form-data. C'est une lacune étonnamment basique même pour une langue de l'âge vénérable d'ASP, mais qu'est-ce que tu vas faire à ce sujet, passer à ASP.NET? (Oui, oh, eh bien alors ne vous en souciez pas.)

Si vous ne téléchargez pas de fichiers, il est plus facile de s'en tenir à la valeur par défaut enctype (application/x-www-form-urlencoded). Le seul avantage de multipart/form-data est que vous pouvez mettre des téléchargements de fichiers dedans. (Théoriquement, cela aurait aussi l'avantage de pouvoir définir définitivement les encodages de caractères, mais aucun navigateur ne le fait.)

Si vous avez besoin de gérer multipart/form-data dans ASP classique, vous devrez analyser le corps de la requête entrante vous-même, le diviser en champs et en valeurs. Ou plutôt, plus généralement, utilisez une bibliothèque existante pour le faire *.

Cette bibliothèque fournira généralement des interfaces séparées pour lire les fichiers téléchargés et les autres valeurs de formulaire. Cela remplace complètement l'utilisation de l'interface Classic ASP Request.Form. Exactement où vous pouvez trouver cela dépend de la bibliothèque que vous choisissez. Cela signifie que si vous voulez avoir un formulaire qui peut répondre à enctype également, vous devez vérifier le type et utiliser l'une des deux interfaces différentes.

*: Il y a des charges. forexample. Je n'approuve pas l'un ou l'autre comme tel ... aucun d'eux n'analyse correctement les multiparts selon la norme et les deux semblent un peu relâchés sur la sécurité du nom de fichier (jamais stocker un fichier sous le nom de fichier fourni par l'utilisateur!). Mais cela semble être normal pour les scripts de téléchargement ASP. Au moins, contrairement à beaucoup, ils ne demandent pas d'argent pour eux.

0

Ne pas utiliser enctype="multipart/form-data"

Retirez que du code et voir si cela fonctionne. Le form-data enctype est utilisé pour télécharger des données, par exemple des fichiers d'image. Vous devez accéder aux éléments de formulaire légèrement différemment si vous utilisez ce enctype.

Si vous téléchargez des données, l'objet ASP que vous utilisez (par exemple ASP Upload) aura des fonctions pour accéder aux champs de formulaire. Request.form("") ne fonctionnera pas.

les valeurs de l'accès aux formulaires seraient le long des lignes de:

Set yourUploadComponent = CreateObject("Your.UploadComponentClassString") 
sFormValue = yourUploadComponent.Form.Item("txtName").Value 

Vous aurez besoin de lire la documentation des objets.

2

J'ai trouvé en enlevant complètement enctype (qui par défaut application/x-www-form-urlencoded) de la balise de formulaire qui Request.Form("SomeInputTagId") a bien fonctionné avec method="post". Je n'ai pas non plus besoin d'installer de lecteurs tiers. J'espère que cela t'aides.

Questions connexes