2010-09-06 21 views
6

Ho seguente modulo,ASP: request.form non sta restituendo il valore?

<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> 

Ma quando sto cercando di ottenere il valore di queste variabili pubblicare nel mio file ASP contact_us.asp poi ritorna vuoto. Il codice è qui sotto:

<%@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") 

%> 

Il suo ritorno solo "OK" per me. nulla nella variabile del messaggio?

Per favore aiutami e dimmi cosa c'è che non va qui?

+0

? non c'è '' (o 'email' per quella materia) nel codice HTML precedente. – bobince

+0

Quando rimuovo 'enctype =" multipart/form-data "' dal tag HTML quindi funziona correttamente e restituisce il valore. – Prashant

+1

Se non è necessario effettuare caricamenti di file, è possibile rimuovere enctype = "multipart/form-data" – Cris

risposta

18

L'ASP classico non supporta multipart/form-data. Questa è una carenza sorprendentemente fondamentale anche per un linguaggio della veneranda età di ASP, ma cosa farai al riguardo, passare ad ASP.NET? (Sì? Oh, beh, non importa poi.)

Se non si stanno caricando file, è più semplice attenersi semplicemente al valore predefinito enctype (che è application/x-www-form-urlencoded). L'unico vantaggio di multipart/form-data è che puoi inserire caricamenti di file al suo interno. (Teoricamente, avrebbe anche il vantaggio di poter specificare definitivamente le codifiche dei caratteri.)

Se devi gestire lo multipart/form-data in ASP classico, dovrai analizzare da solo il corpo della richiesta in entrata, dividendolo in campi e valori. O meglio, più tipicamente, usa una libreria esistente per farlo *.

Quella libreria di solito fornisce interfacce separate per la lettura dei file caricati e degli altri valori del modulo. Questo sostituisce completamente l'utilizzo dell'interfaccia Classic ASP Request.Form. Esattamente dove puoi trovarlo dipende dalla libreria che scegli. Ciò significa che se si desidera avere un modulo in grado di rispondere a enctype ugualmente, è necessario controllare il tipo e utilizzare una delle due diverse interfacce.

*: ci sono carichi. forexample. Non sto supportando nessuno di questi in quanto tale ... nessuno di loro in realtà analizza le multiparte correttamente secondo lo standard ed entrambi sembrano un po 'trascurati sulla sicurezza dei nomi (mai memorizzare un file sotto il nome utente inviato! Disastro di sicurezza!). Ma sembra essere la regola per il corso per gli script di caricamento ASP. Almeno, a differenza di molti, non chiedono soldi per loro.

0

Non utilizzare enctype="multipart/form-data"

Rimuovere che dal codice e vedere se funziona. Lo form-data enctype viene utilizzato per il caricamento di dati, ad esempio file di immagine. È necessario accedere agli elementi del modulo in modo leggermente diverso se si utilizza quello enctype.

Se si stanno caricando dati, l'oggetto ASP che si sta utilizzando (ad esempio ASP Upload) avrà le funzioni per accedere ai campi modulo. Request.form("") non funzionerà.

Accesso ai valori forma sarebbe lungo le linee di:

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

Avrete bisogno di leggere la documentazione oggetti.

2

ho trovato rimuovendo completamente enctype (che per impostazione predefinita application/x-www-form-urlencoded) dal tag form che Request.Form("SomeInputTagId") ha funzionato bene con method="post". Inoltre, non avevo bisogno di installare alcun lettore di terze parti. Spero che questo ti aiuti.

Problemi correlati