FORMULARIO con mensaje "enviado correctamente" en la misma página
3 seguidores
Estoy creando un formulario y quiero que aparezca un mensaje de "enviado correctamente" cuando le de a enviar pero que se mantenga en la misma página.
Encontré este código header('Location: empleo.html'); que es para mantenerse en la misma página pero entonces no me aparece el mensaje de "enviado correctamente"
Comodo
Hola, ¿cómo haces para que un archivo .html gestione código PHP? Nunca lo habia visto antes....
violeta_mateu
lo que puse ahí es solo una parte de código de php que se refiere a que se mantenga en la misma página, yo no puse que el html gestione php.
El código php entero es este:<?php
function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{
$bHayFicheros = 0;
$sCabeceraTexto = "";
$sAdjuntos = "";
if ($sDe)$sCabeceras = "From:".$sDe."\n";
else $sCabeceras = "";
$sCabeceras .= "MIME-version: 1.0\n";
foreach ($_POST as $sNombre => $sValor)
$sTexto = $sTexto."\n".$sNombre." = ".$sValor;
foreach ($_FILES as $vAdjunto)
{
if ($bHayFicheros == 0)
{
$bHayFicheros = 1;
$sCabeceras .= "Content-type: multipart/mixed;";
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";
$sCabeceraTexto = "----_Separador-de-mensajes_--\n";
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";
$sTexto = $sCabeceraTexto.$sTexto;
}
if ($vAdjunto["size"] > 0)
{
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";
$oFichero = fopen($vAdjunto["tmp_name"], 'r');
$sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
$sAdjuntos .= chunk_split(base64_encode($sContenido));
fclose($oFichero);
}
}
if ($bHayFicheros)
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";
return(mail($sPara, $sAsunto, $sTexto, $sCabeceras));
}
//cambiar aqui el email
if (form_mail("nombre@tudominio.com", $_POST[asunto],
"Los datos introducidos en el formulario son:\n\n", $_POST[email]))
echo "Su formulario ha sido enviado con exito";
header('Location: empleo.html');
?>
Comodo
Cualquier código PHP que pongas en un archivo HTML no te sirve de nada. Los archivos HTML no leen código PHP. Si tienes un archivo llamado "empleo.html" y le metes ese código en PHP, no funcionará.
violeta_mateu
creo que no lo entiendes, ese es la llamada al html desde el codigo php. Eso es lo que funciona, lo que yo pregunto es que me desaparece el mensaje de "mensaje recibido", si no me sabes contestar esto vale pero lo demás está bien.
Comodo
Pues creo que no lo estoy entendiendo. Vamos por partes y desde un principio.
Tu tienes un archivo que se llama "empleo.html" y ahí tienes un formulario de contacto en el que se envía un documento adjunto. Quieres que al darle al botón de enviar, se envíen los datos del formulario y además aparezca un mensaje que indique que todo se ha enviado correctamente.
¿Me equivoco?
Por lo que veo en tu código, el problema está en que todo el php se ejecuta en un archivo llamado "enviar_adjunto.php" y el mensaje de "Su formulario ha sido enviado con exito" solo se verá en el "enviar_adjunto.php", pero hace la redirección tan rápida que no se puede ver. Ese mensaje, según tu lo tienes ahora configurado, no se puede ver en la página "empleo.html" porque solo existe en "enviar_adjunto.php".
No sé si me explico...
violeta_mateu
Si lo entendiste y te explicaste.
Antes de poner el header location se veía pero me lo abría en otra pagina.
Ahora dices que como va muy rápido no se ve, entonces como debo hacer para que vaya más lento? o tengo que poner el mensaje en el html para que se lea pero entonces como hago para que no salga por defecto? gracias
Comodo
Exacto, antes de poner el header(location) se mostraba el mensaje y no había redireccionamiento, ahora si que lo hay por eso apenas se puede ver el mensaje. Para arreglar este problema hay varias formas, pero requieren que sigas algún tutorial que hay por internet (hay muchos).
El primero sería hacer que el formulario se ejecutara en el mismo archivo empleo.html, pero deberías renombrarlo a empleo.php para poder ejecutar ahí todo el código. Si buscas en google formulario en misma página te saldrán muchos tutoriales de como hacerlo.
El segundo caso es metiendo un código javascript dentro de tu archivo "enviar_adjunto". Deberías quitar el header location y en su lugar poner un echo "", entre las comillas deberías meter este código:
<script type="text/javascript">
function Redirect()
{
window.location="http://tupaginaweb/empleo.html";
}
setTimeout('Redirect()', 4000);
</script>
Esto hace que se ejecute todo el codigo de enviar_adjunto, al final te mostrará el mensaje de "enviado correctamente" y despúes de 4000 milisegundo volverá a tu paginaweb y la seccion empleo.html.
La tercera forma sería quitar el header locaction y poner un enlace a la sección de empleo.html. Simplemente con una etiqueta a href. Cuando el usuario vea que se ha enviado correctamente le dará a ese botón y volvera a la sección del formulario.
La última es la mas sencilla pero también la mas cutre, porque necesita que el usuario le de al enlace para volver.
Espero que te ayude.
violeta_mateu
No hace nada con el código que pones
Comodo
Es un código standard que funciona, yo lo tengo aplicado en algunas webs que he hecho, en otras webs he usado otra técnica. Si no te funciona deberías debuguear hasta encontrar donde está tu fallo. Suerte!!
rafael_o Mod Plus
Todo lo que está poniendo Comodo es correcto.
El código JavaScript que te pone no va a funcionar si es que no le has quitado el header location al php ya que este reacciona antes que el JavaScript. Estás copiando y pegando código sin entender bien que está haciendo.
Intenta poniendo ese código JavaScript por fuera de la etiqueta php.
Aunque debo decir que no es la manera más elegante de hacerlo. :o)
violeta_mateu
perdona pero sé lo que hago y hasta ahi llego para saber que tengo que quitar eso antes. y es que lo que no había dicho Comodo es que debía colocar el código javascript fuera del php.
Ahora ya funciona aunque no eso lo que quería, pero gracias Comodo
rafael_o Mod Plus
Para hacerlo desde el servidor reemplaza tu header por
header("Refresh:3; url=empleo.php");
El 3 es en segundos.
He de decir que esto no es mantenerse en la misma página, es regresar a la página del formulario después de 3 segundos.
Regresando a la pregunta original, la alternativa para mantenerse en la misma página del formulario original es disparar el evento de procesado del formulario en:
- Una llamada Ajax
- Una ventana modal nueva
- Un Iframe.
- Disparar el procesaod en el mismo archivo php del formulario pero evaluando si ya se ocupó con sesiones.
- Una combinación de las anteriores.
Pero son un poco más enredosas de configurar bien, por lo que el header será suficiente por ahora. He de decir que un refresh automático no es la mejor opción desde el punto de vista de Experiencia de Usuario. por lo que comenta Comodo
Es lo más amigable.