Foros del Web » Programando para Internet » PHP »

Como puedo evitar que al actualizar se grabe otro registro

Estas en el tema de Como puedo evitar que al actualizar se grabe otro registro en el foro de PHP en Foros del Web. Al pulsar el boton submit de un formulario me mete un registro en la base de datos. Esto es normal. Pero como puedo hacer para ...
  #1 (permalink)  
Antiguo 25/08/2010, 13:12
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Como puedo evitar que al actualizar se grabe otro registro

Al pulsar el boton submit de un formulario me mete un registro en la base de datos.
Esto es normal.

Pero como puedo hacer para que si actualizo la pagina despues de dar al boton submit no me cree otro registo.
Pues simpre que actualizo se crea un nuevo registro con los datos del primer registro.

Este es el codigo para meter el registro pulsando el boton ACEPTAR del formulario
if (isset($_POST['ACEPTAR']))
{
Aqui la consulta Mysql que graba el registro del formulario
}
  #2 (permalink)  
Antiguo 25/08/2010, 13:17
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

bueno yo para eso utilizo paginas que llamo de control las cuales son transparentes al usuario solo hacen el proceso y luego redireccionen a la pagina q se desea pero noc si te sirva saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 25/08/2010, 16:45
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Pruebas con esto:

Código PHP:
if (isset($_POST['ACEPTAR'])) 
{
Aqui la consulta Mysql que graba el registro del formulario
header 
("location:/pagina_del_proceso.php");

pagina_del_proceso.php es el fichero donde tienes el script que guarda en la bd.
Con esto, lo que hace es redirigir a la mismo formulario, evitando la molesta de la recarga pulsado f5-

Puedes enviarlo también a un formulario donde dices que los datos se han guardado corretamente, así parece que la página a nuestra vista parece que ha realizado el proceso.

Pruebas y comentas.

Saludos.
  #4 (permalink)  
Antiguo 25/08/2010, 18:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

o crear una sesion

$_SESSION['enviar']=false;


y luego en el formulario la pones a true

$_SESSION['enviar']=true;
formulario


pagina donde va el formulario:

if($_SESSION['enviar']==true) {
mysql_query();
$_SESSION['enviar']=false;
}

De esta forma si alguien le da a F5, recargará los datos, pero esta sesion no y le saltara q es false y no entrara en el if ;)
  #5 (permalink)  
Antiguo 25/08/2010, 18:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

o crear una sesion

Código PHP:
$_SESSION['enviar']=false

y luego en el formulario la pones a true

Código PHP:
$_SESSION['enviar']=true;
formulario 

pagina donde va el formulario:

Código PHP:
if($_SESSION['enviar']==true) {
             
mysql_query();
             
$_SESSION['enviar']=false;

De esta forma si alguien le da a F5, recargará los datos, pero esta sesion no y le saltara q es false y no entrara en el if ;)

sorry por el doble post :S
  #6 (permalink)  
Antiguo 25/08/2010, 23:10
Avatar de conkerick  
Fecha de Ingreso: febrero-2009
Ubicación: WWW
Mensajes: 75
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

¿No sería más factible comprobar si existe el registro mediante algún campo único y de no existir insertar en la BD?

Un saludo.
__________________
www.tecnobita.com
  #7 (permalink)  
Antiguo 25/08/2010, 23:28
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

bueno creo q todas las q dijeron son factibles sin embargo segun lei en un tutorial la mejor forma de hacer los procesos es en paginas de proceso o control las cuales solo realizen proceso es decir solo es php realizando una accion con la base de datos ya sea insertar, actualizar o borrar un registro de la base de datos pero como siempre digo es mi opinion bueno segun lo q lei de todas maneras creo que queda a criterio de cada kien segun su logica de programacion saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 26/08/2010, 00:36
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

