Problema con formularios y php

mentperduda
28 de Julio del 2005
Buenas, tengo un problema.

Tengo un formulario el qual envia los datos a la misma pagina, el problema vienen cuando se refresca la pagina (ya sea con el boton del navegador o con F5) ya que se repite la acción, como si se volviera a clicar en el boton de enviar... Hay alguna manera de solucionarlo?

Muchas gracias

tgp
28 de Julio del 2005
hacelo con dos archivos :p

mentperduda
28 de Julio del 2005
No puede ser, tienen que ser todo en una pagina

WebMasterFrank
28 de Julio del 2005
Para solventar lo que tu dices hay una solución efectiva , esta claro que la persona que te respondio esta tambien en lo cierto pero para problema plantearia una unica solución que es la del redireccionamiento , con lo cual la persona envia el formulario y cuando se envia el email se redirecciona a la misma pagina pero con la informacion de inicio es decir nada , con el formulario nuevamente vacio , de esta forma se evita el reenvio constante de emails dandole al refresco , otra solucion seria uns instancia exit (); que desvinculase el formulario de envio pero todo dentro de la misma pagina , si supones que pones un campo oculto que es el que dispara la accion del formulario , pra le primer caso de la redireccion ocurriria esto


if ($action=="ok)
{
//se envia el mail por php aqu meteria el envio del mail y con la función de abajo se redirecciona a la supuesta pagina de formulario de envio que llamremos box.php///
header("Location: box.php");
}
else {}

De esta forma el formulario envia tu correo yal mismo tiempo redirecciona si a la instancia de redireccion le metes al final en vez de solo box.php , le pones box.php?action=enviado y en la pagina del formulario
<?
if ($action=="enviado")
{print "Enhorabuean tu mensaje ha sido enviado";}


?>


con lo cual obtendria lapersona que te escribe por un lado la redirección sin problemas de repeticion del envio y por otro la capacidad de informar al usuario de que el envio ha sido realizado



Por ultimo la instancia exit lo que haria es bloquear la pagina despues del envio

<?
if ($action=="ok")
{
///Envio de mail por php
exit (print "correo enviado correctamente , <a href=box.php>volver al Formulario</a>");

}
else {}


estas dos formas te permitiran evitar el reenvio otras mas complicadas podrian ser la restriccion or la ip a un numero determinado de envios por dia para una misma ip identificada pero nos meteriamos en mas complicaciones de bases de datos que para lo que es no compensa en abosluto , pero si piensas que hay un spammer dandote la lata puedes incorporar un avisador para saber la ip del que escribe recibiendo estos datos en tu correo y avisandote de que te escriben es muy util , simplemente has de añadir otra funcion de envio de email al tuyo con eltitulo de nuevo email enviado y asociando la funcion $REMOTE_ADDR para saber la ip de la persona en cuestión , saludso buena suerte , chau , WebMasterFrank


?>