rogerss_7 0 Denunciar post Postado Dezembro 20, 2007 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 <?phpob_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 <?phpsession_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
jonata 0 Denunciar post Postado Dezembro 20, 2007 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
rogerss_7 0 Denunciar post Postado Dezembro 21, 2007 alguma sugestão pro meu? Compartilhar este post Link para o post Compartilhar em outros sites
jonata 0 Denunciar post Postado Dezembro 21, 2007 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
rogerss_7 0 Denunciar post Postado Dezembro 21, 2007 não consegui um bom resultado, na verdade ficou na mesma. Compartilhar este post Link para o post Compartilhar em outros sites
rogerss_7 0 Denunciar post Postado Dezembro 21, 2007 Gente preciso da ajuda de todos, não entendo de sessions, agora estou começando a usá-las e compreender sua lógica, se puderem me ajudar agradeço mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
JackDenio 0 Denunciar post Postado Dezembro 21, 2007 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
rogerss_7 0 Denunciar post Postado Dezembro 21, 2007 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
JackDenio 0 Denunciar post Postado Dezembro 21, 2007 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
rogerss_7 0 Denunciar post Postado Dezembro 21, 2007 Olha só, as únicas páginas que contém session são estas duas, ou seja, a do form e que manda o e-mail, se quiser refazer meu código vá em frente está 100% livre. Quem sabe se tu baixar o script http://www.revistaphp.com.br/artigo.php?id=27 e unir a estes consigamos achar a resposta. É impossível não haver saída. Compartilhar este post Link para o post Compartilhar em outros sites