Foros del Web » Programando para Internet » PHP »

Form: Confirmacion de envio en la misma pagina

Estas en el tema de Form: Confirmacion de envio en la misma pagina en el foro de PHP en Foros del Web. Hola, tengo un formulario muy simple de envio de correo que tome de internet, lo que no logro hacer es que la confirmación del envio ...
  #1 (permalink)  
Antiguo 22/07/2012, 21:41
 
Fecha de Ingreso: diciembre-2006
Mensajes: 3
Antigüedad: 17 años, 11 meses
Puntos: 0
Form: Confirmacion de envio en la misma pagina

Hola, tengo un formulario muy simple de envio de correo que tome de internet, lo que no logro hacer es que la confirmación del envio lo produzca en la misma hoja, siempre me lleva a otra pagina, me gustaria que el mensaje de "Enviado Correctamente" lo haga al pie del formulario, les dejo mi codigo, cualquier pista es bienvenida, desde ya muchísimas gracias !

Código:
<?php
 
function VerifyForm(&$values, &$errors)
{
    // Do all necessary form verification
 
    if (strlen($values['name']) < 3)
        $errors['name'] = 'Name too short';
    elseif (strlen($values['name']) > 50)
        $errors['name'] = 'Name too long';
 
    // Needs better checking ;)
    if (!ereg('.*@.*\..{2,4}', $values['email']))
        $errors['email'] = 'Email address invalid';
 
    if (strlen($values['text']) == 0)
        $errors['text'] = 'Text required';
 
    return (count($errors) == 0);
}
 
function DisplayForm($values, $errors)
{
    ?>
    <html>
    <head>
        <title>Yadda yadda</title>
        <style>
            TD.error
            {
                color: red;
                font-weight: bold;    
            }
        </style>
    </head>
    <body>
 
    <?php
    if (count($errors) > 0)
        echo "<p>There were some errors in your submitted form, please correct them and try again.</p>";
    ?>
 
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="POST">
    <table>
        <tr>
            <td>Name:</td>
            <td><input type="text" size="30" name="name" value="<?= htmlentities($values['name']) ?>"/>
            <td class="error"><?= $errors['name'] ?></td>
        </tr>
        <tr>
            <td>Email:</td>
            <td><input type="text" size="30" name="email" value="<?= htmlentities($values['email']) ?>"/>
            <td class="error"><?= $errors['email'] ?></td>
        </tr>
        <tr>
            <td valign="top">Text:</td>
            <td>
                <textarea name="text" cols="30" rows="6"><?= htmlentities($values['text']) ?></textarea>
            </td>
            <td class="error"><?= $errors['text'] ?></td>
        </tr>
        <tr><td colspan="2" align="center"><input type="submit" value="Submit"></tr>
    </table>
    </form>
 
    </body>
    </html>
    <?php
}
 
function ProcessForm($values)
{
    mail('[email protected]', 'Form test', $values['text'], "From: \"{$values['name']}\" <{$values['email']}>");
 
    // Replace with actual page or redirect
    echo "<html><head><title>Muchas Gracias</title></head><body>Muchas Gracias!</body></html>";
}
 
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $formValues = $_POST;
    $formErrors = array();
 
    if (!VerifyForm($formValues, $formErrors))
        DisplayForm($formValues, $formErrors);
    else
        ProcessForm($formValues);
}
else
    DisplayForm(null, null);
?>
  #2 (permalink)  
Antiguo 22/07/2012, 22:05
Avatar de blakmetall  
Fecha de Ingreso: diciembre-2010
Ubicación: Jalisco
Mensajes: 181
Antigüedad: 13 años, 11 meses
Puntos: 18
Respuesta: Form: Confirmacion de envio en la misma pagina

Yo lo que hago es que si el usuario envia algo con formularios.
ya sea correcto o incorrecto.
guardo en una variable de session un campo de mensaje
setMsj('Gracias por su cooperacion');

