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

Recuperar valores de varios selects.

Estas en el tema de Recuperar valores de varios selects. en el foro de ASP Clásico en Foros del Web. Buenas Sres, asi como con for each se recuperan los valores de una serie de checkboxes, como podria recuperar el valor de una serie de ...
  #1 (permalink)  
Antiguo 09/08/2004, 10:55
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Pregunta Recuperar valores de varios selects.

Buenas Sres, asi como con for each se recuperan los valores de una serie de checkboxes, como podria recuperar el valor de una serie de selects que se generan dinamicamente segun la cantidad de registros que traiga la consulta?.
(los selects tendrian 2 valores : SI/NO y lo almacenaria en una base access).

O estoy divagando?.

Saludos.
__________________
Carlunchos
  #2 (permalink)  
Antiguo 09/08/2004, 11:06
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Con For-Each recuperas toda la coleccion de Request:

<%
for each v_entrada in request.form
for indice=1 to request.form(v_entrada).count
response.write v_entrada&"="&request.form(v_entrada)(indice)&"<br >"
next
next
%>

Saludos
  #3 (permalink)  
Antiguo 09/08/2004, 11:48
 
Fecha de Ingreso: marzo-2004
Ubicación: San José, Costa Rica
Mensajes: 234
Antigüedad: 21 años, 1 mes
Puntos: 0
Saludos,

Bueno una solución posible podría ser la siguiente

Como los selects son dinámicos yo les pondría por nombre:

Select1
Select2
...
Select5

También pondría un campo con el total de campos que se generaron,

TotalSelects = 5

Y después los recuperaría de la siguiente manera:

<%

FOR I = 1 TO Cint(TotalSelects)
Response.write(Request.Form("Select" & I))
NEXT

%>
  #4 (permalink)  
Antiguo 09/08/2004, 12:23
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Lo de Miakyre funciona barbaro y lo de JosephFley tambien. Gracias, pero abusando de vuestra atencion he tratado de hacer lo siguiente:

al mismo tiempo que se generan los select se generan tambien un textbox que acompaña a cada select . En cada textbox se trae de la base un valor que luego debe ser recuperado junto con los selects.
Pero no he podido.

Como debo indicar que mediante el for each y otro for next (caso de Miakyre) me traiga el name (por ende el value) de cada textbox?. La idea es que estos dos valores se deben guardar en base.

Gracias.
__________________
Carlunchos
  #5 (permalink)  
Antiguo 09/08/2004, 13:32
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Pero el name tu lo sabes. Cuando los creas, como te mencionó JosephFley les debes de poner un prefijo, por ejemplo, "check" y les debes concatenenar un indice para que se distingan. Y con un simple ciclo puedes preguntar uno por uno como tambien te comento JosephFley.

Para recorrer solo los check box hace algo asi:

for 1 to request.form("checkbox name").count
'aqui haces todas tus actualizaciones si esta seleccionado, recuerda que debes indicar el indice.
next

¿O tal vez no era eso lo que necesitas?
  #6 (permalink)  
Antiguo 09/08/2004, 15:33
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Muchachos, me parece que les estoy haciendo perder tiempo. Mejor traten de darme una idea aproximada de como harian los siguiente:

debo mostrar un formulario donde se presentaran en forma dinamica un select (SI/NO) y un textbox. Habra tantas filas de selects y textbox de acuerdo a tantos registros segun una condicion del sql.

Los selects tendran esos valores (SI/NO) y los textboxes que los acomañan tendran un valor extraido de la base.

Como harian uds para luego mandar esos valores a otra pagina para ser almacenados en base?. Pasenme una idea que yo me encargo de tratar de codificarlo.

Gracias de nuevo.
__________________
Carlunchos
  #7 (permalink)  
Antiguo 09/08/2004, 16:16
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Muchachos, dandole vueltas al tema, llegue a esto:

for each sel in request.form
response.write sel&"="&request.form(sel)&"<br>"

next

lo que arroja en la otra pagina:


sel_sino=NO, NO, NO
submit2=Guardar Datos
id_correccion=PL301, PL302, PL303
cantidad=3 (numero de items mostrados en pagina).