La actualizacion de la db la tengo en el mismo programa que esta el formulario.
Esta todo en el mismo file.
El file se llama incluir.php
Y el formulario lo cargo a parte con include.
En el formularo el action apunta al file incluir.php y el method=POST
He probado con la db a poner un campo solo y exclusivamente para este fin, que lea primero el estado ante de ingresar un registro y una vez metido el registro lo cambie.
Porque esto me serviria una vez metido un registro pero ya no me dejaria meter inicialmente o al reves.
Una ver incluido un registro los valores de los campos del formulario permanecen en memoria hasta que no se vuelva a pulsar de nuevo el boton submit aunque visualmente los campos estan vacios.
Tambien he probado a poner las variables de los campos del formulario a vacio una vez metido el registro y tampoco me da resultado.
No puedo finalizar la pagina incluir php porque he de meter varios registro uno tras otro.
A veces uno a veces varios.
He provado varias opciones antes de hacer la consulta.
El tema de mi consulta era que estando metiendo registros el poder evitar que al actualizar la pagina por cualquier motivo se sigan metiendo registros con los datos del ultimo registro metido en la db.
Probare con lo que me recomendais de cambiar el estado de una sesion a ver si eso me da resultado.
No lo he podido probar pues me tengo que ir en este momento de viaje y no me da tiempo a hacerlo, pero cuando llegue a destino enseguida lo pruebo y comento.
Muchas gracias por vuestra ayuda.
  #9 (permalink)  
Antiguo 26/08/2010, 08:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Bueno ya hice el viaje y he probado lo de la sesion y tampoco funciona.
Como en el formulario va a true aunque al grabar el registro lo ponga a false.
Al actualizar
El formuario lo pone de nuevo a true.
Asi que tampoco funciona.

Si hay alguna otra idea?

Muchas gracias por vuestra ayuda.
  #10 (permalink)  
Antiguo 26/08/2010, 10:06
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

probaste como te indiq??
pagina html:
Código HTML:
Ver original
  1. <input text="campo" />
pagina_control.php
Código PHP:
Ver original
  1. mysql_query("insert into tabla (campo) values ('campo')") or die (mysql_error());
  2. header("location:pagina.html");
asi cuando envias el campo vas a la pagina de control q es .php y cuando esta termina la ejecucion regresa a la pagina espero te sirva suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 26/08/2010, 11:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Quiero entender que hay que hacer 3 pagina una de control como dices que solo contenga la sentencias de MySQL y el header.
Otra con el formulario y la pagina principal.
La pagina principal se llama en mi caso incluir.php y ahi tengo todo ecepto el formulario que lo llamo con include.
El formulario se llama leer.php aunque solo contiene el codigo html del formulario.
Este formulario apunta a la pagina incluir.php.

Entonces a ver si te entiendo.

Desde la pagina principal que es incluir.php cargo el formulario con include.
include('leer.php');
Y el formulario en ved de que apunte a incluir.php en el action que apunte a otra pagina, por ejemplo grabar.php que contenga las sentencias MySQL y el header.
Y el header que va en la pagina grabar.php que apunte a incluir.php, que es la pagina principal.

Yo actualmente lo que he conseguido es hacer un if que meta la consulta MySQL
de uno de los campos de la tabla dentro del if
if ($_POST['cantidad'] != 0)
{
consulta MySQL // graba registro
}

La primera vez funciona porque el valor de campo numerico no es cero.
Si actualizo sigue metiendo registros, porque mantiene los datos.

Pero si meto un primer registro.
A la vista los campos del formulario esta vacios.
Si pulso la tecla INTRO envia de nuevo el formulario con campos vacios.
Y ya no mete registros aunque actualice porque no se cumple la condicion del if.
  #12 (permalink)  
Antiguo 26/08/2010, 13:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Bueno ya lo he solucionado tal y como me habeis explicado.
Con las 3 paginas funciona perfectamente.
Muchas gracias por vuestra ayuda.
  #13 (permalink)  
