My header Location does not work


#1

`
<?php
ob_start();
session_start();
//include_once(“menus/menuGlobal.php”);
echo “<img src='images/gif.gif’class=‘img-responsive’ />”;
//include_once(“rodape.php”);
$nome = $_POST[‘nome’];
$email = $_POST[‘email’];
$mensagem = $_POST[‘mensagem’];
$assunto = $_POST[‘assunto’];

    if(empty($nome)){
        $_SESSION['erro'] = "Campo nome não foi preenchido!";
         header("Location:contatos.php");
    } else if(empty($email)){
        $_SESSION['erro'] = "Campo email não foi preenchido!";
         header("Location:contatos.php");
    } else if(empty($mensagem)){
        $_SESSION['erro'] = "Campo mensagem não foi preenchido!";
         header("Location:contatos.php");
    } else if(empty($assunto)){
        $_SESSION['erro'] = "Campo assuno não foi preenchido!";
         header("Location:contatos.php");
    }

    if((!empty($nome)) && (!empty($email)) && (!empty($mensagem))){

        require 'vendor/autoload.php';

        $from = new SendGrid\Email(null, $email);
        $subject = $assunto;
        $to = new SendGrid\Email(null, "gabrielveigalima@icloud.com");
        $content = new SendGrid\Content("text/html", "<br><br>Nova mensagem de contato pelo site<br><br>Nome: $nome<br>Email: $email <br>Mensagem: $mensagem");
        $mail = new SendGrid\Mail($from, $subject, $to, $content);

        //Necessário inserir a chave 

        $apiKey = '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';

        $sg = new \SendGrid($apiKey);

        $response = $sg->client->mail()->send()->post($mail);

        if($response){
            $_SESSION['sucesso'] = "Email enviado com sucesso, em breve estaremos respondendo!";
            header("Location:contatos.php");
        }else{
            $_SESSION['erro'] = "Email não enviado, tente novamente!";
            header("Location:contatos.php");
        }
    }

    header("Location:contatos.php");     
    ob_end_flush(); 
    ?>

`


#2

Use this
header(“Location: ./contatos.php”);

Make sure that contatos.php is in the root directory if you use above. Else you,

header("Location: ./DIRNAME/contatos.php


#3

Also, add this line of code to your .htaccess to be able to use ob_start();

php_flag output_buffering on

#4

The strange thing is that it works locally, but when it’s online it does not work


#5

Hi @Gabriel_Lima!

Please follow what @ckhawand said, and make sure you configure the headers to overwrite the previous ones. It is good to specify the redirect code as well:

header("Location: /contatos.php", true, 301);

#6

Did not work
`

    <?php
    session_start();
    //include_once("menus/menuGlobal.php");
    //echo "<center><img src='images/gif.gif'class='img-responsive' /></center>";
    //include_once("rodape.php");
	$nome     = $_POST['nome'];
	$email    = $_POST['email'];
	$mensagem = $_POST['mensagem'];
    $assunto  = $_POST['assunto'];
  
    if(empty($nome)){
        $_SESSION['erro'] = "Campo nome não foi preenchido!";
         header("Location: /contatos.php", true, 301);
    } else if(empty($email)){
        $_SESSION['erro'] = "Campo email não foi preenchido!";
         header("Location: /contatos.php", true, 301);
    } else if(empty($mensagem)){
        $_SESSION['erro'] = "Campo mensagem não foi preenchido!";
        header("Location: /contatos.php", true, 301);
    } else if(empty($assunto)){
        $_SESSION['erro'] = "Campo assuno não foi preenchido!";
         header("Location: /contatos.php", true, 301);
    }

    if((!empty($nome)) && (!empty($email)) && (!empty($mensagem))){

        require 'vendor/autoload.php';

        $from = new SendGrid\Email(null, $email);
        $subject = $assunto;
        $to = new SendGrid\Email(null, "gabrielveigalima@icloud.com");
        $content = new SendGrid\Content("text/html", "<br><br>Nova mensagem de contato pelo site<br><br>Nome: $nome<br>Email: $email <br>Mensagem: $mensagem");
        $mail = new SendGrid\Mail($from, $subject, $to, $content);

        //Necessário inserir a chave 

        $apiKey = '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';

        $sg = new \SendGrid($apiKey);

        $response = $sg->client->mail()->send()->post($mail);

        if($response){
            $_SESSION['sucesso'] = "Email enviado com sucesso, em breve estaremos respondendo!";
            header("Location: /contatos.php", true, 301);
        }else{
            $_SESSION['erro'] = "Email não enviado, tente novamente!";
            header("Location: /contatos.php", true, 301);
        }
    }

    header("Location: /contatos.php", true, 301);  
    ?>

`


#7

The problem does not rely on header(), but on the fact that you did not followed what @ckhawand said, therefore the session were not starting correctly.

I have fixed the problem. Please try it now.