Ir para conteúdo
Fórum Script Brasil
  • 0

Função não executa alert na página


Jonas Campos

Pergunta

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?

 

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

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();
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

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');
}
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

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>
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...