Foros del Web » Programando para Internet » PHP »

Cómo puedo evitar el reenvío de un formulario

Estas en el tema de Cómo puedo evitar el reenvío de un formulario en el foro de PHP en Foros del Web. Hola, tengo una página que muestra productos. Al final de la misma hay un formulario para que los usuarios envíen una consulta al vendedor, esto ...
  #1 (permalink)  
Antiguo 23/11/2013, 17:54
 
Fecha de Ingreso: febrero-2006
Mensajes: 35
Antigüedad: 18 años, 2 meses
Puntos: 1
Cómo puedo evitar el reenvío de un formulario

Hola, tengo una página que muestra productos.

Al final de la misma hay un formulario para que los usuarios envíen una consulta al vendedor, esto funciona bien, y luego de enviado el mensaje, la página vuelve a cargarse, y en vez del formulario sale la frase "Consulta enviada".

El problema que tengo es que luego de enviarlo, si un usuario malintencionado sólo por molestar apreta la tecla "F5", puede enviar el formulario cientos de veces en poco tiempo, porque se vuelve a reenviar como si lo hubiesen cargado desde cero.

Espero haberme explicado bien, por favor podrían decirme si conocen una forma de evitar ese reenvío ?

Dejo el código sólo del formulario:

<?php
$result=mysqli_query($link, "select * from xxxxxxxx");

while($row=mysqli_fetch_array($result ))
{
echo "Vendedor: <br> ";
echo $row["nombre_vendedor"];
echo $row["apellido_vendedor"];
echo "Enviar consulta:<br> ";
echo " <br>";

if (!isset($_POST['email'])) {
?>
<form method="post">
<label>
Nombre:
<input name="nombre" type="text" required /><br>
</label>
<label>
Email:
<input name="email" type="email" required /><br>
</label>
<label>
Consulta:
<textarea name="consulta" rows="5" cols="30" required></textarea><br>
</label>
<input type="submit" value="Enviar" />
</form>

<?php
}else{
$mensaje.= "\nNombre: ". $_POST['nombre'];
$mensaje.= "\nEmail: ".$_POST['email'];
$mensaje.= "\nConsulta: \n".$_POST['consulta'];
$destino=$row["mail_vendedor"];
$remitente=$_POST['email'];
$asunto = "Consulta";
mail($destino,$asunto,$mensaje,"FROM: $remitente");
?>
<p>Consulta enviada</p>
<?php
}

}
mysqli_free_result($resultado)
?>
  #2 (permalink)  
Antiguo 24/11/2013, 17:45
Avatar de CoriaWeb  
Fecha de Ingreso: septiembre-2012
Ubicación: Coria del Río - Sevilla
Mensajes: 1.795
Antigüedad: 11 años, 7 meses
Puntos: 130
Respuesta: Cómo puedo evitar el reenvío de un formulario

Lo mejor para este caso es que hagas la peticion en otra pagina y vuelvas al formulario, no hacerlo todo en la misma.

Tambien puedes poner un codigo captcha.

Saludos.
__________________
Hosting de Calidad
Servidores Dedicados Administrados
CoriaWeb.hosting
  #3 (permalink)  
Antiguo 24/11/2013, 18:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Cómo puedo evitar el reenvío de un formulario

Podrías generar un código y almacenarlo en una session, luego, verificas si ya se realizó algún envío con dicho código, podrías tener una tabla en la BD que guarde ese dato y la siguiente vez, solamente harías una consulta para corroborar que no se hayan enviado los datos del formulario con el código en cuestión. Otra forma sería reemplazando el código por el IP de la computadora del usuario, el cual puedes obtenerlo con la siguiente línea de código.

Código PHP:
Ver original
  1. $_SERVER["REMOTE_ADDR"];

Saludos
  #4 (permalink)  
Antiguo 24/11/2013, 18:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 35
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Cómo puedo evitar el reenvío de un formulario

Ok, gracias por las respuestas, voy a ver como puedo implementarlo.

Saludos.
  #5 (permalink)  
Antiguo 24/11/2013, 23:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Cómo puedo evitar el reenvío de un formulario

Replanteando un poco mi alternativa de solución, cada vez que el usuario envíe el formulario de consulta, tomas su IP y la almacenas en una variable de sesión, luego, cuando lo vuelva a intentar, solamente te fijas si la variable de sesión contiene el dato del IP, de ser así, ya no se le permitirá enviar el formulario de consulta nuevamente.

Este método no es 100% eficaz, pues si el usuario tiene conocimientos sobre redes, puede resetear su IP, sin embargo, tendría que hacer eso cada vez que envía un formulario de consulta, lo cual, a la larga, lo terminaría aburriendo, aunque como digo, eso lo haría alguien que tenga los conocimientos necesarios, pero dudo que la mayoría de usuarios puedan o quieran hacerlo.

Etiquetas: formulario, mysql, select, sql, usuarios
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 01:53.