Ver Mensaje Individual
  #10 (permalink)  
Antiguo 15/08/2012, 10:47
Avatar de Dradi7
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