Jonas Campos Postado Outubro 2 Denunciar Share Postado Outubro 2 Saldações à tod@s. Fiz script para envio de emails quando um formulário é preenchido. O email é enviado com sucesso, mas não é disparado o alerta para o usuário. Segue meu script: function showAlert($message, $type = 'info') { echo "<script> Swal.fire({ title: 'Aviso', text: '$message', icon: '$type', confirmButtonText: 'OK' }); </script>"; } function redirectToHome() { echo "<script>window.location.href = '/';</script>"; } // Collect the posted variables $senderName = $_POST['name']; $senderEmail = $_POST['email']; $senderSubject = 'New Message From ' . $senderName . ' ' . $senderEmail; $senderMessage = $_POST['message']; // Create a new PHPMailer instance $mail = new PHPMailer(); $mail->setFrom($recipientEmail, $recipientName); $mail->addReplyTo($recipientEmail, $recipientName); $mail->addAddress($recipientEmail, $senderName); $mail->Subject = $senderSubject; // Define the body variable $body = " Name: $senderName<br/> Email: $senderEmail<br/> Suburb: $senderSubject<br/> Message: $senderMessage"; $mail->MsgHTML($body); $mail->Body = $body; showAlert($body, 'info'); if (!$mail->Send()) { showAlert($sendErrorMessage . ' Erro: ' . $mail->ErrorInfo, 'error'); } else { showAlert($sendSuccessMessage, 'success'); //redirectToHome(); } ?> Já tentei desligar o jquery, mas a página é cheia de carrocéis e não carrega com ele desativado. As importações de estilos e scripts estão ok e o envio de emails ocorre com sucesso. Falta só descobrir porque não dispara o alerta para o usuário ^^ Alguém poderia me ajudar por favor? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Outubro 2 Denunciar Share Postado Outubro 2 Eu apanho muito com esse negócio de JavaScript versus PHP. A minha intuição me diz para você experimentar o "exit;" na última instrução. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas Campos Postado Outubro 2 Autor Denunciar Share Postado Outubro 2 Valeu a dica, mas não funcionou =/ showAlert($body, 'info'); if (!$mail->Send()) { showAlert($sendErrorMessage . ' Erro: ' . $mail->ErrorInfo, 'error'); } else { showAlert($sendSuccessMessage, 'success'); //redirectToHome(); } exit(); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Outubro 2 Denunciar Share Postado Outubro 2 Hahahahaha... eu estava pensando assim: showAlert($sendSuccessMessage, 'success'); exit; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas Campos Postado Outubro 2 Autor Denunciar Share Postado Outubro 2 5 minutes ago, Frank K Hosaka said: Hahahahaha... eu estava pensando assim: showAlert($sendSuccessMessage, 'success'); exit; Também não roulou =/ pior que não retorna nada de erro no log Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Outubro 3 Denunciar Share Postado Outubro 3 (editado) Isso é coisa que eu ainda não tenho solução, mas por enquanto eu faço assim: return echo("Mensagem Enviada"); ou seja, quando o PHP termina de fazer uma tarefa, eu uso o PHP para notificar o usuário. Bem que eu queria usar o JavaScript, mas comigo nunca funcionou. Mas tem hora que o PHP não funciona, tipo header("location:vaParaLa.php"), e aí eu peço ajuda para o JavaScript echo "<script>location.replace('vaParaLa.php')</script>". Eu simplesmente não entendo. Editado Outubro 3 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas Campos Postado Outubro 3 Autor Denunciar Share Postado Outubro 3 Muito obrigado Frank! Eu venho de outras tecnologias. Vim parar no frontend (mas to fazendo de tudo um pouco). Trabalahei com linguagens legadas no backend por muito tempo. Faz uma semana que estou usando o php para algumas tarefas dentro do servidor. abri o log em tempo real, e enchi de linhas para ver o que estava sendo o resultado do envio. Aquele negócio: pelo comportamento da aplicação (envio de email), e mensagem do log, era pra funcionar. Mas tem tanta camada de animação no frontend que deve estar abstratindo o retorno para o usuário. Agora é literalmente caçar agulha no palheiro. (fiz o var_dump() e mandei pro log também. Tudo um sucesso, a não ser pelo retorno para o usuário) $mailSendResult = $mail->Send(); // Enviar o resultado para o log error_log('Resultado de $mail->Send(): ' . ($mailSendResult ? 'true' : 'false')); if ($mailSendResult) { error_log('email enviado com sucesso'); echo '<div class="alert alert-success" role="alert">Thank you. We will contact you shortly.</div>'; showAlert($sendSuccessMessage, 'success'); //redirectToHome(); } else { echo '<div class="alert alert-danger" role="alert">Error: ' . $mail->ErrorInfo . '</div>'; showAlert($sendErrorMessage . ' Erro: ' . $mail->ErrorInfo, 'error'); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Outubro 3 Denunciar Share Postado Outubro 3 (editado) Valeu! Eu ainda estou bem longe do ambiente servidor-cliente, eu uso o famoso método científico da tentativa e erro. Aqui no notebook, eu tenho que usar "localhost/meuprojeto" para rodar o projeto. Para rodar no hostinger, eu escrevo meuendereco.com, e ele aparece. Não tenho a menor ideia de como isso funciona, mas que eu acho isso bacana, isso eu acho. Editado Outubro 3 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonas Campos Postado Outubro 3 Autor Denunciar Share Postado Outubro 3 Consegui uma solução. Como o scrip php envia o email, mas não dava um retorno para o usuário, adicionei um eventListener na página do formulário. Assim que o botão é clicado, ele verifica a mensagem de retorno e devolve para o usuário. <script> document.addEventListener('DOMContentLoaded', function () { document.getElementById('contactForm').addEventListener('submit', function (event) { event.preventDefault(); // Prevent default form submission const formData = new FormData(this); // Collect form data fetch(this.action, { method: this.method, body: formData }) .then(response => response.text()) .then(data => { Swal.fire({ title: 'Sucesso!', text: 'Email enviado com sucesso. Obrigado por entrar em contato!', icon: 'success', confirmButtonText: 'OK' }); }) .catch(error => { Swal.fire({ title: 'Erro!', text: 'Não foi possível enviar o email. Por favor, tente novamente mais tarde.', icon: 'error', confirmButtonText: 'OK' }); }); }); }); </script> Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Jonas Campos
Saldações à tod@s. Fiz script para envio de emails quando um formulário é preenchido.
O email é enviado com sucesso, mas não é disparado o alerta para o usuário. Segue meu script:
Já tentei desligar o jquery, mas a página é cheia de carrocéis e não carrega com ele desativado.
As importações de estilos e scripts estão ok e o envio de emails ocorre com sucesso. Falta só descobrir porque não dispara o alerta para o usuário ^^
Alguém poderia me ajudar por favor?
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.