Lo que necesito es llegar a esto (encabezado de campos y registros):

sel_sino | id_correccion

NO | PL301
NO | PL302
NO | PL303

es decir grabar 3 registros. Pero los datos me llegan como si fueran un array. Me explico?.

Gracias.
__________________
Carlunchos
  #8 (permalink)  
Antiguo 10/08/2004, 11:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Bueno, el tener el mismo nombre en los elementos te sirve para hacer operaciones tales como updates, deletes y select.

Ejemplos:

SQL = "UPDATE tabla set campo = verdadero WHERE ID IN(" & Request.Form("Check") & ")"
o bien
SQL = "Delete From tabla where ID IN(" & Request.Form("Check") & ")"

Pero para los insert no va.
Tienes que distingirlos según su nombre: Como ya te hemos mencionado, normalmente, agregandoles un número; o por su índice.

Se manejarian mas o menos igual:
<%
for cnt=1 to CInt(request("cantidad"))
if request.form("sel_sino"&cnt)="SI" Then
Sql = "insert .... etc, etc"
End If
next
%>

De la segunda sería con algo mas o menos asi:
<%
for cnt=1 to request.form("sel_sino").count
if request.form("sel_sino")(cnt)="SI" Then
Sql = "insert .... etc, etc"
End If
next
%>

Espero tus comentarios
  #9 (permalink)  
Antiguo 12/08/2004, 18:06
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Myakire, atento a lo que me pasaste y luego de dar vueltas y vueltas , tengo lo siguiente:

response.write "<form name=form2 method=post action='guarda_datos.asp?cantidad="&i&"'>"

response.write "<table border=1 width='70%'>"
response.write "<tr>"
response.write "<td align=center>Visto</td>"
response.write "<td align=center>Opcion</td>"
response.write "<td align=center>Id</td>"
response.write "<td align=center><font color=black size=2 face=Arial,Verdana,Times>Observacion</font></td>"
response.write "</tr>"
response.write "<font color="&color&" size=2 face=Arial,Verdana,Times>"&titulo&" - <a href='conversion2.asp?modif=1&cent1="&cent1&"' title = 'Modificar Correcciones'>"&cent1&"</a></font>"
i = 0
do while not rst.EOF
i = i + 1
response.write "<tr>"

response.write "<td align=center><input type=checkbox name='chk_visto' value='si'></td>"
response.write "<td align=center bgcolor="&color&">"
response.write "<select name='sel_sino' size=1>"
response.write "<option value='SI'>SI</option>"
response.write "<option value='NO'>NO</option>"
response.write "</select>"
response.write "</td>"
response.write "<td align=center><input type=text name='id_correccion' disabled value="&rst("id_correccion")&" size=5 maxlenght=5</td>"
response.write "<input type=hidden name='id_correccion' value="&rst("id_correccion")&">"
response.write "<td align=left><font color=black face=Arial size=2>"&rst("detalle_correccion")&"</font></td>"
rst.movenext
loop
rst.close
response.write "<input type=hidden name=cantidad value="&i&">"
response.write "<input type=hidden name=cent1 value='"&cent1&"'>"
response.write "</tr>"
response.write "<tr>"
response.write "<td bgcolor="&color&" colspan=4 align=center><br><input type=submit name=submit2 value='Guardar Datos'></td>"

response.write "</form>"


En la pagina guarda_datos.asp tengo:

Set rst = Server.CreateObject("adodb.recordset")

for veces = 1 to request.form("sel_sino").count

if request.form("sel_sino")(veces)="SI" or request.form("sel_sino")(veces)="NO" then


dato = request.form("sel_sino")(veces)
dato1 = request.form("id_correccion")(veces)

if request.form("chk_visto")(veces) = "si" then dato2 = "si"
if request.form("chk_visto")(veces) = "" then dato2 = "no"

response.write "Vale = "&veces&"<br>"
sql = "Insert Into guarda_correccion (central,chk_visto,sel_sino,id_correccion) values ('"&cent1&"','"&dato2&"','"&dato&"','"&dato1&"') "
rst.open sql, strProvider,1,3
end if