Antiguo 26/08/2010, 14:06
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

bueno eso es lo importante q resolviste saludos es mas trabajoso pero es mejor de esa manera segun e leido ya que estas mas ordenado y sabes donde ir cuando deseas revisar algo del proceso suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 26/08/2010, 15:31
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

aunque este solucionado, te diré que lo de las sesiones si funciona, solo que el $_SESSION['post']=true; NO PUEDE ESTAR ANTES de la comprobación, ni dentro de ella :S, esto es un lenguaje lineal, es decir, que si cambias la session antes siempre sera true y no funcionará, hay que declararla debajo, más o menos seria así:

Código PHP:
if(formulario_enviado)
     if(
$_SESSION['post']) {
          
mysql_query("INSERT...");
         echo 
'los campos insertados bla b la bla';
       }
     else echo 
'El formulario ya esta enviado';
else {
     
$_SESSION['post']=true);
     
formulario

  #15 (permalink)  
Antiguo 27/08/2010, 00:48
 
Fecha de Ingreso: agosto-2009
Mensajes: 193
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Bueno tamien funciona asi como comentas.
Seguro que algo habia hecho mal.
Asi que perdonar y rectifico mi error.
Funciona de las dos maneras.
Muchisimas gracias por vuestra ayuda.
Sin ella los que no sabemos no se como podriamos aprender.
  #16 (permalink)  
Antiguo 27/08/2010, 08:06
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

de nada!
No pretendia "echarte en cara" ni nada de eso, simplemente que la gente como tu dices que entra y no sabe mucho descarte esa opción, porque para mi es una buena opción :P

Saludos!
  #17 (permalink)  
Antiguo 27/08/2010, 23:15
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Cita:
Iniciado por corretodo Ver Mensaje
Bueno ya lo he solucionado tal y como me habeis explicado.
Con las 3 paginas funciona perfectamente.
Muchas gracias por vuestra ayuda.
¿Ya probaste el resultado si regresas el explorador a la página 1 y vuelves a procesar el Form? Muchos usuarios lo hacen, a mi me pasaba y me duplicaba el registro de información.
  #18 (permalink)  
Antiguo 28/08/2010, 13:12
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Cita:
Iniciado por Bier Ver Mensaje
¿Ya probaste el resultado si regresas el explorador a la página 1 y vuelves a procesar el Form? Muchos usuarios lo hacen, a mi me pasaba y me duplicaba el registro de información.
bueno creo q para eso estan las validaciones o no?? yo lo hago de esa manera y no me ha duplicado ni cuando doy hacia atras pero bueno es cuestion de revisar saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #19 (permalink)  
Antiguo 29/08/2010, 12:10
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Cita:
Iniciado por carlos_belisario Ver Mensaje
bueno creo q para eso estan las validaciones o no?? yo lo hago de esa manera y no me ha duplicado ni cuando doy hacia atras pero bueno es cuestion de revisar saludos
Hola CarlosBelisario,

El método que indicas funciona ayuda, pero no es infalible.

Si el usuario regresa el explorador y reenvía el formulario, la operación claro se duplica, ello a menos que valides la operación con algún folio o algo similar.
  #20 (permalink)  
Antiguo 29/08/2010, 13:25
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

//..cada vez q presionas manda una variable oculta...y q ingrese siempre y cuando sea true y cuando hayas ingresado cambialo a false eso es too...
  #21 (permalink)  
Antiguo 29/08/2010, 16:43
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Como puedo evitar que al actualizar se grabe otro registro

Cita:
Iniciado por __SDP__ Ver Mensaje
//..cada vez q presionas manda una variable oculta...y q ingrese siempre y cuando sea true y cuando hayas ingresado cambialo a false eso es too...
Disculpa que insista, pero: al regresar el explorador a donde asignas la variable oculta ¿acaso no se encuentra esta en true?

Saludos

Etiquetas: registro
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:20.