Foros del Web » Programando para Internet » PHP »

Evitar reenvío de datos de formulario al recargar página

Estas en el tema de Evitar reenvío de datos de formulario al recargar página en el foro de PHP en Foros del Web. Olvidé cómo hacerlo correctamente. Que tras enviar datos del formulario, se muestre un mensaje de este tipo "Se ha introducido correctamente el dato xxx" (xxx ...
  #1 (permalink)  
Antiguo 13/06/2009, 05:58
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 19 años
Puntos: 3
Evitar reenvío de datos de formulario al recargar página

Olvidé cómo hacerlo correctamente. Que tras enviar datos del formulario, se muestre un mensaje de este tipo "Se ha introducido correctamente el dato xxx" (xxx es el dato en cuestión) pero que al recargar la página no se vuelva a reintroducir ese mismo dato en otro registro de la tabla.

Ahora mismo tengo en mente esto:

header("Location: " . $_SERVER['PHP_SELF']);

pero así perdería la información enviada que quiero mostrar en el mensaje de confirmación como que se ha introducido correctamente.
  #2 (permalink)  
Antiguo 13/06/2009, 06:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 13 años
Puntos: 1517
Respuesta: Evitar reenvío de datos de formulario al recargar página

Yo lo que hago es un select antes de insertar verifico si todos los datos no son repetidos o sea escribo un AND en todas las columnas que que quiero insertar. Creo un if despues verificando si hay informacion y si no lo hay hago el insert sino pues lo redirijo.

Me dejas saber
  #3 (permalink)  
Antiguo 13/06/2009, 06:10
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 13 años, 9 meses
Puntos: 139
Respuesta: Evitar reenvío de datos de formulario al recargar página

Tienes que colocar un select que verifique si el dato xxx existe en la tabla

Código PHP:

$Sql 
mysql_query("SELECT nombre FROM tabla WHERE nombre='xxx'")or die (mysql_error());


## Si el dato no existe
if (!mysql_num_rows($Sql)){

$Sql mysql_query("INSERT INTO tabla (nombre)value('xxx')")or die(mysql_error());

if ( 
$Sql )
{
echo 
"El dato fue instroducido corectamente";

## redirijo

}
else
{
echo 
"Ocurio un error cuando se trataba  de insertar el dato";
}

}
 
else

{

echo 
" Ya este dato fue insertado.";


  #4 (permalink)  
Antiguo 13/06/2009, 12:35
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 19 años
Puntos: 3
Respuesta: Evitar reenvío de datos de formulario al recargar página

gracias por vuestras respuestas, pero creo que hay una solución más óptima haciendo usa de las variables de sesión, lo que no recuerdo cómo. Así te evitas tener que realizar la consulta antes de realizar la inserción, o sea, menos carga para el servidor mysql.

Además, en un supuesto en el cual los datos a introducir coincidieran casualmente con otros datos ya almacenados por otro usuario (o por el mismo), el usuario actual se quedaría sin poder almacenar sus datos.
  #5 (permalink)  
Antiguo 22/07/2009, 02:19
 
Fecha de Ingreso: diciembre-2008
Mensajes: 1
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Evitar reenvío de datos de formulario al recargar página

Tigervcl:
te puedo poner un ejemplo de como evitar un doble post al refrescar tu página de envio

supongamos que tienes una introduccion de un comentario a tu base de datos



Código PHP:
### conectas a tu base de datos ###

//REALIZAS EL POST
if($_POST['action'] == "comentar") {

// VERIFICAS QUE TU POST NO SEA REPETIDO  A TRAVES DE LA VERIFICACIÓN DEL CAMPO DE COMENTARIO
    
$comentario $_POST['comentario'];

$consulte=mysql_query("SELECT COUNT(*) FROM tabla_comentarios WHERE comentario='$comentario'"); 

if (
mysql_result($consulte,0) == 1){ 
   
$status '<font color="#cc0000">No puedes postear el mismo comentario repetidas veces.</font>'
} else { 


    
$nombre $_POST['nombre'] = strip_tags($_POST["nombre"]);
    
$comentario $_POST['comentario'] = strip_tags($_POST["comentario"]);
    
$fecha time();              
                  
         
mysql_query("INSERT into tabla_comentarios (id,nombre,comentario,fecha) VALUES ('','$nombre','$comentario','$fecha')") or die (mysql_error());

    
$status "Comentario agregado exitosamente!";
    }
    } 

El codigo de tu formulario quedaría así

Código:
<form method="post" action="">
<input type="text" name="nombre" maxlength="60">
<textarea name="comentario" style="width:436px;height:80px;"></textarea>
<input name="enviar" type="submit" value="Comentar!" />
<input name="action" type="hidden" value="comentar" />
<? echo "$status"; ?>


Un saludo y espero que te sirva!
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 13:49.