Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rogerss_7

problemas com sessions

Recommended Posts

Gente tenho um sistema que inclui páginas via AJAX, quando incluo (script do Fabyo = onClick="java script:incluir('home');) este formulário e testo não consigo validar as sessões mas não mostra erro algum.

Se puxo no sitema ?q=contato ele mostra a seguinte mensagem: Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at.. line 3 e também não valida nada.

 

Página contato:

PHP
<?php

ob_start();

session_start(); // inicia a sessão linha 3

?>

<div id="conteudo_separado" style="float:left;">

<form method="post" action="java script:incluir('envia_contato');">

<label>Nome: (obrigatório)</label><br />

<input name="nome" type="text" class="text" value="<?php /* coloca o nome na sessão e retorna o valor preenchido */ echo $_SESSION["nome"]; ?>"><br />

<label>E-mail: (obrigatório)</label><br />

<input name="email" type="text" class="text" value="<?php /* coloca o email na sessão e retorna o valor preenchido */ echo $_SESSION["email"]; ?>"><br />

<label>Fone com DDD: (obrigatório)</label><br />

<input name="fone" type="text" class="text" value="<?php /* coloca o fone na sessão e retorna o valor preenchido */ echo $_SESSION["fone"]; ?>"><br />

<label>Mensagem: (obrigatório)</label><br />

<textarea name="mensagem"><?php /* coloca a mensagem na sessão e retorna o valor preenchido */ echo $_SESSION["mensagem"]; ?></textarea><br />

<input name="submit" type="submit" class="submit" value="Enviar">

</form>

</div>

 

<?php /* mostra uma mensagem alertando caso haja algum erro */ echo "<div id='alerta_contato'>" .$_SESSION["alerta"]. "</div>"; ?>

 

<?php

unset ($_SESSION["nome"]); // destrói o valor do nome

unset ($_SESSION["email"]); // destrói o valor do fone

unset ($_SESSION["fone"]); // destrói o valor do fone

unset ($_SESSION["mensagem"]); // destrói o valor da mensagem

unset ($_SESSION["alerta"]); // destrói o valor do alerta

?>

 

Página que verifica:

PHP
<?php

session_start(); // inicia a sessão;

ob_start();

?>

<?php

//verifica se a pessoa digitou o nome, e-mail, fone e mensagem, se não, recarrega o formulário.

if (

        empty($_POST["nome"])           ||

        empty($_POST["email"])       ||

        empty($_POST["fone"])           ||

        empty($_POST["mensagem"])

        ) {

        $_SESSION["alerta"] = "ERRO: você não preencheu todos os campos do formulário."; // mostra alerta

        $_SESSION["nome"] = $_POST["nome"]; // devolve o valor para o campo nome

        $_SESSION["email"] = $_POST["email"]; // devolve o valor para o campo email

        $_SESSION["fone"] = $_POST["fone"]; // devolve o valor para o campo fone

        $_SESSION["mensagem"] = $_POST["mensagem"]; // devolve o valor para o campo mensagem

        header ("Location: contato.php"); // redireciona para o contato com os valores anteriores

        }

else {

// se todos estiverem preenchidos, verifica se o e-mail é válido.

        $formato_email = '/^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$/i';

                if (!preg_match($formato_email, $_POST["email"])) {

                        $_SESSION["alerta"] = "ERRO: você não digitou um e-mail válido."; // mostra alerta

                        $_SESSION["nome"] = $_POST["nome"]; // devolve o valor para o campo nome

                        $_SESSION["email"] = $_POST["email"]; // devolve o valor para o campo email

                        $_SESSION["fone"] = $_POST["fone"]; // devolve o valor para o campo fone

                        $_SESSION["mensagem"] = $_POST["mensagem"]; // devolve o valor para o campo mensagem

                        header ("Location: contato.php"); // redireciona para o contato com os valores anteriores                   

                }

                else {

// se tudo estiver certo, envia o e-mail

                        $data = date("d/m/Y H:i");

                        $de = $_POST["email"];

                        $nome = $_POST["nome"];

                        $para = "xxxx@xxxx.xxx.xx";

               

                        $corpo  = "Enviado em <b>$data</b>n<br /><br />";

                        $corpo .= "<b>Nome:</b> "               . $_POST["nome"] . "n<br />";

                        $corpo .= "<b>Fone:</b> "               . $_POST["fone"] . "n<br />";

                        $corpo .= "<b>Mensagem:</b> "   . $_POST["mensagem"] . "n<br />";

                       

                        $cabecalho      = "Content-type: text/html; charset=iso-8859-1rn";

                        $cabecalho .= "From: $nome <$email>n";

                       

                        if (mail($para, "Contato XXXXXXX", $corpo, $cabecalho)) {

                                $_SESSION["alerta"] = "Seu e-mail foi enviado com sucesso."; // mostra alerta

                                header ("Location: contato.php"); // redireciona para o contato com sucesso     

                        }

                        else {

                                $_SESSION["alerta"] = "ERRO: e-mail não foi enviado. Tente novamente."; // mostra alerta

                                $_SESSION["nome"] = $_POST["nome"]; // devolve o valor para o campo nome

                                $_SESSION["email"] = $_POST["email"]; // devolve o valor para o campo email

                                $_SESSION["fone"] = $_POST["fone"]; // devolve o valor para o campo fone

                                $_SESSION["mensagem"] = $_POST["mensagem"]; // devolve o valor para o campo mensagem

                                header ("Location: contato.php"); // redireciona para o contato com os valores anteriores                                                   

                        }

                }

        }

ob_end_flush(); // finaliza sessão

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema aparente é que ao usar session();

 

dá problema nos headers!!

 

 

já tive esse problema!!!

 

para não ter dor de cabeça alterei meus scripts!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A Página que verifica:

 

 

você está incluindo ela a contato não precisa usar session_start() novamente!

 

pois já foi iniciada sessão!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho antes de mais nada ..

ob_start(); vem antes do session_start(); na sua pág que verifica ..

Verifique se alguma página que você inclue tem o session_start();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara fiz do jeito que você falou mas não adiantou, sobre isto: Verifique se alguma página que você inclue tem o session_start();. É assim, página do formulário está sendo incluída por AJAX e incluindo a da verificação assim que o Submit for acionado.

 

Como disse lá em cima, quando entro nesta página (formulário) via AJAX não mostra erro nenhum, se entro site.com.br?q=contato mostra o erro Cannot send session cache limiter - headers already sent ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se alguma página que você inclue tem o session_start();. É assim, página do formulário está sendo incluída por AJAX e incluindo a da verificação assim que o Submit for acionado.

Velho é o que ja foi dito a você, so se inicia a sessão uma vez, isso ta acontecendo mais de uma vez,por isso eu disse pra verificar onde isso esta acontecendo ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.