y tengo una funcion para recuperar mensajes y otra para asignarlos.
Código PHP:
function setMsj($msj){
   
$_SESSION['mensaje_form'] = $msj;
}

function 
getMsg(){
   
$msj = (isset($_SESSION['mensaje_form']) && !empty($_SESSION['mensaje_form'])) ? $_SESSION['mensaje_form'] : '';
   
$_SESSION['mensaje_form'] = '';
    return 
$msj;
}

//y aca antes de los formularios o en la ubicacion que elijas pones esto y listo.
echo getMsj();
//formarios, formularios 
espero te sirva.
__________________
To the end....
  #3 (permalink)  
Antiguo 22/07/2012, 22:15
Avatar de llJhonatanll  
Fecha de Ingreso: febrero-2012
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Form: Confirmacion de envio en la misma pagina

Hola nvlucho... necesitas hacerlo con javascript, en una etiqueta div aparte..

Lo que yo suelo hacer, es lo siguiente...

En la página donde se encuentra todo el formulario.. debes crear una etiqueta div debajo, por ejemplo:

Código HTML:
<form name="form1" id="form1" action="mail.php" method="post" >

	Nombre: <input type="text" name="nombre" />
	Asunto: <input type="text" name="asunto" />
	Mensaje: <textarea name="mensaje" ></textarea>

	<br/><input type="submit" value="Enviar formulario" /> &nbsp;
        <input type="reset" value="Limpiar" name="limpiar" />

</form>

<!-- lo siguiente es solo para que se muestre una imagen de cargando antes de procesar el form -->
<div id="loading" style="display:none;"> <img src="images/loading.gif" width="50" height="50"></div> 

<!-- este es el div que interesa -->
<div id="mensaje"></div> 

Luego, dentro de la etiqueta head de la misma página debes agregar lo siguiente:

Código HTML:
<script type="text/javascript">
$(function(){
        $("#form1").submit(function(){
          $.ajax({
            type:"POST",
            url:"mail.php",
            data:$(this).serialize(),
            beforeSend:function(){
              $("#loading").show();
            },
            success:function(response){
                $("#mensaje").html(response);
                $("#loading").hide();
            }
 
          })
          return false;
        })
 
})
</script> 

Y bueno, el archivo mail.php ya lo debes conocer... jala los datos del formulario y los envía con el método mail() de php..

Código PHP:
$nombre $_POST['nombre'];
$asunto $_POST['asunto'];
$mensaje $_POST['mensaje'];

$header 'From: ' $email " \r\n";
$header .= "X-Mailer: PHP/" phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/html";
    
$body"Mensaje enviado por: " $nombre "\r\n";
$body .= "Asunto: " $mensaje "\r\n";
$body .= "Mensaje: " $mensaje " \r\n" "\r\n";
$body .= "\r\n";
$body .= "                      Desde: www.nvlucho.com";
$body .= "\r\n";
    
$para "[email protected]";
    
mail($para$asuntoutf8_decode($body), $header); 

Y si quieres que se elimpie el div de mensaje cuando reestablezcas el formulario, agregar este script...

Código HTML:
<script type="text/javascript">
      $(function(){
        $("#limpiar").click(function(){
  		  $("#respuesta").html("");
          $("#nombre").val() = "";
          $("#asunto").val() = "";
          $("#mensaje").val() = "";
        })
 
      })
</script> 

Si tienes consultas, no dudes en escribir... saludos
  #4 (permalink)  
Antiguo 23/07/2012, 07:19
 
Fecha de Ingreso: diciembre-2006
Mensajes: 3
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Form: Confirmacion de envio en la misma pagina

Muchisimas gracias blakmetallpor y llJhonatanll por la informacion, muy completo!, ahora hago un par de pruebas y les cuento como me fue.

Gracias!
:)

Etiquetas: confirmacion, formulario, html
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:39.