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

Cómo evitar retroceder a formulario una vez grabado los datos

Estas en el tema de Cómo evitar retroceder a formulario una vez grabado los datos en el foro de ASP Clásico en Foros del Web. Hola, foro: Veréis, acabo de terminar un formulario que, una vez le das a "Aceptar", pasa a la última página y graba los datos. Hasta ...
  #1 (permalink)  
Antiguo 20/07/2007, 13:40
 
Fecha de Ingreso: junio-2007
Mensajes: 12
Antigüedad: 17 años
Puntos: 0
Mensaje Cómo evitar retroceder a formulario una vez grabado los datos

Hola, foro:

Veréis, acabo de terminar un formulario que, una vez le das a "Aceptar", pasa a la última página y graba los datos. Hasta aquí todo bien.

Pero me he dado cuenta que retrocediendo al formulario y dándole otra vez a "Aceptar" se graba otra vez el registro. ¿Cómo se puede evitar esto? ¿Hay alguna forma de invalidar el botón de "Atrás" del navegados una vez ha pasado a la útlima página?

El código que tengo en la última página es éste:

<%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ConString

set rsOrder = Server.CreateObject("ADODB.Recordset")
rsOrder.Open "SELECT * FROM peticiones ",Conn, adOpenStatic, adLockOptimistic, adCmdText

if rsOrder.EOF then
Response.Write "Existe un problema con su petición. "
Response.Write "------------ERROR-------------------"

else

'----- AÑADIMOS UN REGISTRO Y GRABAMOS LOS DATOS-----
rsOrder.Addnew
numero=rsorder.Fields.Item("id")
rsOrder("orderID")= numero
rsOrder("Nombre") = Request.form("Nombre")
rsOrder("Apellidos") = Request.form("Apellidos")
rsOrder.Update
clave=rsOrder.Fields.Item("id")
%>

