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

Input hidden + atrás + condicional

Estas en el tema de Input hidden + atrás + condicional en el foro de ASP Clásico en Foros del Web. Hola a to2 Tengo un problemilla y me tiene atascado, a ver si me podeis echar una mano... Se trata de lo siguiente: En una ...
  #1 (permalink)  
Antiguo 15/09/2004, 03:02
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Input hidden + atrás + condicional

Hola a to2

Tengo un problemilla y me tiene atascado, a ver si me podeis echar una mano...

Se trata de lo siguiente:

En una página asp, muestro un artículo, en el que el usuario puede votar por el a través de un input. Ese input lleva asociado un input hidden, de tal manera que en el form, a través del método post, recojo de nuevo el valor del input y a través de un condicional (if request.form("votar")="si" then...), muestro un mensaje en la pantalla, informando que el usuario ha votado, y su voto ha sido contabilizado.

Hasta ahí todo bien, pero el problema es que si un usuario vuelve atrás con el botón de la barra del navegador, la página que se carga, es la misma (porque evidentemente venía de esa misma página, antes de mirar el request.form("votar"), cuando mostraba el input "votar" (cosa que una vez votado, ya no muestra, pero sí que muestra en cambio, el mensaje indicado anteriormente). Si se vuelve a pinchar en ese botón del navegador, se vuelve a la sección de los artículos.

El tema lo tengo solucionado a través de un botón que tengo en la parte inferior del artículo en cuestión (el art. mostrado), pues si se le da al botón "volver", si que me vuelve a la sección donde muestro el listado de artículos. Lo hago de esta forma:

<%'Si ha votado, que vaya dos páginas atrás
If request.form("votar")="si" then
%>
<A HREF="#" onClick="history.go(-2)" onMouseOver="window.status='P&aacute;gina anterior';return true;" onMouseOut="window.status='';return;"><IMG BORDER="0" SRC="img/volver.gif" WIDTH="13" HEIGHT="13" ALT="P&aacute;gina anterior"></A>
<%else%>
<A HREF="#" onClick="history.go(-1)" onMouseOver="window.status='P&aacute;gina anterior';return true;" onMouseOut="window.status='';return;"><IMG BORDER="0" SRC="img/volver.gif" WIDTH="13" HEIGHT="13" ALT="P&aacute;gina anterior"></A>
<%end if%>

Resumen: lo tengo solucionado a través de un botón que hay en la parte inferior de mi página (volver), pero no sé como solucionarlo para que a través del botón de la barra del navegador, me salte 2 páginas atrás, o si no se puede, que me tome la página del artículo después de haberlo votado, como "proveniente" del listado de artículos (esta página sería su página anterior), en lugar de esa misma página con el artículo, pero antes de votar.

Espero haberme explicado.

Gracias a to2 por vuestra colaboración, y gracias anticipadas.
  #2 (permalink)  
Antiguo 15/09/2004, 07:55
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Yo pondría una variable o control "flag" (indicadora) que me llevará el control, por ejemplo al votar que en un campo oculto me escriba x ejemplo 1, que significa que ya voto, entonces al cargar la página que cheque si el valor del hidden =1 entonces history.go(-numerodepaginas a retroceder) o un window.location="paginadondeir" si no pues entonces que no se ejecute la función.

Esa es mi idea. Suerte

Esa es la ide
  #3 (permalink)  
Antiguo 15/09/2004, 08:30
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Gracias orharo2003, pero creo que no se ajusta a lo que necesito, puesto que cuando se accede al artículo, se lee, y al pie del mismo, aparece un botón para votar por él. Si alguien lo pulsa, se carga de nuevo la página, y en lugar de aparecer en esta ocasión el botón, aparece un mensaje diciendo "Gracias por haber votado, tu voto ha sido contabilizado, y tal y tal...".

Si la primera vez que entran en el artículo para votar (cuando aparece el botón de votar), creo una variable como me dices con un history.go(-1), al recargar esa misma página una vez hayan votado, no aparecerá el mensaje "Gracias por votar...", sino que me redirigirá a la página con el listado de artículos de donde venía originariamente. Creo que eso es lo que me sucedería, y lo que pretendo es que lean el mensaje de que su voto ha sido contabilizado.

Si no estoy en lo cierto, por favor, rectifícame.

Muchas gracias.
  #4 (permalink)  
Antiguo 15/09/2004, 08:35
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
Bueno, esa es la idea a ciegas. Pero si me pones la url de donde está lo checamos y sale x que sale (ya viendolo uno se da más ideas ¿no?=)
  #5 (permalink)  
Antiguo 15/09/2004, 08:40
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
estoy en pruebas, Orharo, y todavía no la he colgado en ningún servidor. No es que no quiera enseñarla, evidentemente. Simplemente estoy depurando todo, hasta su estreno en las mejores pantallas
  #6 (permalink)  
Antiguo 15/09/2004, 08:45
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 20 años, 1 mes
Puntos: 4
puedes dar de alta tu Ip en www.no-ip.com y así ya lo podriamos ver.
Es gratis, consideralo. Y bueno miesntras leo y re leo tu problema. Ok.

Saludos,
  #7 (permalink)  
Antiguo 15/09/2004, 09:04
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Mejor pego el código, que me tengo que leer con detenimiento esa web, jajajaja (que ignorante soy, Dios mío):

Ahí va, por si puede servir de ayuda (he estractado la parte afectada, para no poner código innecesario):

<TABLE CELLSPACING="0" CELLPADDING="2" BORDER="0" WIDTH="90%">
<TR><TD ALIGN="CENTER">
<A HREF="articulos.asp" onMouseOver="window.status='Listado de articulos';return true;" onMouseOut="window.status='';return;"><IMG BORDER="0" SRC="img/concursoarticulos.gif" ALT="" WIDTH="220" HEIGHT="23"></A>
</TD></TR>
<TR><TD>
<%
'Miramos el querystring, y si es menor que 1
'mostramos la página con el listado de articulos TOP 10
if Request.Querystring("id")<1 then
Response.redirect "articulos.asp"
end if

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
oConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/miweb/pruebas/articulillosxx1020.mdb"))
SQL="SELECT * FROM articulos where id=" & Request.QueryString("id")
rs.Open SQL, oConn, 1, 3

'Si la base de datos contiene el registro seleccionado (la id igual al querystring), que haga lo que sigue a continuación
If Not rs.EOF then
'Que sume un hit a las veces que se ha visto este articulo
rs("hits")=rs("hits")+1
rs.Update

'Si han votado por la articulo cuya id es la del form oculto,
'que le sume 1 voto en la base de datos, para lo cual
'miramos si la sesión de la id correspondiente a ese articulo
'es distinta a true (lo que significa que no ha sido votada previamente),
'y si así fuera, le permitimos el voto
If session(rs("id"))<>true and Request.form("votar")="si" then
rs.Fields("votos")=rs.Fields("votos")+1
rs.Update
'Ponemos la sesión de esa id a true, una vez votado el articulo
'para que no sume un nuevo voto, si intenta volverla a votar
session(rs("id"))=true
end if
'ahora que siga haciendo lo siguiente, si la consulta no está vacía
%>

<!-- #include file="reemplazartexto.asp" -->

<TABLE ALIGN="CENTER" CELLSPACING="0" CELLPADDING="3" BORDER="0" WIDTH="100%">
<TR><TD>
<TD VALIGN="TOP">
<DIV ALIGN="JUSTIFY">
<B>T&iacute;tulo:</B> <%Response.Write AcomodarTexto(rs("titulo"))%><BR>
<B>Autor:</B> <%Response.Write AcomodarTexto(rs("autor"))%><BR>
<B>Art&iacute;culo:</B> <%Response.Write AcomodarTexto(rs("articulo"))%><BR>
<B>Votos recibidos:</B> <%Response.Write FormatNumber(rs("votos"),0,,,-1)%><BR><BR>
<%if session(rs("id"))<>true then%>
<FORM METHOD="POST" ACTION="articulo.asp?id=<%=rs("id")%>" NAME="votacion">
&nbsp; &nbsp; <INPUT TYPE="submit" CLASS="boton3" NAME="votacion" VALUE="Votar"><INPUT TYPE="hidden" NAME="votar" SIZE="4" VALUE="si">
</FORM>
<%else%>
Tu voto ha sido contabilizado. Gracias por participar.
<%end if%>
</DIV>
</TD></TR>
</TABLE>
<%
else
'Si está vacía la base de datos
Response.Write "<DIV ALIGN='CENTER'>La articulo seleccionado no est&aacute; en la base de datos.</DIV>"
end if
%>

<%
'Cerramos y limpiamos los objetos
rs.Close
oConn.Close
set rs=nothing
set oConn=nothing
%>

</TD></TR>
</TABLE>

<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR><TD WIDTH="33%">
<%'Si ha votado, que vaya dos páginas atrás
If request.form("votar")="si" then
%>
<A HREF="#" onClick="history.go(-2)" onMouseOver="window.status='P&aacute;gina anterior';return true;" onMouseOut="window.status='';return;"><IMG BORDER="0" SRC="img/volver.gif" WIDTH="13" HEIGHT="13" ALT="P&aacute;gina anterior"></A>
<%else%>
<A HREF="#" onClick="history.go(-1)" onMouseOver="window.status='P&aacute;gina anterior';return true;" onMouseOut="window.status='';return;"><IMG BORDER="0" SRC="img/volver.gif" WIDTH="13" HEIGHT="13" ALT="P&aacute;gina anterior"></A>
<%end if%>
</TD></TR>
</TABLE>

Gracias miles.
  #8 (permalink)  
Antiguo 15/09/2004, 12:22
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
¿Y por que mejor no caducas la página para que no se pueda regresar por otro medio mas que tus botones de navegación?

<meta http-equiv="Cache-Control" content="no-cache">
<meta HTTP-EQUIV="Expires" CONTENT="Tue, 01 Jan 1980 1:00:00 GMT">
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
  #9 (permalink)  
Antiguo 16/09/2004, 01:27
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Las primeras líneas de mi página son estas:

<%'Para que no almacene la página en la caché del navegador
Response.CacheControl="no-cache"
Response.AddHeader "Pragma","no-cache"
Response.Expires=-1000
%>

Pero aún así, no me respeta el código (en cambio en otras páginas sí), pues evidentemente sigue en la caché. Tengo IE 6.0 con el SP1, y actualizado hasta la versión Q867801.

No entiendo nada...
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 01:21.