Jump to content

Não redirecionar para home


Go to solution Solved by Rui Carlos,

Recommended Posts

Posted

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

Posted

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.

Posted

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
Posted

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).

  • 7 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.