'----- MOSTRAMOS EL ENLACE DEL ARCHIVO PDF CON LA CLAVE CREADA----
<meta name="GENERATOR" Content="Microsoft Visual Studio 6.0">
<title></title>
<style type="text/css">
<!--
a:link { color: #808080 }
a:visited { color: #808080 }
a:hover { color: #ff9900 }
-->
</style>

<basefont face="Verdana" size="2">
</td>
</tr>
</table>
<hr color="#003333" size="1" noshade>

<table border="0" bgcolor="#FFFFFF" cellpadding="0" cellspacing="0" width="793">
<tr>

<td width="1" valign="top" align="center" height="192">
<td width="1" bgcolor="#003333" height="192">
<img src="images/spacer.gif" width="1" height="1" alt border="0"></td>
<td width="791" height="192" align="center" valign="middle" background="Generar modelo 046">
<table border="0" cellspacing="4" cellpadding="4" width="714">
<tr>
<td height="36" align="center" valign="top" bgcolor="#FFFFFF" class="listname Estilo20">
<p><span style="font-weight: 400"><font face="Arial"><span class="normaltext Estilo17">
<font color="#000000" style="font-size: 11px">Su
petición se ha procesado correctamente. </font></span></font></span>
<font face="Arial">

<span class="normaltext Estilo17"><font color="#000000">
<span style="font-weight: 400; font-size: 11px">También puede, si lo
desea, imprimir justificante de los datos transmitidos.</span></font></span></p>
</td>
</tr>
<tr>
<td height="27" align="center" valign="top" bgcolor="#FFFFFF" class="normaltext">
<table border="0" width="79%" id="table4">
<tr>
<td width="49%">
<p align="center">
</td>
<td width="47%">
<p align="center">
<font face="Arial">

</tr>
<tr>


<td width="49%">
<p align="center">
<font face="Arial">

<a href="#null" onClick="newWindow('http://XXXXXXX/XXX/XX/pdf/justif/<%=(rsorder.Fields.Item("orderID").Value)%>.pdf',' ','650','250','resizable,scrollbars,nomenubar, nostatus, notoolbar')"><img src="images/datos_transmitidos.png" alt="Generar 046" width="145" height="55" border="0"></a></td>
<td width="47%">
<p align="center">
<font face="Arial">

<a href="#null" onClick="newWindow('http://XXXXXXXX/XXX/XXXXX/pdf/<%=(rsorder.Fields.Item("orderID").Value)%>.pdf',' ','650','250','resizable,scrollbars,nomenubar, nostatus, notoolbar')"><img src="images/modelo_046.png" alt="Generar 046" width="145" height="55" border="0"></a></td>

</tr>
<tr>


<td colspan="2">
<p align="center"><a href="default.asp">
<img border="0" src="images/button_terminar.jpg" width="89" height="33"></a></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="53" align="center" valign="top" bgcolor="#FFFFFF" class="normaltext">
&nbsp;</td>
</tr>
</table>

<p><span class="listname"><b><font face="Arial" size="4"></font></b></span><b><font face="Arial" size="4" class="detaillabels">Gracias por su colaboraci&oacute;n</font></b>
</p>
<hr color="#003333" size="1" noshade></td>
</tr>
</table>




<table border="0" cellpadding="0" cellspacing="6" width="100%">
<tr>
<td colspan="3" valign="BOTTOM">

<table border="0" cellpadding="0" cellspacing="6" width="100%" id="table3">
<tr>
<td valign="top" height="59">
<div align="center">
<pre>&nbsp;</pre>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html><%
%>

'----- CERRAMOS LA BASE DE DATOS-----
<%
rsorder.Close
set rsorder = Nothing

Conn.Close
set Conn = Nothing
%>

¿Alguna idea?

Saludos y gracias
  #2 (permalink)  
Antiguo 20/07/2007, 14:37
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
Re: Cómo evitar retroceder a formulario una vez grabado los datos

elimina el caché, para que así al regresar a la página anterior le muestre un error al usuario
  #3 (permalink)  
Antiguo 20/07/2007, 16:31
 
Fecha de Ingreso: enero-2002
Ubicación: Veracruz
Mensajes: 67
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Me parece que la respuesta anterior está correcta, pero lo mas correcto es decirtela completa,

anexo el código que podrías usar

Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Cache-Control", "private"
Response.Expires = 0
__________________
:cool:
  #4 (permalink)  
Antiguo 21/07/2007, 04:24
 
Fecha de Ingreso: junio-2007
Mensajes: 12
Antigüedad: 17 años
Puntos: 0
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Gracias a los dos por responder.

He puesto el código después de cerrar la base de datos, pero después con el botón "Atrás" me sigue mostrando el formulario y los datos.

He puesto lo que me habéis dicho de la siguiente manera:

'----- CERRAMOS LA BASE DE DATOS-----
<%
rsorder.Close
set rsorder = Nothing

Conn.Close
set Conn = Nothing

Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Cache-Control", "private"
Response.Expires = 0


%>


Saludos y gracias
  #5 (permalink)  
Antiguo 23/07/2007, 09:48
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
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Cita:
Iniciado por Ivan Ver Mensaje
Me parece que la respuesta anterior está correcta, pero lo mas correcto es decirtela completa,
Bueno, apenas vas empezando en el foro, verás que con el paso del tiempo, ya no tendrás la misma emoción por poner una y otra vez el mismo código que se encuentra muchos de los mensajes anteriores, las FAQ's y demás lugares.

Pero en fin, cierto es lo que mencionaste
  #6 (permalink)  
Antiguo 23/07/2007, 11:36
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Otra cosa que puedes hacer es inhabilitar el boton de Enviar (submit) Claro que para eso tienes que usar javascript:

<input name="submit" value=" Enviar " type="submit" onclick="this.disabled='disabled'" />

Lo pongo en el onClick por hacer algo rápido pero lo puedes incluir tras una validación de una función javaScript de los datos del formulario.

Asi, al menos, no podrán insertar más datos a la BD.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #7 (permalink)  
Antiguo 23/07/2007, 12:34
 
Fecha de Ingreso: junio-2007
Mensajes: 12
Antigüedad: 17 años
Puntos: 0
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Cita:
Iniciado por tammander Ver Mensaje
Otra cosa que puedes hacer es inhabilitar el boton de Enviar (submit) Claro que para eso tienes que usar javascript:

<input name="submit" value=" Enviar " type="submit" onclick="this.disabled='disabled'" />

Lo pongo en el onClick por hacer algo rápido pero lo puedes incluir tras una validación de una función javaScript de los datos del formulario.

Asi, al menos, no podrán insertar más datos a la BD.


Un saludo
Gracias Tammander por contestar.
Verás, una vez le doy a "Aceptar" del formulario se pasa a la página "Valida.asp" en la que se depuran los datos y, si no hay errores, se graban. Si hay errores, entonces se le advierte al usuario que tiene que retroceder al formulario y rectificar los errores. Pero, claro, en este útlimo caso, si inhabilito la tecla "Aceptar" del formulario, no doy opción al usuario a corregir datos.

Lo ideal sería inhabilitar el botón "Atrás" del navegador, porque así se graban los datos y no doy opción a retroceder, pero no sé si eso se puede hacer.

De todas maneras, gracias.

Un saludo
  #8 (permalink)  
Antiguo 24/07/2007, 07:57
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
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Mira, con los botones del navegador no te puedes meter desde ASP, a menos que elimines el history del nevegador (abriendo en un target=_blank o con JS) y con eso se inhabilitaría por si mismo el botón back, ya que no tendría a donde regresar.

Pero a juicio mio, lo que deberías hacer, aparte de evitar el caché, es controlar tu mismo el estado del formulario. Veamos, tienes tu página de formulario programada para controlar el estado, es decir con los controles de esta forma: <input type="text" name="edNombre" value="<%=Request("edNombre")%>">, con eso la primera vez que se le muestre el formulario al usuario lo verá en blanco, pero si la página "validar.asp" detecta que es necesario su recaptura, entonces en lugar de regresarte con un history.back, lo haces con un response.redirect mandandole todos los parámetros (ej. response.redirect "formulario.asp?edNombre="&request("edNombre") )o bien con otro formulario haciéndole tu mismo el submit.

No se si me he expresado suficientemente claro
  #9 (permalink)  
Antiguo 25/07/2007, 01:04
 
Fecha de Ingreso: junio-2007
Mensajes: 12
Antigüedad: 17 años
Puntos: 0
Re: Cómo evitar retroceder a formulario una vez grabado los datos

Cita:
Iniciado por Myakire Ver Mensaje
Mira, con los botones del navegador no te puedes meter desde ASP, a menos que elimines el history del nevegador (abriendo en un target=_blank o con JS) y con eso se inhabilitaría por si mismo el botón back, ya que no tendría a donde regresar.

Pero a juicio mio, lo que deberías hacer, aparte de evitar el caché, es controlar tu mismo el estado del formulario. Veamos, tienes tu página de formulario programada para controlar el estado, es decir con los controles de esta forma: <input type="text" name="edNombre" value="<%=Request("edNombre")%>">, con eso la primera vez que se le muestre el formulario al usuario lo verá en blanco, pero si la página "validar.asp" detecta que es necesario su recaptura, entonces en lugar de regresarte con un history.back, lo haces con un response.redirect mandandole todos los parámetros (ej. response.redirect "formulario.asp?edNombre="&request("edNombre") )o bien con otro formulario haciéndole tu mismo el submit.

No se si me he expresado suficientemente claro

También es una buena opción la tuya, Myakire.

Voy a intentar hacerlo así.

Gracias

Un saludo
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 19:49.