Foros del Web » Programando para Internet » PHP »

Actualizar o Refrescar pagina sin reenviar los datos

Estas en el tema de Actualizar o Refrescar pagina sin reenviar los datos en el foro de PHP en Foros del Web. Saludos. tengo un pequeño problema con mi formulario en PHP cuando refresco o actualizo mi pagina que contiene el formulario, los navegadores me dan la ...
  #1 (permalink)  
Antiguo 08/08/2006, 03:32
 
Fecha de Ingreso: agosto-2006
Mensajes: 19
Antigüedad: 11 años, 4 meses
Puntos: 0
Actualizar o Refrescar pagina sin reenviar los datos

Saludos.

tengo un pequeño problema con mi formulario en PHP

cuando refresco o actualizo mi pagina que contiene el formulario, los navegadores me dan la advertencia que si reenviaran los datos, siempre y cuando aprete "aceptar" de aquel warning, y que ponga "cancelar" para volver a la pagina.

que puedo hacer para que no se me reenvie los datos al refrescar o actualizar la pagina y por ende que no me salga ese Warning?

de antemano gracias
  #2 (permalink)  
Antiguo 08/08/2006, 06:48
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 11 años, 5 meses
Puntos: 0
Pues una buena forma es una vez has realizado las tareas que debas con los datos un:

Código PHP:
header ("Location: nombredelapagina.php");
exit;
//He probado con $_SERVER['PHP_SELF'] pero parece ser que genera un bucle porque reenvia de nuevo los valores al menos en el ejemplo que me creé para verificarlo... 
Recuerda que no debes mostrar HTML alguno antes del header.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 08/08/2006, 17:08
 
Fecha de Ingreso: agosto-2006
Mensajes: 19
Antigüedad: 11 años, 4 meses
Puntos: 0
con la funcion header() me tira este warning:

Warning: Cannot modify header information - headers already sent by (output started at D:\Servidor\WEB\Formulariotest1.php:4)

Formulariotest1.php es el nombre de mi pagina

y no me muestra el formulario, lo pruebo en distintos lugares y siempre es el mismo warning.
  #4 (permalink)  
Antiguo 08/08/2006, 18:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error te dice que en la línea 4 de formulariotest1.php tienes esa "salida" que està originando el problema.

Cuando envias "cabeceras" HTTP con la función header() estas se procesan antes de todo el HTML que puedas componer en esa página ..

De hecho el objetivo de esa redirección es ir a otra pàgina tras tu proceso PHP .. NO corresponde nada de HTML por mèdio .. ni mensajes de error/exito en ese script o mejor dicho en ese proceso.

Expón el código que usas completo y veremos forma de "ordenarlo" para que no se produzca el problema.

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 08/08/2006, 19:15
 
Fecha de Ingreso: agosto-2006
Mensajes: 19
Antigüedad: 11 años, 4 meses
Puntos: 0
Código HTML:
<html>
<head>
<script language="javascript" type="text/javascript">
       function validar(objFormulario)
        {
         if (objFormulario.elements["Empresa"].value != "")
         {
          if (objFormulario.elements["Nombre"].value != "")
          {
           if (objFormulario.elements["Apellidos"].value != "")
           {
	    if (objFormulario.elements["E-mail"].value != "")
            {
	     if (objFormulario.elements["Consulta"].value != "")
             {
	      if (objFormulario.elements["tlf"].value != "")
              {
               alert ("Su consulta se ha enviado con exito");
	        if (!isNaN(parseInt(objFormulario.elements["tlf"].value)))
                {
                 return(true);
	        }
                else
                {
                 alert ("Formato incorrecto en el campo TELÉFONO");
                 return(false);
                }
               }
              else
              {
               alert ("Rellene el campo TElËFONO");
               return(false);
              }
             }
            else
            {
             alert ("Haga su consulta");
             return(false);
            }
           }
	  else
          {
           alert ("Rellene el campo E-mail");
           return(false);
          }
	 }
	 else
         {
          alert ("Rellene el campo Apellidos");
          return(false);
         }
	}
	else
        {
         alert ("Rellene el campo Nombre");
         return(false);
        }
       }
       else
       {
        alert ("Rellene el campo Empresa");
        return(false);
       }
      }
</script>
<style type="text/css">
<!--
.Estilo1 {font-size: 24px}
-->
</style>
</head>
<body>
<form  name="formulario" action="Formulariotest1.php" method="post" onSubmit="return(validar(this))">
  <table width="200" border="0" align="center">
    <tr>
      <td><span class="Estilo16">Empresa</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Empresa" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">Nombre</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Nombre" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">Apellidos</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Apellidos" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">E-mail</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="E-mail" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><span class="Estilo16">Consulta
          <label></label>
      </span> <span class="Estilo18">
      <label></label>
      </span></td>
    </tr>
  </table>
  <table width="217" border="0" align="center">
    <tr>
      <td><label>
        <textarea name="Consulta" cols="40" rows="6" wrap="hard"></textarea>
      </label></td>
    </tr>
  </table>
  <table width="217
  " border="0" align="center">
    <tr>
      <td><label>
        <div align="center">
          <input type="submit" name="Submit"  value="Enviar">
        </div>
      </label></td>
      <td><label>
        <div align="center">
          <input type="reset" name="Submit2" value="Borrar">
        </div>
      </label></td>
    </tr>
  </table>
</form>
<p>

