Foros del Web » Programando para Internet » PHP »

Problema con F5 cuando se insertan datos en MYSQL desde PHP

Estas en el tema de Problema con F5 cuando se insertan datos en MYSQL desde PHP en el foro de PHP en Foros del Web. Hola a todos: Tengo un index.php en el que muestra los datos de una tabla de una base de datos de mysql mediante una function() ...
  #1 (permalink)  
Antiguo 02/08/2009, 10:51
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Problema con F5 cuando se insertan datos en MYSQL desde PHP

Hola a todos:

Tengo un index.php en el que muestra los datos de una tabla de una base de datos de mysql mediante una function() y un formulario para insertar datos en esa tabla.

Mi problema es que despues de insertar dichos datos en la tabla desde el formulario en la que la acción se ejecuta en el mismo archivo ( <form action=' ' method=POST > ), al presionar F5 o al recargar la página se vuelve a insertar los mismos datos tantas veces como lo presiones. Igual que si vas a otra zona mediante un link y vuelves atrás vuelven a insertarse los mismos datos.

¿Como podría solucionar esto?

Muchas Gracias de antemano.
  #2 (permalink)  
Antiguo 02/08/2009, 10:56
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Ok.

Código HTML:
Ver original
  1. <form name="form" action="archivo.php" method="post">
  2.  
  3. Nombre:<input type="text" name="nombre">
  4. Apellido:<input type="text" name="apellido">
  5. <input type="submit" value="enviar" name="btn">
  6.  
  7. </form>

Archivo.php

Código PHP:
Ver original
  1. ## Esto es para hacer que el insert se ejecute solo si precionas el boton del formulario.
  2.  
  3. if( isset($_POST['btn']) ){
  4. $sql = " insert .....";
  5. }

Implementalo en tu codigo.
  #3 (permalink)  
Antiguo 02/08/2009, 11:08
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Mensaje Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Lo tengo como tu dices pero sigue pasandome lo mismo:


Mi codigo es el siguiente:



if ( !isset($_POST['agregar']) ){

tablanombres();

<form action=' ' method=POST >

FORMULARIO.

<input type='submit' name='agregar' value='Agregar Datos' />

</form>


}

Cuando relleno los datos y presiono agregar:


if ( $_POST['agregar'] ){

INSERT INTO tabla .....

tablanombres();

}


No se que pasa.
Lo mismo hay alguna función javascript o php que borre la acción realizada anterior.
  #4 (permalink)  
Antiguo 02/08/2009, 11:17
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Cita:
Cuando relleno los datos y presiono agregar:


if ( $_POST['agregar'] ){

INSERT INTO tabla .....

tablanombres();

}
No lo tienes como yo lo tengo

Tu codigo pudiera quedar haci

Código PHP:
Ver original
  1. if ( !isset($_POST['agregar']) ){
  2.  
  3. /*
  4. tablanombres();
  5.  
  6. <form action=' ' method=POST >
  7.  
  8. FORMULARIO.
  9.  
  10. <input type='submit' name='agregar' value='Agregar Datos' />
  11.  
  12. </form>
  13. */
  14.  
  15. }
  16.  
  17. else{
  18.  
  19.  
  20. ##INSERT INTO tabla .....
  21.  
  22. ##tablanombres();
  23.  
  24.  
  25. }
  #5 (permalink)  
Antiguo 02/08/2009, 11:26
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Como hubieras podido encontrar muy fácilmente usando google, la mejor solución para estos casos es usar la redirección. Es decir, en el archivo php dónde actualizas la base de datos, al finalizar redirecciones a otra página de tu web (la que quieras, eso da igual) y con eso el $_POST quedará borrado. Claro está que tienes que hacer que la redirección sea lo más rápida posible.
El problema es los navegadores que no permiten la redirección o que alguien sea muy rápido pulsando F5, pero para evitar eso ya no se me ocurre nada.
Lo más que se me ocurre para estar más seguro aún es que en la página donde se actualizaría la BD no la actualices, si no que pases todas las variables pasadas a POST a variables de sesión, luego redirecciones a otra página dónde comprobarás si esas variables de sesión existen y no están vacías en cuyo caso actualizas la BD y las vacías.
__________________
Un Lannister siempre cumple sus promesas
  #6 (permalink)  
Antiguo 02/08/2009, 12:21
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

voto por el uso de sesiones :D


ejemplo:
Código PHP:
<?php

session_start
();

if ( !isset(
$_POST['agregar']) ){
 

tablanombres();
$_SESSION['tok'] = mt_rand();
 
<
form action=' ' method=POST >
 
FORMULARIO CON ESTE CAMPO, &#161;¡IMPORTANTE!!:
 
<input type="hidden" name="tok" value="<?php echo $_SESSION['tok'];?>"


<
input type='submit' name='agregar' value='Agregar Datos' />
 
</
form>

 
}
 
else{
 if(
$_SESSION['tok'] == $_POST['tok'])
{
  
$_SESSION['tok'] = '';
##INSERT INTO tabla .....
 
##tablanombres();
 
}
else
{
echo
'No reenvies el formulario';
}
 
}
?>
  #7 (permalink)  
Antiguo 03/08/2009, 04:54
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Ahora si.
Muchisimas Gracias.
He usado al final lo de las sesiones que me dijisteis.

La unica modificación que he hecho es al final que en vez de poner

{
echo 'No reenvies el formulario';
}

He escrito un mensaje de que la página va a ser redireccionada a otra página en x segundos usando un <meta http-equiv='refresh' ...
  #8 (permalink)  
Antiguo 03/08/2009, 05:40
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: Problema con F5 cuando se insertan datos en MYSQL desde PHP

Acostumbrate tras cualquier INSERT, UPDATE o DELETE hacer un header("location:pagina.php?mensaje=1");exit();

Asi cuando alguien produzca un cambio en tu base de datos se redirige a una pagina y si hace F5 ya no toma en cuenta el formulario anterior. Ademas si le mandas la variable $mensaje=1 luego en la pagina destino puedes mostrar un mensaje del tipo "Se han grabado tus datos correctamente" o el mensaje que proceda.

Por cierto el exit(); es obligatorio, sino el header no salta bien.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:11.