next

tras lo cual me aparece el error :

sel_sino = SI, NO, SI
submit2 = Guardar Datos
id_correccion = PL301, PL302, PL303
chk_visto = si
cantidad = 3
Vale = 1

Objeto Request error 'ASP 0105 : 80004005'

Índice fuera de rango

/Actas_conv/guarda_datos.asp, line 37

Un índice de matriz está fuera de rango.



Este error aparece si no tildo todos los checkboxes "chk_visto". Si estan todos tildados no aparece el error y se guardan en base.
Le di vueltas pero no doy en el clavo. Alguna sugerencia?.

Gracias.
__________________
Carlunchos
  #10 (permalink)  
Antiguo 12/08/2004, 18:17
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Myakire: tengo esto


response.write "<form name=form2 method=post action='guarda_datos.asp?cantidad="&i&"'>"

response.write "<table border=1 width='70%'>"
response.write "<tr>"
response.write "<td align=center>Visto</td>"
response.write "<td align=center>Opcion</td>"
response.write "<td align=center>Id</td>"
response.write "<td align=center><font color=black size=2 face=Arial,Verdana,Times>Observacion</font></td>"
response.write "</tr>"
response.write "<font color="&color&" size=2 face=Arial,Verdana,Times>"&titulo&" - <a href='conversion2.asp?modif=1&cent1="&cent1&"' title = 'Modificar Correcciones'>"&cent1&"</a></font>"
i = 0
do while not rst.EOF
i = i + 1
response.write "<tr>"

response.write "<td align=center><input type=checkbox name='chk_visto' value='si'></td>"
response.write "<td align=center bgcolor="&color&">"
response.write "<select name='sel_sino' size=1>"
response.write "<option value='SI'>SI</option>"
response.write "<option value='NO'>NO</option>"
response.write "</select>"
response.write "</td>"
response.write "<td align=center><input type=text name='id_correccion' disabled value="&rst("id_correccion")&" size=5 maxlenght=5</td>"
response.write "<input type=hidden name='id_correccion' value="&rst("id_correccion")&">"
response.write "<td align=left><font color=black face=Arial size=2>"&rst("detalle_correccion")&"</font></td>"
rst.movenext
loop
rst.close
response.write "<input type=hidden name=cantidad value="&i&">"
response.write "<input type=hidden name=cent1 value='"&cent1&"'>"
response.write "</tr>"
response.write "<tr>"
response.write "<td bgcolor="&color&" colspan=4 align=center><br><input type=submit name=submit2 value='Guardar Datos'></td>"

response.write "</form>"

y en guarda_datos.asp


Set rst = Server.CreateObject("adodb.recordset")

for veces = 1 to request.form("sel_sino").count

if request.form("sel_sino")(veces)="SI" or request.form("sel_sino")(veces)="NO" then


dato = request.form("sel_sino")(veces)
dato1 = request.form("id_correccion")(veces)

if request.form("chk_visto")(veces) = "si" then dato2 = "si"
if request.form("chk_visto")(veces) = "" then dato2 = "no"



response.write "Vale = "&veces&"<br>"

sql = "Insert Into guarda_correccion (central,chk_visto,sel_sino,id_correccion) values ('"&cent1&"','"&dato2&"','"&dato&"','"&dato1&"') "
'rst.open sql, strProvider,1,3
end if

next


pero, sino tildo todos los "chk_visto" me sale el cartel:

sel_sino = SI, NO, SI
submit2 = Guardar Datos
id_correccion = PL301, PL302, PL303
chk_visto = si
cantidad = 3
cent1 = AMERICA
Vale = 1

Objeto Request error 'ASP 0105 : 80004005'

Índice fuera de rango

/Actas_conv/guarda_conversion.asp, line 37

Un índice de matriz está fuera de rango.


pero si tildo todos los "chk_visto" no sale cartel.
En que le estoy errando?.

Saludos.
__________________
Carlunchos
  #11 (permalink)  
