Foros del Web » Programando para Internet » PHP »

Nesecito ayuda con esto Por favor

Estas en el tema de Nesecito ayuda con esto Por favor en el foro de PHP en Foros del Web. Hola: Tengo este problema: En una hoja php tengo un formulario, y al dar submit esta se dirige a la misma hoja para hacer la ...
  #1 (permalink)  
Antiguo 02/05/2003, 11:03
 
Fecha de Ingreso: abril-2003
Ubicación: Bogota
Mensajes: 131
Antigüedad: 14 años, 7 meses
Puntos: 2
Nesecito ayuda con esto Por favor

Hola:

Tengo este problema:

En una hoja php tengo un formulario, y al dar submit esta se dirige a la misma hoja para hacer la insercion de datos.
algo asi:

<?
if($Accion="submit")
{
insertar en la base de datos
formulario();
}
else
{
formulario();
}

funciton formulario()
{
echo "<form name=form1 action=mismahoja.php>"
...

...

...
echo "<input type submit name=Accion value=submit>";
....
}
?>

Ahora esto funciona bien, pero hay un pequeño inconveniente: cuando se ha enviado la informacion y el grava vuelve a cargar el formulario, y hasta ahi bien, PERO: si se llega le doy recargar a la pagina el vuelve a entrar a insertar y cada vez que se recarga vuelve a insertar y esto es grave.

Entonces la idea es que solo lo haga una vez y si recargo no se meta otra vez por insertar.

Gracias: espero haberme hecho entender
  #2 (permalink)  
Antiguo 02/05/2003, 11:26
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Haz una redireccion al formulario despues de inserta en la BD. Usa header("Location: ....."). No hace mucho hubo otro mensaje (exactamente este: http://www.forosdelweb.com/showthrea...hreadid=126599 ) que comentaba esto mismo.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 02/05/2003, 16:57
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 15 años, 4 meses
Puntos: 2
Ohh interesante...

En caso de que quieras mantener al usuario en la página sin necesitad de redireccionarlo, yo recomiendo una excelente variable del sistema $REMOTE_ADDR. Puedes agregar un nuevo campo llamado "ip" a tu tabla tipo VARCHAR de 15 chars.

Luego, cuando insertes en tu BD los datos, inserta en el campo "ip" el valor de $REMOTE_ADDR.

Luego mediante un "if()" puedes hacer algo asi:

$ssql = "SELECT * FROM tabla WHERE ip='$REMOTE_ADDR'";
$rs = mysql_query($ssql);
if($row = mysql_fetch_array($rs)){
echo "No puedes enviar el formulario varias veces.";
}

Saludos !

NOTA: $REMOTE_ADDR es una variable del sistema que contiene la IP del visitante.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #4 (permalink)  
Antiguo 02/05/2003, 17:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
drcyber

Es una alternativa ..si, pero .. no veo para que rebuscarse con IP's .. con Base de datos .. para una cosa que se soluciona "redireccionando" como comentó josemi .. ya sea a otra página o a SI misma con alguna variable de control que indique el proceso que tenga que hacer tras ese proceso de datos ...

El caso es que si "recargas" una página que le llegaron variables por method POST el navegador todavía mantiene esas variables y he de ahí que pida confirmación para "reenviarlas" con el consiguiente efecto de duplicidad de datos (ya sea si el proceso fué de almacenar algo en una BD .. en un .txt plano .. enviar un e-mail .. etc).

Si usas un redirecionamiento via "header" .. estas (por decirlo de alguna manera) "perdiendo" esos dtos que tiene el navegador que llegaron por POST .. así que no hay problemas de ese estilo.

Solo se trata de crear estructura de paginas tipo swicht() con "acciones" ..

Ejemplo:
Código PHP:
switch ($accion) {
   case 
"guardar":
       
// haces tu proceso de guardar datos .. en tu BD o lo q sea
        
header ("location: esta_pagina.php?accion=listar");
       exit;
       break;
   case 
"listar":
      
// haces lo que sea .. Muestra el listado ...
       
break;
   default:
       
// si no le pasas parametros al "$accion" .. por ejemplo muestras tu listado de esos dtos .. o l formulario o lo que sea

Se trata de que "imagines" que tu "script" que hace varias acciones es casi como si los tubieras aparte .. ese control de "que script" cargar .. lo hará esa variable de control $acción y su switch() .. case correspondiente.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 02/05/2003, 21:09
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 15 años, 9 meses
Puntos: 1
Otra idea sería colocar un cookie... cuando se ingrese por primera vez (esto no funciona si el personaje tiene deshabilitado cookies).
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"
  #6 (permalink)  
Antiguo 02/05/2003, 21:39
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Pues ya que estamos en este caso, estaría mejor una sesión, y con eso no se repite dos veces el formulario.
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 03:37.