Ответ в браузере после отправки письма с PHP
я хочу дать ответ пользователю: "отправлено " или" не удалось отправить " на той же странице, которую он просматривает, после отправки письма с помощью формы... Я объясняю:
1: пользователь входит в > Contacto.html в браузере заполните форму и нажмите кнопку отправить, например:
я прилагаю код 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 (большое спасибо из замши).
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, хотя это несколько сложнее.
Ну, мне удалось решить эту проблему, благодаря комментарию @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>";
}