Antiguo 13/08/2004, 10:27
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Bueno, veo que el código tiene varios errores y de diversos tipos, por ejemplo, los campos deshabilitados no se mandan por el formulario y tu estas preguntando por ellos.

Copia y pega en un programa este código, correlo y si es lo que necesitas modificalo:

Código:
<%
if CInt(Request.Form("hidTotElementos"))>0 Then
   for cnt = 1 to CInt(Request.Form("hidTotElementos"))
       IF request.form("chk_visto"&cnt)="si" then
			    dato = request.form("sel_sino"&cnt)
          dato1 = request.form("id_correccion"&cnt)
          if request.form("chk_visto"&cnt) = "si" then
             dato2 = "si"
          end if
          sql = "Insert Into guarda_correccion (central, chk_visto, sel_sino,  id_correccion) values ('"&cent1&"','"&dato2&"','"&dato&"','"&dato1&"')"
          response.write sql & "<br>"
			 End If
	 Next
End If
%>

<form name=form2 method=post action='checks.asp'>
<table border=1 width='70%'>
<tr>
<td align=center>Visto</td>
<td align=center>Opcion</td>
<td align=center>Id</td>
<td align=center><font color=black size=2 face=Arial,Verdana,Times>Observacion</font></td>
</tr>
<font color="&color&" size=2 face=Arial,Verdana,Times>Titulo - <a href='conversion2.asp?modif=1&cent1="&cent1&"' title = 'Modificar Correcciones'> Cualquiera</a></font>
<%for i=1 to 10%>
<tr>
<td align=center><input type=checkbox name='chk_visto<%=i%>' value='si'></td>
<td align=center bgcolor="&color&">
<select name='sel_sino<%=i%>' size=1>
<option value='SI'>SI</option>
<option value='NO'>NO</option>
</select>
</td>
<td align=center><input type=text name='id_correccion<%=i%>' readonly value="id_Correccion<%=i%>" size=5 maxlenght=5</td>
<td align=left><font color=black face=Arial size=2>"Valor<%=i%>"</font></td>
<%
Next
%>
<input type=hidden name=hidTotElementos value=10>
</tr>
<tr>
<td bgcolor="&color&" colspan=4 align=center><br><input type=submit name=submit2 value='Guardar Datos'></td>

</form>
Saludos
  #12 (permalink)  
Antiguo 15/08/2004, 17:39
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Gracias Myakire por tu voluntad pero debo decirte que no he logrado aplicar tus directivas, asi tratare de buscarle otra forma mas simple para el formulario, es decir sin enviar los checkboxes y solo mandar los select y los texts.

Gracias nuevamente.

Carlunchos.
__________________
Carlunchos
  #13 (permalink)  
Antiguo 16/08/2004, 08:02
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Bueno carlunchos, buena suerte, pero debo mencionar que si le das la vuelta a este problema (que es algo trivial en programación Web) vas a batallar mas adelante, tarde o temprano. Mejor sacarlo ahora que ya le encontramos la forma. Ahora, manejar los checks no es diferente a manejar los demás controles.
El código que te postie hace lo que necesitas, solo debes agregar el código de conexión y listo.
¿Qué problema tuviste para ejecutar el ejemplo?
  #14 (permalink)  
Antiguo 16/08/2004, 19:33
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 23 años, 3 meses
Puntos: 1
Bueno Myakire, el problema era que no indicaba el numero de pasada (i) en los name del formulario, por ende cuando los recuperaba en la otra pagina, no grababa cada item. Y eso que me lo habias indicado en el ejemplo. He perdido toda la terde de ayer domingo dandole vueltas sin resultado.

Solo he cambiado esto:
IF request.form("chk_visto"&cnt) = "si"

por esto:
IF request.form("chk_visto"&cnt) = "si" OR request.form("chk_visto"&cnt) = "" then

porque sino los checkboexes que no son tildados no los recupera, es decir que de 4 check,si solo marco dos, solo hace 2 inserciones.

Nuevamente gracias y ya te caigo con algun entrevero.
__________________
Carlunchos
  #15 (permalink)  
Antiguo 17/08/2004, 08:40
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Felicidades, saludos y nos vemos.
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 06:47.