Ver Mensaje Individual
  #9 (permalink)  
Antiguo 15/08/2012, 10:14
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 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.