Foros del Web » Programando para Internet » Javascript »

evitar enviar dos veces mismo form

Estas en el tema de evitar enviar dos veces mismo form en el foro de Javascript en Foros del Web. Buenas amigos...lo ke kiero hacer es evitar ke el usuario haga dos veces click en el boton submit...es decir cuando presiona una vez se deshabilita ...
  #1 (permalink)  
Antiguo 10/08/2012, 10:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Pregunta evitar enviar dos veces mismo form

Buenas amigos...lo ke kiero hacer es evitar ke el usuario haga dos veces click en el boton submit...es decir cuando presiona una vez se deshabilita el boton y recarga la pagina....se ke hace años ubo un post sobre esto....he probado la soluciones ke dieron y no me sirve por lo siguiente:
cuando yo recargo la pagina pregunto por mi boton en php ej.
if($_POST['boton']=='Enviar')
{

//codigo php
}

<input type="submit" value="Eniviar" name="boton" >

el tema esta ke si yo deshabilito el boton y luego recargo la pagina el $POST['boton'] pasa de largo como si no lo hubiese apretado...se entiende??? por ke busco y busco y no lo puedo solucionar
Gracias!!!
  #2 (permalink)  
Antiguo 13/08/2012, 10:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: evitar enviar dos veces mismo form

