Foros del Web » Programando para Internet » ASP Clásico »

envio de formulario complejo

Estas en el tema de envio de formulario complejo en el foro de ASP Clásico en Foros del Web. hola estoy haciendo un formulario muy complejo lo que hago es primero validar los campos con script de vSscript - despues guardo los datos del ...
  #1 (permalink)  
Antiguo 20/09/2007, 02:47
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 23 años, 1 mes
Puntos: 8
envio de formulario complejo

hola estoy haciendo un formulario muy complejo

lo que hago es primero validar los campos con script de vSscript

- despues guardo los datos del form en una base de datos y

- despues envio los datos del formulario por correo electronico

este form tambien puedo subir un fichero al sevidor con Xelupload

pero me ocurre un error cuando me ha validado el formulario

dejo el codigo en txt aqui www.esigual.com/form.txt

alguien le puede hacar un vistazo,

es que me sale el error
" Objeto Request, ASP 0206 (0x80004005)
No se puede llamar a BinaryRead después de usar la colección Request.Form"
  #2 (permalink)  
Antiguo 20/09/2007, 06:42
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 23 años, 2 meses
Puntos: 8
Re: envio de formulario complejo

Supongo que en el mensaje de error te dirá en qué línea se produce. Es un información que podría ser "bastante útil" dada la extensión del script...
__________________
Kelpie
  #3 (permalink)  
Antiguo 20/09/2007, 06:48
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 23 años, 1 mes
Puntos: 8
Re: envio de formulario complejo

No se puede llamar a BinaryRead después de usar la colección Request.Form.
llibreries/xelupload.asp, línea 60


adjunto el fichero xelupload.asp (en formato txt)

www.esigual.com/xelupload.txt


gracias de antemano
  #4 (permalink)  
Antiguo 20/09/2007, 06:57
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 23 años, 2 meses
Puntos: 8
Re: envio de formulario complejo

En la línea 137 del fichero 'form.txt' tienes la línea:

Código:
quevol = request.form("quevol")
Prueba a comentarla y a ver si te funciona.

Si no te funciona, postea.
Si te funciona, piensa en otra manera de recibier el valor de 'quevol'.
__________________
Kelpie
  #5 (permalink)  
Antiguo 20/09/2007, 08:05
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 23 años, 1 mes
Puntos: 8
Re: envio de formulario complejo

que anulado la linea 137 del form.asp

pero me sigue saliendo el error:

"Tipo de error:
Objeto Request, ASP 0206 (0x80004005)
No se puede llamar a BinaryRead después de usar la colección Request.Form.
/sumerweb/admin/llibreries/xelupload.asp, línea 60"

el error esta en el xelupload.asp
  #6 (permalink)  
Antiguo 20/09/2007, 08:16
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 23 años, 2 meses
Puntos: 8
Re: envio de formulario complejo

Si, el error salta en xelupload.asp, pero el origen está en otro sitio.

El error se produce porque una vez que se ha utilizado (basta con referenciar) el objeto Request.Form ya no se puede emplear el método BinaryRead. Lo que hay que encontrar es dónde se emplea Request.Form antes de instanciar el objeto xelupload, e invocar el método upload(), que es donde salta el error...

Dame un ratín...
__________________
Kelpie
  #7 (permalink)  
Antiguo 20/09/2007, 08:28
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 23 años, 1 mes
Puntos: 8
Re: envio de formulario complejo

si te fijas en los imputs utilizo request.form() ya que con el validador de campos si falla algun campo me pinta los campos que ya estan escritos

el codigo del validador de campos

Código HTML:
Function ValidateField(sFieldvalue, sFieldtype)
 ValidField = true
 Select Case LCase(sFieldtype)
  Case "nom"
  If Len(sFieldvalue) < 2 Then ValidField = False  
  Case "cognoms"
  If Len(sFieldvalue) < 2 Then ValidField = False
  Case "horari"
  If Len(sFieldvalue) = 0 Then ValidField = False
  Case "tel_1"
  If Len(sFieldvalue) < 8 Then ValidField = False
  Case "adreca"
  If Len(sFieldvalue) < 2 Then ValidField = False
  Case "poblacio"
  If Len(sFieldvalue) < 3 Then ValidField = False
  Case "provincia"
  If Len(sFieldvalue) < 3 Then ValidField = False
  Case "codi_post"
  If Len(sFieldvalue) < 5 Then ValidField = False
  
  Case "mail"
   If Len(sFieldvalue) < 5 Then
    ValidField = False
   Else
    If InStr(1, sFieldvalue, "@", 1) < 2 Then
     ValidField = False
    Else
     If InStr(1, sFieldvalue, ".", 1) < 4 Then
      ValidField = False
     End If
    End If
   End If  
  Case "else"
   ValidField = False
 End Select
ValidateField = ValidField
End Function

y en el final de la pagina hay la otra parte del validador

Código HTML:
 <%Set dictFields = Server.CreateObject("Scripting.Dictionary")
For Each Field in Request.Form
If ValidateField(Request.Form(Field), Field) = False Then
dictFields.Add LCase(Field), true
End If
Next
If Request.Form.Count <> 0 And dictFields.Count  = 0 Then
%>
          <br>
           <br>
           <br>
           <br>
           <br>
           <br>
           <br>
           <br><br />
