2010-09-01 1450 views
9

que tiene una forma sencilla php, así:forma impiden ser presentado en dos ocasiones

<?php 

if(isset($_POST['myform'])) 
    // email... 
else 
    // display form 

el problema es que si actualizar la página después de enviar el formulario, que se presentó dos veces. ¿Cómo puedo evitar que esto suceda?

Respuesta

16

Debe realizar una redirección a una página con un mensaje que se han insertado los datos ... y un botón de retroceso para ir al formulario de nuevo (si se quiere) ...

para redirigir el uso PHP utilizar la función header:

header('Location: http://www.example.com/'); 
+7

Este es por cierto la llamada [Post-redirección-Get patrón] (http://en.wikipedia.org/wiki/Post/Redirect/Get). – BalusC

+1

gracias. pero ahora tengo otro problema :) Agregué 'header ('Location: http://www.example.com/?formsent=1');', y estoy buscando '$ _GET ['formsent'] 'para mostrar un mensaje de éxito. El problema es que si actualizo la página recibo el mismo mensaje de éxito :) – Alex

+1

y el problema es? ... No lo veo como un problema, ya que no manipula ningún dato en el DB. –

3

realizar un redireccionamiento después de los datos se insertan a una página de confirmación (se puede hacer con header(), que debe limpiar los datos POST y permitir una refrescante sin duplicar el contenido.

2

En el caso de que el usuario tenga retraso y presione el botón de enviar varias veces, entonces tal vez use el mecanismo del lado del cliente, use js para desactivar el botón de enviar una vez que se presiona. pero tendrá que mostrar un mensaje que diga más o menos algo así como "enviar mensaje ... si no hay respuesta, vuelva a cargar la página y vuelva a intentar".

1
session_start();  
if (!$_SESSION['REQUEST_TYPE_USER_ID'] == $_POST) 
{ 
//your code 
//after the success process 
    $_SESSION['REQUEST_TYPE_USER_ID'] = $_POST; 
} 
else 
{ 
// request duplicated 
} 
+0

Proporcione alguna explicación sobre lo que está sucediendo en el código. El dumping de código está mal visto aquí. – rayryeng

Cuestiones relacionadas