En la mayor parte de desarrollos de aplicaciones hechas en web, nos encontramos con el problema de que el usuarios puede enviar dos veces la información, estos por ejemplo hay un formulario de registro el usuario ingresa sus datos y completa el registro, pero si el usuarios actualiza la página el browser preguntará si desea enviar la información nuevamente con lo cual nos arriesgamos a que el usuario se registre dos veces.

Entre las muchas lecturas que tengo me encontré con una solución en Big Trapezze la cual comparto con ustedes. Se trata de una clase que verificará que no se envíen dos veces los datos del formulario. Para ello debes crear un archivo llamado postClass.php.
-
<?php
-
class Post_Block {
-
function startPost() {
-
echo "<input type='hidden' name='postID' ";
-
}
-
-
function postBlock($postID) {
-
if ($postID == $_SESSION['postID']) {
-
return false;
-
} else {
-
$_SESSION['postID'] = $postID;
-
return true;
-
}
-
} else {
-
$_SESSION['postID'] = $postID;
-
return true;
-
}
-
}
-
;}
-
?>
Esta clase tiene dos funciones la primera startPost creara un campo oculto en el formulario con un número identificador único que servirá para verificar si se envió el formulario. La segunda función llamada postBlock verifica que el identificador no exista y si no detiene la ejecución del script.
Uso de la Clase
Primero debemos insertar el código de verificación en nuestro formulario y esto lo hacemos con la función startPost.
-
<?php
-
require("postClass.php");
-
$thisPost = new Post_Block;
-
?>
-
<form name="foo" action="action.php" method="post">
-
<input type="text" name="generica" size="25">
-
<?php $thisPost->startPost(); ?>
-
</form>
El siguiente paso es verificar el número identificador en nuestra pagina que procesa el formulario, en nuestro ejemplo action.php.
-
<?php
-
require("postClass.php");
-
$thisPost = new Post_Block;
-
if ($thisPost->postBlock($_POST['postID'])) {
-
// No existe doble post
-
// Procesamos la información
-
} else {
-
// Doble post, no procesamos el form.
-
echo "Oops!! Doble Post!";
-
}
-
?>
Como verá con una sentencia if podemos verificar que no se esten enviando dos veces el formulario. Como comentario adicional debo decirles que hay otra forma de evitar este problema y es que luego de procesar los datos redireccionemos a otra página de confirmación de procesamiento de datos, con esto se evita que se envíen los datos, el único problema es que tenemos que crear un tercera página solo para confirmación de resultados.
Posts Relacionados
Comentarios Total 3 comentarios
Publicado: 13/12/2006 6:20 pm
Excelente aporte, a mí me pasaba que un formulario se estaba enviando dos veces, pero era por un error de hacer submit en el javascript. Pero gracias a esta clase encontré que el formulario se enviaba dos veces. Saludos.
Publicado: 03/01/2008 11:04 pm
Excelente articulo, muchas gracias! Con esto solucioné mi problema :)
Publicado: 06/02/2008 8:31 pm
excelente tip¡ muy util¡ para evitar tipos de mail bombers¡