Por fa alguien ke me ayude :(
  #3 (permalink)  
Antiguo 13/08/2012, 11:03
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: evitar enviar dos veces mismo form

Prueba con esto no entiendo mas o menos lo que necesitas

espero que esto te sirva

Código Javascript:
Ver original
  1. <?php
  2.     $des = '';
  3.     if($_POST){
  4.         $des = 'disabled = "disabled"';
  5.     }
  6. ?>
  7. <form method="POST">
  8. <input type="text" value="Enviar" name="name"/>
  9. <input type="submit" value="Procesar" id="other" name="other" <?php echo $des; ?>/>
  10. </form>
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #4 (permalink)  
Antiguo 13/08/2012, 16:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: evitar enviar dos veces mismo form

Je muchas gracias pero eso me deshabilita el boton al hacer del submit y no es lo ke busco...para ser mas claro al presionar mi boton de enviar el servidor se tarde 10 segundo en refrescar la pantalla y hacer el submit, en estos 10 segundos el usuario puede presionar varias veces el boton enviar...yo lo ke kiero es evitar esto....entonces al hacer el primer clik, deshabilite el boton y ke el servidor se tome su tiempo para pensar...el tema ke si deshabilito el boton me ignora la instruccion $_POST['boton']=='Enviar'
  #5 (permalink)  
Antiguo 13/08/2012, 19:03
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: evitar enviar dos veces mismo form

Te agradecería escribir correctamente, es difícil leer así.

Lo que quieres es sencillo, debes agregar un evento en el botón del formulario:

<input type="submit" value="enviar" onclick="this.disabled=true;">
  #6 (permalink)  
Antiguo 14/08/2012, 18:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: evitar enviar dos veces mismo form

gracias por tu respuesta...como sera de sencillo ke no funciona ja...no realiza el submit...alguna otra idea!!!!
  #7 (permalink)  
Antiguo 14/08/2012, 18:53
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: evitar enviar dos veces mismo form

Pero entonces en tu formulario en el evento onsubmit pones asi

Código HTML:
Ver original
  1. <form name="myform" id="myform" onsubmit="document.forms["myform"].elements["mysubmit"].disabled = true; return true;">
  2. </form>
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 15/08/2012, 06:24
 
Fecha de Ingreso: marzo-2009
Mensajes: 291
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: evitar enviar dos veces mismo form

Gente muchas gracias por sus propuestas lamentablemente no lo puedo solucionar....al parecer cuando yo deshabilito mi boton y recrago la pagina, el $_POST de mi boton desaparece....es como si no existiera si esta deshabilitado. Quizas no se pueda hacer lo ke yo busco :(
  #9 (permalink)  
Antiguo 15/08/2012, 10:14
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: evitar enviar dos veces mismo form

La forma más efectiva es usar un captcha que trabaje con sesiones
Demo
http://foros.emprear.com/php/captcha...atir-de-un-gif
Otra sería usar ajax, pero estás expuesto a que javascript esté desactivado

form.html
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es-ar">
  3. <meta charset="utf-8" />
  4. <title>Form x Ajax</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9.  
  10. var rootdomain="http://"+window.location.hostname;
  11. function cargarAjax(url,divAjax,idformulario){
  12.     // Recogemos los valores del form
  13.     var elNombre = document.getElementById('nombre').value;
  14.     var elApellido = document.getElementById('apellido').value;
  15.     //construís la query
  16.     var parametros = "?nombre="+elNombre+"&apellido="+elApellido;  
  17.  
  18.  
  19.  
  20. var contenidoAjax = false;
  21. if(window.XMLHttpRequest) {
  22. contenidoAjax = new XMLHttpRequest();
  23. }else if(window.ActiveXObject) {
  24. contenidoAjax = new ActiveXObject("Microsoft.XMLHTTP");
  25. }else{
  26. alert('Su navegador no soporta Ajax');
  27. }
  28.  
  29. contenidoAjax.onreadystatechange=function(){
  30. cargaPagina(contenidoAjax,divAjax,idformulario);
  31. }
  32.     contenidoAjax.open('GET', url+parametros, true);
  33.     contenidoAjax.send(null);
  34.     }
  35.    
  36.    
  37.     function cargaPagina(contenidoAjax,divAjax,idformulario){
  38.             if(contenidoAjax.readyState == 4 && (contenidoAjax.status==200 || window.location.href.indexOf("http")==-1)){
  39.                 document.getElementById(divAjax).innerHTML="Gracias <b>" + contenidoAjax.responseText + "<\/b><br \/>el formulario fue procesado";
  40.                 //Reseteas y ocultás el form
  41.                 document.getElementById('nombre').value = "";
  42.                 document.getElementById('apellido').value = "";
  43.                 document.getElementById(idformulario).style.display = "none";
  44.                 }
  45.             }
  46.                
  47. //]]>
  48. </head>
  49. <div>
  50. <form action="#" id="formulario1">
  51. <input type="text" value="" id="nombre" name="nombre" autocomplete="off"/><br />
  52. <input type="text" value="" id="apellido" name="apellido" autocomplete="off"/><br />
  53. <input type="button" value="procesar" onclick="cargarAjax('nombre.php','mensaje','formulario1')" />
  54. </form>
  55. </div>
  56. <div id="mensaje">
  57. </div>
  58. </body>
  59. </html>


nombre.php
Código PHP:
Ver original
  1. <?php
  2. echo $_GET['nombre'] . " " . $_GET['apellido'];
  3. ?>

Te aclaro que este segundo ejemplo no tiene incluida ningún tipo de validación.

En este otro ejemplo combino ambas cosas
http://foros.emprear.com/php/demo-form-ajax-captcha/
la diferencia es que para darle algunosefectos, en lugar de usar javascript puro para el envío x Ajax. utilicé jQuery

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 15/08/2012, 10:47
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: evitar enviar dos veces mismo form

Cita:
Iniciado por emprear Ver Mensaje
La forma más efectiva es usar un captcha que trabaje con sesiones
Demo
http://foros.emprear.com/php/captcha...atir-de-un-gif
Otra sería usar ajax, pero estás expuesto a que javascript esté desactivado

form.html
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es-ar">
  3. <meta charset="utf-8" />
  4. <title>Form x Ajax</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9.  
  10. var rootdomain="http://"+window.location.hostname;
  11. function cargarAjax(url,divAjax,idformulario){
  12.     // Recogemos los valores del form
  13.     var elNombre = document.getElementById('nombre').value;
  14.     var elApellido = document.getElementById('apellido').value;
  15.     //construís la query
  16.     var parametros = "?nombre="+elNombre+"&apellido="+elApellido;  
  17.  
  18.  
  19.  
  20. var contenidoAjax = false;
  21. if(window.XMLHttpRequest) {
  22. contenidoAjax = new XMLHttpRequest();
  23. }else if(window.ActiveXObject) {
  24. contenidoAjax = new ActiveXObject("Microsoft.XMLHTTP");
  25. }else{
  26. alert('Su navegador no soporta Ajax');
  27. }
  28.  
  29. contenidoAjax.onreadystatechange=function(){
  30. cargaPagina(contenidoAjax,divAjax,idformulario);
  31. }
  32.     contenidoAjax.open('GET', url+parametros, true);
  33.     contenidoAjax.send(null);
  34.     }
  35.    
  36.    
  37.     function cargaPagina(contenidoAjax,divAjax,idformulario){
  38.             if(contenidoAjax.readyState == 4 && (contenidoAjax.status==200 || window.location.href.indexOf("http")==-1)){
  39.                 document.getElementById(divAjax).innerHTML="Gracias <b>" + contenidoAjax.responseText + "<\/b><br \/>el formulario fue procesado";
  40.                 //Reseteas y ocultás el form
  41.                 document.getElementById('nombre').value = "";
  42.                 document.getElementById('apellido').value = "";
  43.                 document.getElementById(idformulario).style.display = "none";
  44.                 }
  45.             }
  46.                
  47. //]]>
  48. </head>
  49. <div>
  50. <form action="#" id="formulario1">
  51. <input type="text" value="" id="nombre" name="nombre" autocomplete="off"/><br />
  52. <input type="text" value="" id="apellido" name="apellido" autocomplete="off"/><br />
  53. <input type="button" value="procesar" onclick="cargarAjax('nombre.php','mensaje','formulario1')" />
  54. </form>
  55. </div>
  56. <div id="mensaje">
  57. </div>
  58. </body>
  59. </html>


nombre.php
Código PHP:
Ver original
  1. <?php
  2. echo $_GET['nombre'] . " " . $_GET['apellido'];
  3. ?>

Te aclaro que este segundo ejemplo no tiene incluida ningún tipo de validación.

En este otro ejemplo combino ambas cosas
http://foros.emprear.com/php/demo-form-ajax-captcha/
la diferencia es que para darle algunosefectos, en lugar de usar javascript puro para el envío x Ajax. utilicé jQuery

Saludos
Bueno lo de sesiones como mencionas es una buena idea pero de ahí a usar captcha no lo se (no digo que no cumple lo que se pide), ya que por ejemplo que sea un simple formulario de registrar dos campos no creo que sea necesario poner captcha para simplemente poder no realizar varios submit consecutivos.

Ademas como menciona el compañero de arriba si tu captcha o ajax tiene un tiempo de retardo de 10 segundos yo podria hacer varios click o submit al mismo tiempo.
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #11 (permalink)  
Antiguo 15/08/2012, 11:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: evitar enviar dos veces mismo form

Yo le estoy dando un método seguro, no uno cómodo y que pueda ser deshabilitado por el cliente.
Una vez que haya aprendido a hacerlo, implementarlo en formularios posteriores es muy sencillo.
@gylle05 no menciona en ningún momento que tipo de datos y cual es la importancia de los mismos.
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 04/10/2012, 23:00
 
Fecha de Ingreso: octubre-2012
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: evitar enviar dos veces mismo form

Yo resolví ese problema copiando este código que encontré en una página.

Reemplaza el código del botón por este:

HTML

Cita:
<input class="button primary" onclick="this.disabled=true;this.value='Enviando.. .';this.form.submit();" name="commit" value="Enviar" type="submit">
Espero que te sea util, me inscribí en el foro porque vi tu duda y mi solución fue esa, y me costó mucho encontrarla también.

Saludos
  #13 (permalink)  
Antiguo 24/09/2013, 07:28
Avatar de herrickanderson  
Fecha de Ingreso: agosto-2013
Mensajes: 2
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: evitar enviar dos veces mismo form

hola que tal, alguien prodria ayudarme, necesito saber cuando presiono un boton en php pero sin enviar el form, algo asi como no recargarlo cuando presiono en boton, agradesco su respuesta.

Etiquetas: input, php, veces, botones, formulario
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:45.