John Hebert Trindade Posted May 28, 2025 at 09:17 PM Report #634881 Posted May 28, 2025 at 09:17 PM Boa noite pessoal, fiz um código que cadastra no banco de dados o email enviado através do formulário e envia. Esta a funcionar. mas após enviar o email esta redirecionando para a pagina home, e já tentei de tudo e não consigo, peço vos que me ajudem a verificar. Controller Contato.php <?php namespace Sts\Controllers; class Contato { /** * Recebe os dados que devem ser en iados para VIEW */ private array|string|null $data = null; /** * recebe os dados do formulario */ private array|null $dataForm; /**s * Instancia a classe responsavel em carregar a view * * @return void */ public function index() { $this->dataForm = filter_input_array(INPUT_POST, FILTER_DEFAULT); if (!empty($this->dataForm['AddContMsg'])) { unset($this->dataForm['AddContMsg']); $createContactMsg = new \Sts\Models\StsContato(); if($createContactMsg->create($this->dataForm)) { } else { $this->data['form'] = $this->dataForm; } } $this->data['menu'] = 'content'; $loadView = new \Core\ConfigView('sts/Views/contato/contato', $this->data); $loadView->loadView(); } } Modem StsContato.php <?php namespace Sts\Models; /** Model para cadastrar registos no banco de dados */ class StsContato { private $data; public function create(array $data): bool { $this->data = $data; $this->data['created'] = date('Y-m-d H:i:s'); $createContactMsg = new \Sts\helper\StsCreate(); $createContactMsg->exeCreate('sts_contacts_msgs', $this->data); if($createContactMsg->getResult()) { $this->sendEmail(); return true; } else { $_SESSION['msg'] = "<p style='color: red;'>Erro ao enviar mensagem!</p>"; return false; } } private function sendEmail(): void { $sendEmail = new \Sts\helper\StsSendMail(); $sendEmail->sendEmail(); if ($sendEmail->getResult()) { $_SESSION['msg'] = "<p class='alert-success'>Mensagem enviada com sucesso!</p>"; $this->result = true; } else { $_SESSION['msg'] = "<p class='alert-danger'>Mensagem nao enviada com sucesso!</p>"; $this->result = false; } } } Helper StsSendMail.php <?php namespace Sts\helper; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; /** * Classe para enviar email * * @author John <jht_pt@icloud.com> */ class StsSendMail { /** * @var array recebe as informaçoes do conteudo do email */ private array $data; /** * @var array recebe as credenciais do email */ private array $dataInfoEmail; /** * @var array|null recebe as credenciais do banco de dados */ private array|null $resultBd; /** * @var bool recebe true quando executar com sucesso e false quando houver erro */ private bool $result; /** * @var string recebe as informações o email do remetente */ private string $fromEmail; /** * Retorna true quando executar com sucesso e false quando houver erro */ public function getResult(): bool { return $this->result; } public function sendEmail(): void { //Dados do Destinatario $this->data['toEmail'] = $_POST['email']; $this->data['toName'] = $_POST['name']; $this->data['contact'] = $_POST['contact']; $this->data['subject'] = $_POST['subject']; $this->data['contentHtml'] = $_POST['content']; $this->data['contentText'] = $_POST['content']; $this->infoPhpMailer(); } private function infoPhpMailer(): void { $confEmail = new StsRead(); $confEmail->fullRead('SELECT title, name, email, host, usename, password, smtpsecure, port FROM sts_confs_email WHERE id =:id LIMIT :limit', 'id=1&limit=1'); $this->resultBd = $confEmail->getResult(); //verifica se recebeu algum registo do banco de dados if($this->resultBd) { //Continua o processamento //dados do servidor de envio $this->dataInfoEmail['host'] = $this->resultBd[0]['host']; $this->dataInfoEmail['fromEmail'] = $this->resultBd[0]['email']; $this->fromEmail = $this->dataInfoEmail['fromEmail']; $this->dataInfoEmail['fromName'] = $this->resultBd[0]['name']; $this->dataInfoEmail['userName'] = $this->resultBd[0]['usename']; $this->dataInfoEmail['password'] = $this->resultBd[0]['password']; $this->dataInfoEmail['smtpsecure'] = $this->resultBd[0]['smtpsecure']; $this->dataInfoEmail['port'] = $this->resultBd[0]['port']; $this->sendEmailPhpMailer(); } else { $_SESSION['msg'] = "<p class='alert-danger'>Mensagem não enviada com sucesso!</p>"; $this->result = false; } } private function sendEmailPhpMailer(): void { $mail = new PHPMailer(true); try { //Configurações do servidor //$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Exibe o debug do envio $mail->CharSet = 'UTF-8'; //Aceita caracteres especiais $mail->isSMTP(); $mail->Host = $this->dataInfoEmail['host']; //Host do servidor $mail->SMTPAuth = true; $mail->Username = $this->dataInfoEmail['userName']; //Usuario $mail->Password = $this->dataInfoEmail['password']; //Senha $mail->SMTPSecure = $this->dataInfoEmail['smtpsecure']; $mail->Port = $this->dataInfoEmail['port']; //Dados do Destinatário $mail->setFrom($this->dataInfoEmail['fromEmail'], $this->dataInfoEmail['fromName']); $mail->addAddress( $this->dataInfoEmail['fromEmail'], $this->data['toName']); //Email do destinatário $mail->addReplyTo($this->data['toEmail'], $this->data['toName']); //conteudo do Email $mail->isHTML(true); //Set email format to HTML $mail->Subject = $this->data['subject']; $mail->Body = '<p><strong>Contato:</strong> ' . htmlspecialchars($this->data['contact']) . '</p>' . $this->data['contentHtml']; $mail->AltBody = 'Contato: ' . $this->data['contact'] . "\n" . $this->data['contentText']; $mail->send(); $this->result = true; } catch (Exception $e) { $this->result = false; } } } View contato.php <?php if (isset($this->data['form'])) { $valueForm = $this->data['form']; extract($valueForm); } ?> <!-- Inicio do contacto --> <div class="page-content contact"> <div class="container"> <div class="row"> <div class="col-md-4"> <div class="item"> <div class="icon"><i class="fas fa-map-marker-alt"></i></div> <h2>Morada</h2> <div class="text"> Rua A, N123<br> (VISITAS POR MARCAÇÕES)<br> </div> </div> </div> <div class="col-md-4"> <div class="item"> <div class="icon"><i class="fas fa-phone-alt"></i></div> <h2>Contacto</h2> <div class="text"> Telm. +351 000 000 000<br> (Chamada nacional)<br> </div> </div> </div> <div class="col-md-4"> <div class="item"> <div class="icon"><i class="fas fa-envelope"></i></div> <h2>Email</h2> <div class="text"> <a class="email" href="mailto:geral@meuemail.pt?subject=Pedido de Informação"> email: geral@meuemail.pt</a> </div> </div> </div> </div> <div class="row form-map"> <div class="col-lg-6 col-md-12"> <h2>Entre em contacto connosco através do formulário:</h2> <form action="" method="post"> <?php $value_name = ''; if (isset($name)) { $value_name = $name; } ?> <div class="mb-3"> <input name="name" type="text" id="name" class="form-control" placeholder="Nome completo*" value="<?php echo $value_name; ?>" required="required"> </div> <?php $value_email = ''; if (isset($email)) { $value_email = $email; } ?> <div class="mb-3"> <input name="email" type="email" id="email" placeholder="Email*" class="form-control" value="<?php echo $value_email; ?>" required="required"> </div> <?php $value_contact = ''; if (isset($contact)) { $value_contact = $contact; } ?> <div class="mb-3"> <input name="contact" type="text" id="contact" placeholder="Contacto*" class="form-control" value="<?php echo $value_contact; ?>" required="required"> </div> <?php $value_subject = ''; if (isset($subject)) { $value_subject = $subject; } ?> <div class="mb-3"> <input name="subject" type="text" id="subject" class="form-control" placeholder="Assunto da mensagem*" value="<?php echo $value_subject; ?>"> </div> <?php $value_content = ''; if (isset($content)) { $value_content = $content; } ?> <div class="mb-3"> <textarea id="content" name="content" class="form-control" rows="6" cols="50" placeholder="Conteúdo da mensagem*" required="required"><?php echo $value_content; ?></textarea> </div> <span>( * ) - todos os itens são requeridos</span> <div class="mb-3"> <input name="AddContMsg" type="submit" class="btn btn-primary" value="Enviar"></input> <?php //Exibir mensagens if(isset($_SESSION['msg'])) { echo ' ' . $_SESSION['msg']; unset($_SESSION['msg']); } ?> </div> </form> </div> <div class="col-lg-6 col-md-12"> <h2>Visitas somente por marcações:</h2> </div> </div> </div> </div> <!-- Fim contactos--> Já tenho os olhos trocados e não consigo achar, gostaria que não redirecionasse para a página home e sim ficasse na pagina de contato e exibisse apenas a mensagem de "Mensagem enviada com sucesso" no local que coloquei na View ou em um alert. Por favor ajudem me. Gratidão
Rui Carlos Posted May 29, 2025 at 12:45 PM Report #634886 Posted May 29, 2025 at 12:45 PM O POST do form está a ser enviado para que URL? Qual é o conteúdo da resposta (incluíndo headers)? Rui Carlos Gonçalves
John Hebert Trindade Posted May 29, 2025 at 02:46 PM Author Report #634889 Posted May 29, 2025 at 02:46 PM Em 29/05/2025 às 13:45, Rui Carlos disse: O POST do form está a ser enviado para que URL? Qual é o conteúdo da resposta (incluíndo headers)? O conteúdo todo do POST que vem do formulario eu recebo em: $this->dataForm = filter_input_array(INPUT_POST, FILTER_DEFAULT);
Rui Carlos Posted May 29, 2025 at 09:03 PM Report #634891 Posted May 29, 2025 at 09:03 PM Não respondeste a nenhuma das perguntas 🙂 Aquilo que queria saber era que URL é invocado quando o formulário é enviado. Esse URL deverá determinar para onde vais logo quando o formulário é enviado. Se vais para a home, o problema está aí. Se o formulário não envia o pedido para a home, à partida o que te envia para a home será um header da resposta. Rui Carlos Gonçalves
John Hebert Trindade Posted June 1, 2025 at 08:36 AM Author Report #634900 Posted June 1, 2025 at 08:36 AM Estiver a referir a: “header('Location: /');” não tenho em meu projeto. tenho apenas quando alguém tentar acessar direto na url o arquivos a instrução: //Redirecionar ou parar o processamento quando o usário nao acessar o arquivo index.php //Ou tentar acessar o arquivo directamente através da url if (!defined('SENHA')) { header('Location: /'); exit('Erro: Página não encontrada!'); } E na controle dos contactos coloquei a instrução abaixo, caso seja inserido no banco de dados com sucesso, não fazer nada e mesmo assim esta redirecionando. public function index() $this->dataForm = filter_input_array(INPUT_POST, FILTER_DEFAULT) ; if (!empty($this->dataForm['AddContMsg'])) { unset ($this->dataForm ['AddContMsg']) ; $createContactMsg = new \Sts\Models\StsContato (); if($createContactMsg->create($this->dataForm)) { ----> se conseguir adicionar com sucesso no banco de dados a mensagem não fazer nada <----- } else { $this->data ['form'] = $this->dataForm; resultado for Urue não face noda } $this->data ['menu'] = 'content': $loadView $loadView->loadView(); = new \Core\ConfigView('sts/Views/contato/contato' , $this->data) ;
Solution Rui Carlos Posted June 2, 2025 at 07:21 PM Solution Report #634901 Posted June 2, 2025 at 07:21 PM Abre as ferramentas de desenvolvimento do browser, e verifica para que URL é que o pedido POST está a ser enviado. Se o URL for da Home, tens a resposta ao teu problem. Se não for, verifica quais os headers que estão presentes na resposta (o PHP não é o único local onde o header pode ser definido). Rui Carlos Gonçalves
John Hebert Trindade Posted January 25, 2026 at 11:37 AM Author Report #635571 Posted January 25, 2026 at 11:37 AM Tinha toda a razão, tinha uma headers que estava a a reencaminhar para Home. obrigado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now