<? 
if ($_POST['Submit']=="Enviar")
  {
   $Empresa1= $_POST["Empresa"];
   $cuerpo = "Formulario enviado\n";
   $cuerpo .= "Empresa: ".$_POST["Empresa"]. "\r\n";
   $cuerpo .= "Nombre: " . $_POST["Nombre"] . "\r\n";
   $cuerpo .= "Apellidos: ". $_POST["Apellidos"]. "\r\n";
   $cuerpo .= "Email: " . $_POST["E-mail"] . "\r\n";
   $cuerpo .= "Consulta: " ."\r\n". $_POST["Consulta"] . "\r\n";
   $res=mail("[email protected]","Consulta desde Internet de ".$Empresa1,$cuerpo) or die ("Hubo un error");
   if ($res)
       echo "<script type='text/javascript'> alert('Su consulta se ha enviado con exito') </script>";
   else
       echo "<br><br><p align='center'><b>Problema al enviar el Mensaje.</b></p>";
} 
?>

</p>
</body>
</html> 
  #6 (permalink)  
Antiguo 08/08/2006, 19:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Atendiendo a como funciona PHP y no a que estoy metiendo PHP entre el HTML (concepto que hay que tener claro). ... quedarìa:

Código PHP:
<? 
if ($_POST['Submit']=="Enviar")
  {
   
$Empresa1$_POST["Empresa"];
   
$cuerpo "Formulario enviado\n";
   
$cuerpo .= "Empresa: ".$_POST["Empresa"]. "\r\n";
   
$cuerpo .= "Nombre: " $_POST["Nombre"] . "\r\n";
   
$cuerpo .= "Apellidos: "$_POST["Apellidos"]. "\r\n";
   
$cuerpo .= "Email: " $_POST["E-mail"] . "\r\n";
   
$cuerpo .= "Consulta: " ."\r\n"$_POST["Consulta"] . "\r\n";
   
$res=mail("[email protected]","Consulta desde Internet de ".$Empresa1,$cuerpo) or die ("Hubo un error");
   if (
$res) {
    
header ("Location: $_SERVER['PHP_SELF']?msg=ok");
    exit;       
} else {
    
header ("Location: $_SERVER['PHP_SELF']?msg=error");
    exit;  
  } 
?>
<html>
<head>
<script language="javascript" type="text/javascript">
       function validar(objFormulario)
        {
         if (objFormulario.elements["Empresa"].value != "")
         {
          if (objFormulario.elements["Nombre"].value != "")
          {
           if (objFormulario.elements["Apellidos"].value != "")
           {
        if (objFormulario.elements["E-mail"].value != "")
            {
         if (objFormulario.elements["Consulta"].value != "")
             {
          if (objFormulario.elements["tlf"].value != "")
              {
               alert ("Su consulta se ha enviado con exito");
            if (!isNaN(parseInt(objFormulario.elements["tlf"].value)))
                {
                 return(true);
            }
                else
                {
                 alert ("Formato incorrecto en el campo TELÉFONO");
                 return(false);
                }
               }
              else
              {
               alert ("Rellene el campo TElËFONO");
               return(false);
              }
             }
            else
            {
             alert ("Haga su consulta");
             return(false);
            }
           }
      else
          {
           alert ("Rellene el campo E-mail");
           return(false);
          }
     }
     else
         {
          alert ("Rellene el campo Apellidos");
          return(false);
         }
    }
    else
        {
         alert ("Rellene el campo Nombre");
         return(false);
        }
       }
       else
       {
        alert ("Rellene el campo Empresa");
        return(false);
       }
      }
</script>
<style type="text/css">
<!--
.Estilo1 {font-size: 24px}
-->
</style>
</head>
<body>
<form  name="formulario" action="Formulariotest1.php" method="post" onSubmit="return(validar(this))">
  <table width="200" border="0" align="center">
    <tr>
      <td><span class="Estilo16">Empresa</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Empresa" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">Nombre</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Nombre" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">Apellidos</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="Apellidos" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Estilo16">E-mail</span></td>
      <td><span class="Estilo18">
        <label>
        <input name="E-mail" type="text" size="32">
        </label>
      </span></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><span class="Estilo16">Consulta
          <label></label>
      </span>        <span class="Estilo18">
      <label></label>
      </span></td>
    </tr>
  </table>
  <table width="217" border="0" align="center">
    <tr>
      <td><label>
        <textarea name="Consulta" cols="40" rows="6" wrap="hard"></textarea>
      </label></td>
    </tr>
  </table>
  <table width="217
  " border="0" align="center">
    <tr>
      <td><label>
        <div align="center">
          <input type="submit" name="Submit"  value="Enviar">
        </div>
      </label></td>
      <td><label>
        <div align="center">
          <input type="reset" name="Submit2" value="Borrar">
        </div>
      </label></td>
    </tr>
  </table>
</form>
<p>
<?
if (isset($_GET['msg'])){
echo 
"Hay un mensaje: ".$_GET['msg'];
}
?>
</p>
</body>
</html>
Si te fijas este código .. o "redirecciona" (con lo cual NO me interesa el "HTML" que ahì genero para otra condicion) o bien presenta esa pàgina HTML donde se compone tu formulario HTML ..

Aunque redireccionas a la misma pàgina para presentar el mensaje de error/exito .. ese es el "truco" para deshacerte de las variables que se solictian re-enviar si recargas la pàgina .. asì sòlo recargas la pàgina del "formulario" generado y no la del "proceso en sì" (la del envio del e-mail).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 22:03.