<div align="center">
           <span class="text_titol_camp"><b>Gr&agrave;cies<br>
             </b>               Aviat ens posarem amb contacte<br />
           [ <a href="#" class="contentstyle2" onclick="javascript:window.close()">Tanca la finestra</a> ]             </span>
             <%
Call guarda
Else
ShowForm
End If
%> 
  #8 (permalink)  
Antiguo 20/09/2007, 09:55
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 23 años, 2 meses
Puntos: 8
Re: envio de formulario complejo

Es el último pedazo que has puesto.

En la línea 647 de form.txt

For Each Field in Request.Form

Ahí es donde se emplea antes de instanciar el objeto. Ese es el problema.

Yo me plantería buscar una alternativa a ReadBytes. Emplea request.Form en su lugar y valida bién cada campo, por ejemplo.
Lo contrario sería modificar el pedazo de código que empieza en la línea 647 que te he comentado para que no emplee Request.Form. (Ojo, si buscando algo en el objeto Request sin especificar la colección 'form' también es peligroso puede ASP puede, internamente, referenciar la colección form y estamos en las mismas).

Por cierto, y no te enfades, pero tabular el código ayuda bastante (aunque los grandes carteles de comentarios que tienes al inicio de cada función lo suplen bastante bién), y poner los comentarios en castellano permite que, en el caso de que alguien que no hable tu idioma revise el código, sepa por donde anda. (OJO, es solo un comentario distendido..., no te enfades por ello )
__________________
Kelpie
  #9 (permalink)  
Antiguo 20/09/2007, 11:15
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: envio de formulario complejo

El problema es que no puedes utilizar Request cuando estás utilizando una lectura binaria que es el caso del upload, tienes que cambiar la forma en la que recuperas los campos por los métodos provistos por el xelupload.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 20/09/2007, 11:47
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 23 años, 1 mes
Puntos: 8
Re: envio de formulario complejo

Ok muchas gracias

lo de validar el formulario, he pensado en un javascript pero no encuentro ninguno que me valga (y yo de javascript como que no)

si teneis alguna sujerencia

Kelpie
Lo tendre en cuenta para la proxima
  #11 (permalink)  
Antiguo 21/09/2007, 06:28
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 23 años, 2 meses
Puntos: 8
Re: envio de formulario complejo

Aquí te dejo un proceso típico de comprobación en JavaScript. Si quieres investigar más date una vuelta por este POST o mándame un privadín
Código:
<html>
<head>
	<title>Untitled</title>
	<script>
	function validaEnvia(nombreForm){
		//Kelpie 2007
		//Intentamos obtener el objeto formulario...
		obj=window.document.getElementById(nombreForm);
		if (!obj) obj=window.document.forms[nombreForm];
		if (!obj) obj=eval("window.all."+nombreForm);
		//Si lo hemos logrado
		if (obj){
			//Preparamos una variable para mostrar avisos
			mensaje="";
			//Y un objeto para darle el foco
			objFoco=null;
			//Vamos comprobando campos
			//Un campo que no puede estar vacío
			valorCampo=obj.c1.value;
			if (valorCampo.length==0){
				mensaje+="Debes rellenar el campo xxxxx\n";
				//Si no he asigando aún el objFoco lo cargo con este campo
				//Para que se acuerde del primero que falló
				//Si queremos darle el foco al último basata con quitar el if(!objFoco) en todas
				if (!objFoco) objFoco=obj.c1;
			}
			//Un desplegable en el que la primera opción no es válida
			valorCampo=obj.combo.value;
			if (valorCampo=="1"){
				mensaje+="Debes seleccionar una opción\n";
				if (!objFoco) objFoco=obj.combo;
			}
			//Comprobar si el check está marcado. Si lo está, el campo c2 no puede estar vacío
			if(obj.chek.checked){
				//Miramos c2...
				valorCampo=obj.c2.value;
				if (valorCampo.length==0){
					mensaje+="Debes rellenar el campo yyyyy si marcas el check\n";
					if (!objFoco) objFoco=obj.c2;
				}
			}
			//Si mensaje contiene algo es que no ha pasado la prueba...
			if (mensaje!=""){
				alert("Revisa el formulario:\n"+mensaje);
				if (objFoco) objFoco.focus();
			}else{
				//Enviar el form
				obj.submit();
			}
		}
	}
	</script>
</head>

<body>

	
	
	<form action="" method="post" name="formulario" id="formulario">
		Este hay que llenarlo: <input type="text" name="c1">
		<br>
		Este no hace falta si no se marca el check: <input type="text" name="c2">&nbsp;
		<input type="checkbox" name="chek" value="">Marca para obligar a llenar el texto
		<br>
		<select name="combo">
					<option value="1" SELECTED>Selecciona una opción</option>
					<option value="2">Uno</option>
					<option value="3">Dos</option>
		</select>
		<br>
		<input type="button" value="Enviar" onClick="validaEnvia('formulario');">
	</form>
	
</body>
</html>
__________________
Kelpie
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:55.