Foros del Web » Programando para Internet » PHP »

Mensaje de un formulario que salga debajo del botón enviar

Estas en el tema de Mensaje de un formulario que salga debajo del botón enviar en el foro de PHP en Foros del Web. Buenos días, estoy trabajando en un formulario de contacto que además adjunta un archivo. Funciona correctamente, pero al pulsar el botón enviar me sale el ...
  #1 (permalink)  
Antiguo 01/08/2012, 04:38
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Mensaje de un formulario que salga debajo del botón enviar

Buenos días,
estoy trabajando en un formulario de contacto que además adjunta un archivo. Funciona correctamente, pero al pulsar el botón enviar me sale el mensaje de que el formulario ha sido enviado correctamente, en una página en blanco, y ya no vuleve a la página del formulario. No sé como hacer que ese mensaje me aparezca debajo del botón enviar.
Pongo aquí el código por si fuera necesario:

archivo "enviar_mail.php"

<?php
function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{

$bHayFicheros = 0;
$sCabeceraTexto = "";
$sAdjuntos = "";
$sCuerpo = $sTexto;
$sSeparador = uniqid("_Separador-de-datos_");

$sCabeceras = "MIME-version: 1.0\n";

// Recogemos los campos del formulario
foreach ($_POST as $sNombre => $sValor)
$sCuerpo = $sCuerpo."\n".$sNombre." = ".$sValor;

// Recorremos los Ficheros
foreach ($_FILES as $vAdjunto)
{

if ($bHayFicheros == 0)
{

// Hay ficheros

$bHayFicheros = 1;

// Cabeceras generales del mail
$sCabeceras .= "Content-type: multipart/mixed;";
$sCabeceras .= "boundary=\"".$sSeparador."\"\n";

// Cabeceras del texto
$sCabeceraTexto = "--".$sSeparador."\n";
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n\n";

$sCuerpo = $sCabeceraTexto.$sCuerpo;

}

// Se añade el fichero
if ($vAdjunto["size"] > 0)
{
$sAdjuntos .= "\n\n--".$sSeparador."\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"], 'rb');
$sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
$sAdjuntos .= chunk_split(base64_encode($sContenido));
fclose($oFichero);
}

}

// Si hay ficheros se añaden al cuerpo
if ($bHayFicheros)
$sCuerpo .= $sAdjuntos."\n\n--".$sSeparador."--\n";

// Se añade la cabecera de destinatario
if ($sDe)$sCabeceras .= "From:".$sDe."\n";

// Por último se envia el mail
return(mail($sPara, $sAsunto, $sCuerpo, $sCabeceras));
}

//Ejemplo de como usar:
/*if (form_mail("[email protected]",
"Activación de formulario",
"Los datos introducidos en el formulario son:\n",
"[email protected]"))
echo "Su formulario ha sido enviado con exito";*/

// Ejemplo de como usar, poniendo como remitente el campo pasado de E-mail
if (form_mail("[email protected]",
"Activación de formulario",
"Los datos introducidos en el formulario son:\n",
$_POST["E-mail"]))
echo "<script language='javascript'>";
echo "Su formulario ha sido enviado con exito";
echo 'history.back()';
echo "</script>";
?>


y este es el del form:
<form name='formulario' id='formulario' method='post' action='enviar_mail.php' enctype="multipart/form-data">
<table width="50%" border="0" align="left" cellpadding="10" cellspacing="0" style="color:#FFF">
<tr>
<td><p>Nombre</p></td>
<td><p><input type='text' name='Nombre' id='Nombre'></p></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><p>Apellidos</p>
<td><p><input type='text' name='Apellidos' id='Apellidos'></p></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><p>E-mail</p></td>
<td><p><input type='text' name='E-mail' id='E-mail'></p></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><p>Adjuntar curriculum</p></td>
<td><p><input type='file' name='archivo1' id='archivo1'></p></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><p><input type='submit' value='Enviar'></p></td>
<td><p><input type='reset' value='Borrar'></p></td>
</tr>
</table>
</form>


Gracias y saludos.
  #2 (permalink)  
Antiguo 01/08/2012, 06:34
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Mensaje de un formulario que salga debajo del botón enviar

Con PHP sólo se puede hacer de esta manera:

Al lado del botón donde quieres que se ponga el mensaje pon
Código PHP:
Ver original
  1. if(@$_GET['envioOK'] == 'si') { echo 'Se ha enviado correctamente'; }

Y donde recibes los datos tienes que hacer una redirección al archivo del formulario de la siguiente manera:

Imagina que el archivo del formulario se llama formulario.php y el que procesa el formulario se llama procesar.php.

Pues cuando recibes los datos en el archivo procesar.php tienes que redirigir (después de procesar todo el código) al archivo formulario.php?envioOK=si y así se mostraría.

De otra manera es enviando el formulario a través de AJAX.

Un saludo!
__________________
@JaimeMSE - ¡Sígueme!
  #3 (permalink)  
Antiguo 01/08/2012, 07:25
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Mensaje de un formulario que salga debajo del botón enviar

Jaime te ha dado una posible solución, pero para que entiendas un poco mas el proceso que quieres realizar te pongo unas notas ...
Tu quieres enviar un formulario, y regresar a esa pagina para mostrar el resultado de ese envio,

el proceso es el siguiente

muestro formulario,
proceso formulario,
muestro formulario con respuesta.

Te sugiero que busques en internet modelo vista-controlador, que entre otras cosas te permite organizar cosas como esta... te dejo un pequeño script para ilustrar mas o menos el proceso que tienes que seguir...

Código:
formulario.php
<fomulario action="index.php">
<input type="text" name="nombre">
<input type="submit">
<?php
if(!empty($envio)){
echo "envio completado!
}
?>


index.php

$envio=false;
$nombre=$_GET['nombre']
if(!empty($nombre)){
include('enviar_mail.php');
$envio=procesaform($datos);
}

include('formulario.php');
Pero tienes que tener en cuenta, que según esta planteado esto, si pulsas f5 cuando se ha enviado correctamente, los datos van volverse a enviar... para evitar cosas como esta puedes usar las redirecciones.
Suerte!

Última edición por harryp; 01/08/2012 a las 07:31

Etiquetas: debajo, formulario, mensaje, 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 20:59.