Error redirecting after submitting form [closed]

0

My code:

     <?php
        header('Content-Type: text/html; charset=utf-8');

        $email=$_POST[email];
        $nome=$_POST[nome];
        $cor=$_POST[cor];
        $nascimento=$_POST[nascimento];
        $cep=$_POST[cep];
        $endereco=$_POST[endereco];
        $numero=$_POST[numero];
        $complemento=$_POST[complemento];
        $referencia=$_POST[referencia];
        $bairro=$_POST[bairro];
        $cidade=$_POST[cidade];
        $uf=$_POST[uf];

        mail("[email protected]","Assunto do email","
        Nome: $nome
        Data de nascimento: $nascimento
        CEP: $cep
        Endereço: $endereco
        Número endereço: $numero
        Complemento: $complemento
        Referência: $referencia
        Bairro: $bairro
        Cidade: $cidade
        Estado: $uf 
        ");

    /* Este header faz o redirecionamento, com alguns GET's que
serão usados na página na qual foi redirecionada. Exemplo, no
formulário foi colocado "João" no campo name="nome",
então nome é = a João. */

        header ("location: obrigado/?cor=$cor&nome=$nome&email=$email&cep=$cep&endereco=$endereco&numero=$numero&complemento=$complemento&bairro=$bairro&referencia=$referencia&cidade=$cidade&uf=$uf"); 

        ?>

As you can see, in this example it picks up the data that is populated, it sends to this script PHP through <form name="formulario" method="post" action="concluido.php"> .

  

This script in addition to sending an email to me with this data, it also takes this data and inserts in the GET's contained in the url to which it will be redirected.

This used to work before, but I can not make it work anymore. I always find it very simple, maybe that's why he's having trouble.

  

Is it possible to make this work?

Note: You are perfectly redirecting when using localhost , but used in hospedagem web THIS ERR occurs:

  

  It does not send the email to me, nor does it redirect.

    
asked by anonymous 26.10.2016 / 07:41

5 answers

2

Alexandre,

Try this code formatted in (UTF-8 without BOM) and redone.

<?php
    $email              = addslashes($_POST['email']);
    $nome               = addslashes($_POST['nome']);
    $cor                = addslashes($_POST['cor']);
    $nascimento     = addslashes($_POST['nascimento']);
    $cep                = addslashes($_POST['cep']);
    $endereco           = addslashes($_POST['endereco']);
    $numero         = addslashes($_POST['numero']);
    $complemento        = addslashes($_POST['complemento']);
    $referencia     = addslashes($_POST['referencia']);
    $bairro         = addslashes($_POST['bairro']);
    $cidade         = addslashes($_POST['cidade']);
    $uf             = addslashes($_POST['uf']);


    $destinatario    = "[email protected]";
    $assunto         = "Assunto Exemplo";
    $msg             = "Nome: $nome
    Data de nascimento: $nascimento
    CEP: $cep
    Endereço: $endereco
    Número endereço: $numero
    Complemento: $complemento
    Referência: $referencia
    Bairro: $bairro
    Cidade: $cidade
    Estado: $uf ";

    $headers         = "MIME-Version: 1.1\r\n";
    $headers        .= "Content-type: text/plain; charset=UTF-8\r\n";
    $headers        .= "From: [email protected]\r\n"; // remetente
    $headers        .= "Return-Path: [email protected]\r\n"; // return-path
    $envio           = mail($destinatario, $assunto, $msg, $headers);

    if($envio){
       header ("location: obrigado/?cor=$cor&nome=$nome&email=$email&cep=$cep&endereco=$endereco&numero=$numero&complemento=$complemento&bairro=$bairro&referencia=$referencia&cidade=$cidade&uf=$uf"); 
    }else{
     echo "A mensagem não pode ser enviada";
    } 
?>
    
26.10.2016 / 15:25
5

The php page that you put as an example is getting via POST to capture the "bad attributes" for the example you posted the form seems to be sending via GET .

Change the method of your form to POST simple.

    
26.10.2016 / 08:46
2

At the top is this:

header('Content-Type: text/html; charset=utf-8');

This line writes information in the header.

At the end you have another header that serves to redirect to another page.

header ("location: obrigado/?cor=$cor&nome=$....

This second header also needs to write in the header, but since the header in the first header () has already been fired, this conflict occurs, issuing the famous error

Cannot modify header information..

To resolve this specific error, remove or disable the first header ()

//header('Content-Type: text/html; charset=utf-8');

This first header does not make sense because if you are redirecting without having to print anything on the current page, you do not need to invoke it.

    
26.10.2016 / 16:17
1

Good value there,

First look at the message:

  

"Can not modify header information - headers already sent by" *

     

"Can not modify header information - headers already submitted by (completed.php line 1)

What you can do is use a echo "<script type='javascript'></script>";

<?php
    header('Content-Type: text/html; charset=utf-8');

    $email       = $_POST['email'];
    $nome        = $_POST['nome'];
    $cor         = $_POST['cor'];
    $nascimento  = $_POST['nascimento'];
    $cep         = $_POST['cep'];
    $endereco    = $_POST['endereco'];
    $numero      = $_POST['numero'];
    $complemento = $_POST['complemento'];
    $referencia  = $_POST['referencia'];
    $bairro      = $_POST['bairro'];
    $cidade      = $_POST['cidade'];
    $uf          = $_POST['uf'];

    mail("[email protected]","Assunto do email","
    Nome: $nome
    Data de nascimento: $nascimento
    CEP: $cep
    Endereço: $endereco
    Número endereço: $numero
    Complemento: $complemento
    Referência: $referencia
    Bairro: $bairro
    Cidade: $cidade
    Estado: $uf 
    ");

/* Este header faz o redirecionamento, com alguns GET's que serão usados na página na qual foi redirecionada. Exemplo, no formulário foi colocado "João" no campo name="nome", então nome é = a João. */

    echo "<script type='text/javascript'> window.location='obrigado/?cor=$cor&nome=$nome&email=$email&cep=$cep&endereco=$endereco&numero=$numero&complemento=$complemento&bairro=$bairro&referencia=$referencia&cidade=$cidade&uf=$uf';</script>"; 

    ?>

Ps: It would not be the totally ideal form, but it does!

    
26.10.2016 / 14:53
0

The error seems to be time to get the information of $_POST , where there are missing single quotes in the names of the keys in old versions, this was allowed and worked in the new ones a warning is generated ex: Notice: Use of undefined constant email - assumed 'email' . >

As your code has a call of header() and an unwanted text output (warning), the error occurs Can not modify header information - already sent by .

To fix change:

$email=$_POST[email];

To:

 $email=$_POST['email'];

Suggestion for improvement:

Instead of generating this querystring in hand use the link function to simplify the work, past an associative array it generates the querystring.

Change:

header ("location: obrigado/?cor=$cor&nome=$nome&email=$email&cep=$cep&endereco=$endereco&numero=$numero&complemento=$complemento&bairro=$bairro&referencia=$referencia&cidade=$cidade&uf=$uf"); 

By:

$queryString = '?'. http_build_query($_POST);
header('location: obrigado/'. $queryString);

Do not rely on the mail() function to check if the email actually was sent. For example:

if(!mail(......)){
   die(print_r(error_get_last()));
}
    
26.10.2016 / 14:43