Ответ в браузере после отправки письма с PHP


я хочу дать ответ пользователю: "отправлено " или" не удалось отправить " на той же странице, которую он просматривает, после отправки письма с помощью формы... Я объясняю:

1: пользователь входит в > Contacto.html в браузере заполните форму и нажмите кнопку отправить, например:

introducir la descripción de la imagen aquí

я прилагаю код html5:

<form id="formulario" action="php/sendEmail.php" method="POST">                    
    <fieldset class="txtCentral txtDerecha">                
        <input type="text" id="nombre" class="fade inForm" name="nombre_txt" placeholder="Nombre *" required/>        
        <input type="text" id="apellido" class="fade inForm" name="apellido_txt" placeholder="Apellido"/>            
        <input type="email" id="email" class="fade inForm" name="email_txt" placeholder="Email *" required/>        
        <input type="text" id="asunto" class="fade inForm" name="asunto_txt" placeholder="Asunto"/>        
        <textarea id="mensaje" class="fade inForm" name="mensaje_txt" cols="31" rows="6" placeholder="Comentarios *" required></textarea>            
        <p class="txtRotulo">* Campos obligatorios.</p>        
        <div class="botonCentro">
            <input type="submit" id="enviar" class="fade botonLink" name="enviar_btn" value="Enviar"/>
        </div>        
    </fieldset>
</form>        
<div class="txtCentral" id="respuestaCorreo"></div>

2: пользователь ожидает, что операция отправки почты будет выполнена один раз операция выполнена... Ну, как вы видите, мое намерение состоит в том, чтобы поместить текст в этот "div", который имеет id="ответпочта"(последняя строка кода html5).

но добавить этот текст... это сломает мне голову ... так как я должен сделать это из php/sendEmail.php (расположение / Имяfichphp), давайте, из кода php.

код в php таков, что:

<?php    
    /* Variables de fichero PHP. */
    $destinatario = '[email protected]';
    /* variables de formulario necesarias. */
    $nombre = $_POST['nombre_txt'];    
    $email = $_POST['email_txt'];    
    $mensaje = $_POST['mensaje_txt']; 
    /* Variables de formulario opcionales. */
    $apellido = $_POST['apellido_txt'];
    $asunto =  $_POST['asunto_txt'];
    
    /* Comprobamos valores. */
    if(isset($nombre) && !empty($nombre) &&
        isset($email) && !empty($email) &&
        isset($mensaje) && !empty($mensaje)){

        /* Dar valores a las variables auxiliares si estan vacías. */
        if(isset($apellido) && empty($apellido)){
            $apellido = "";
        }else{
            /* Lo concatamos con el nombre. */
            $nombre .= " ".$apellido;
        }

        if(isset($asunto) && empty($asunto)){
            $asunto = "Sin asunto";
        }

        /* Generamos contenido del correo*/
        $contenido = "        
            <!DOCTYPE html>
            <html lang='en'>
            <head>
                <meta charset='UTF-8'>
            </head>
            <body>
                <header>
                    <h1>Correo</h1>
                </header>
                <div>
                    <P>Usuario: ".$nombre."</p>
                    <p>Correo: ".$email."</p>
                    <p>Mensaje: ".$mensaje."</p> 
                </div>
            </body>
            </html>
        ";

        /* Generamos la cabecera del correo. */
        $cabecera = "MIME-Version: 1.0\r\n";
        $cabecera .= "Content-type: text/html; charset = UTF-8\r\n";
        $cabecera .= "From: ".$email."\r\n";

        /* Enviamos el correo guardando su estado. */
        $enviado = mail($destinatario, $asunto, $contenido, $cabecera);
    }       

    /* Mostramos información al usuario y redireccionamos. */
    if($enviado){
        echo  '<script language="javascript">
                    window.onload = function() {
                        alert("enviado");
                    }
                </script>';
    }else{
        echo  '<script language="javascript">
                    window.onload = function() {
                        alert("noEnviado");
                    }
                </script>';
    }
?>

3: пользователь видит ответ под формой,где находится вышеупомянутый div. Если он был отправлен в форме правильная почта, форма перезагружается, если нет, потому что данные остаются для исправления.

Как вы видите, то, что я пытался показать поп с помощью javaScript ... но это не кажется красивым правда ... поэтому я спрашиваю ... я предполагаю, что вы можете, но я не знаю, как ... так как я не знаю много php.

Конечно, есть какая-то функция или что-то в этом роде, кроме "echo".

PHP программисты я приветствую вас!!! xD (большое спасибо из замши).

Author: Comunidad, 2016-10-26

2 answers

Когда вы это делаете:

header('Location: ../contacto.html');
echo  '<script language="javascript">
           window.onload = function() {
               cargaRespuestaCorreo("enviado");
           }
        </script>';

На самом деле вы говорите браузеру перенаправить на указанный url-адрес, а также отобразить содержимое echo... но в текущем месте (перед перенаправлением), поскольку перенаправление выполняется по завершении скрипта.

В идеале страница контактов была бы php-скриптом, и вам было бы проще иметь дело с параметрами через GET. В этом случае вы выполните перенаправление а

 header('Location: ../contacto.php?send=1');

Или

header('Location: ../contacto.php?send=0');

В зависимости от того, было ли отправлено (или нет)

Тем не менее, вы можете использовать параметры GET и обрабатывать его с помощью javascript, хотя это несколько сложнее.

 0
Author: Muriano, 2016-10-26 08:45:00

Ну, мне удалось решить эту проблему, благодаря комментарию @Jose Хавьер Сегура, я смог найти необходимую информацию, итого, я использовал AJAX.

В html-коде я удалил только один атрибут из тега form, поэтому он остался у меня сейчас:

<form id="formulario" method="POST">                    

И функция или метод, который я использую, из JQuery с Ajax таким образом, что:

function cargaRespuestaCorreo(){
    var pathFichSenMail = 'php/sendEmail.php';
    $('#botonEnviar').click(function(){
        $.ajax({
            type: "post",
            url: pathFichSenMail,
            data: $('#formulario').serialize(),
            success: function(data){
                $('#respuestaCorreo').html(data);
            }
        });
        // Evitar que se ejecute el submit del botón.
        return false;
    });
};

И часть php, я изменил только конец, то есть условное if, такое, что:

/* Mostramos información al usuario y redireccionamos. */
if($enviado){
    echo "<p>El correo se ha enviado de forma correcta.</p>";
}else{
    echo "<p>El correo no se ha enviado.</p>";
}
 0
Author: ferpaxecosanxez, 2016-10-26 11:07:27