Jump to content


Photo

Erro Session_Start():


  • Faça o login para participar
8 replies to this topic

#1 liska

liska

    Turista

  • Usuários
  • 34 posts
  • Sexo:Não informado

Posted 08/03/2010, 09:29

Bom dia a todos, estive sumido agora estou de volta.
retornei a programar em php. e estou enfrentando dificuldade em inserir uma imagem no banco aparece o seguinte erro,
Já inserir ob start e não resolveu. Oque pode ser?

obrigado pela ajuda

Abaixo os cod:

verifica.php
<?php
	//Inicia a sessão
	
	session_start();

	//Verifica se há dados ativos na sessão
	if(empty($_SESSION["id_user_admin"]) || empty($_SESSION["login"]) || empty($_SESSION["nome_usuario"]))
	{
		//Caso não exista dados registrados, exige login
		header("Location:index.php");
	}
?>

cadastroCapanha.php
<?php

ob_start();
include_once("verifica.php");
include_once("inc/bd.php");

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#FFFFFF">
<?php

$id_user = $_GET['id_user'];
$nome_campanha = $_POST['nome_campanha'];
$img = "";
$datahoje = date("d/m/Y"); 


/*echo "$id_user <br>
$nome_campanha <br>
$img <br>
$datahoje <br>";*/


$SQL1 = "INSERT INTO tb_cadastro_mural  
(nome_campanha, data, img, id_user_admin) VALUES 
('$nome_campanha','$datahoje','$img','$id_user')";
$ret1 = mysql_query($SQL1,$link)or die(mysql_error());

//echo "$SQL1";

$SQL = "SELECT * from tb_cadastro_mural ORDER BY id DESC LIMIT 1";
		  $ret = mysql_query($SQL,$link)or die(mysql_error());
		  while($row = mysql_fetch_array($ret)){
  		  
		  $id = $row['id'];
		  }


header("Location:update.php?ok=1&id=$id&id_user=$id_user");

?>
</body>
</html>

Erro

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\cfcrumocerto.com.br\httpdocs\admin\verifica.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\site\httpdocs\admin\cadastroCampanha.php on line 47

#2 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 08/03/2010, 10:07

Já que tá na gambi... lá no final do código, a última coisa do cadastroCampanha.php vc coloca isso:

<?php ob_end_flush(); ?>

Tenta denovo e ve se ajudou ;)Até mais

#3 liska

liska

    Turista

  • Usuários
  • 34 posts
  • Sexo:Não informado

Posted 08/03/2010, 10:49

Olá apliquei no código
<?php ob_end_flush(); ?>

no final do arquivo mas deu erro ainda.
Obrigado pela ajuda, devo aplicar mais algum codigo junto com ele?

sds
leonardo

segue o erro gerado.

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\site\httpdocs\admin\verifica.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\site\httpdocs\admin\cadastroCampanha.php on line 47

#4 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 08/03/2010, 11:19

sim... antes do ob_start(); não pode ter nenhuma saída, espaço, etc...

Na verdade o correto é seguir a mensagem de erro, e não gambiarrizar...
onde a mensagem diz que não poder ter saída alguma antes das ações que quer executar.

Lá no verifica.php vc pode perceber que vc colocou uma saída ( aquele comentário, antes do session_start(); tenta colocar depois, entre outras coisitas mais...

... não pode espaços tbm... Até mais

#5 liska

liska

    Turista

  • Usuários
  • 34 posts
  • Sexo:Não informado

Posted 09/03/2010, 12:04

Crab removi os documentários e espaçamentos, é isto que não deve ter?
mas não resolveu.
Como posso fazer sem gambiarra, como vc falou.

O que estou fazendo de errado.

obrigado;
leonardo

Amigos, alguma sujestão?
não consegui resolver.

tks;

#6 DarkSign

DarkSign

    Doutor

  • Usuários
  • 868 posts
  • Sexo:Masculino
  • Localidade:Brasil
  • Interesses:Tecnologias na área WEB em geral e desenvolvimento.

Posted 09/03/2010, 16:33

Onde se lê:
<?php

ob_start();
include_once("verifica.php");
include_once("inc/bd.php");

?>

remover ob_start(); Isso removerá o erro de session_start que está ocorrendo.

Depois, a segunda mensagem diz que não consegue enviar os cabeçalhos HTTP porque os mesmos já foram enviados antes.

Nessa linha
header("Location:update.php?ok=1&id=$id&id_user=$id_user");

?>

Você está utilizando o PHP dentro do HTML. Infelizmente, não tem como redirecionar usando headers, porque o próprio HTML já envia headers HTTP, o que impossibilita o PHP de enviar.

Se quiser utilizar, a solução é, então, separar o código PHP desse HTML, ou, uma solução mais suja, dependendo de como é feito, fazer o PHP escrever teu HTML com echos ou heredoc. Assim, conseguirá estar utilizando headers para o redirecionamento da página.

Outra solução, que eu vinha adotando pois também utilizava PHP dentro do HTML, era fazer o PHP escrever um meta-tag refresh.

Uma meta-tag refresh é algo do tipo

<META http-equiv="refresh" content="5; URL=http://www.meusite.com.br">

o 5 ali é o tempo em segundos para estar redirecionando à URL descrita.

Ufa, acho que acabei, hehehe.

Mais dúvidas, continue postando.
Não sabe por onde começar? Que tal pelas Regras ?

#7 liska

liska

    Turista

  • Usuários
  • 34 posts
  • Sexo:Não informado

Posted 09/03/2010, 17:29

Olá amigo,
fiz as suas retificações, porem ao remover o OB_start, o servidor fica esperando resposta e acaba expirando o tempo.


Onde se lê:

<?php

ob_start();
include_once("verifica.php");
include_once("inc/bd.php");

?>

remover ob_start(); Isso removerá o erro de session_start que está ocorrendo.

Depois, a segunda mensagem diz que não consegue enviar os cabeçalhos HTTP porque os mesmos já foram enviados antes.

Nessa linha
header("Location:update.php?ok=1&id=$id&id_user=$id_user");

?>

Você está utilizando o PHP dentro do HTML. Infelizmente, não tem como redirecionar usando headers, porque o próprio HTML já envia headers HTTP, o que impossibilita o PHP de enviar.

Se quiser utilizar, a solução é, então, separar o código PHP desse HTML, ou, uma solução mais suja, dependendo de como é feito, fazer o PHP escrever teu HTML com echos ou heredoc. Assim, conseguirá estar utilizando headers para o redirecionamento da página.

Outra solução, que eu vinha adotando pois também utilizava PHP dentro do HTML, era fazer o PHP escrever um meta-tag refresh.

Uma meta-tag refresh é algo do tipo

<META http-equiv="refresh" content="5; URL=http://www.meusite.com.br">

o 5 ali é o tempo em segundos para estar redirecionando à URL descrita.

Ufa, acho que acabei, hehehe.

Mais dúvidas, continue postando.


DarkSing,
Deixei o ob_start();
e acresentei no final:<?php ob_end_flush(); ?>
e diminui os erro.

apenas mostra este:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\site\httpdocs\admin\verifica.php on line 3

#8 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 09/03/2010, 18:21

Seguinte, tire o session_start() do verifica.php e coloque no cadastroCapanha.php logo abaixo do ob_start()
Mantenha o ob_end_flush() lá no final do cadastroCapanha.php

Esse cadastroCapanha.php está sendo includado em outro arquivo... alguma indexa da vida??

Outra coisa, com a gambi ob_... era pra dar certo os headers, tanto que está e o erro é na session agora.

Pergunto se está includando o cadastroCapanha.php pois quem sabe aonde está includadno tbm já foi iniciado a session.

Se está... o ob e a session devem ser iniciados lá neste arquivo.

e lá tbm que deve fechar o ob no final de tudo.

Outra coisa, não precisa verificar se a sessions estão vazias... ou ela está registradas/definidas ou não... basta if (isset($_SESSION['...']) || isset($_SESSION['...]) || etc ) Até mais

#9 Genuir

Genuir

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Interesses:PHP/MySql | HTML | CSS | Javascript

Posted 12/09/2010, 19:40

Bom dia a todos, estive sumido agora estou de volta.
retornei a programar em php. e estou enfrentando dificuldade em inserir uma imagem no banco aparece o seguinte erro,
Já inserir ob start e não resolveu. Oque pode ser?

obrigado pela ajuda

Abaixo os cod:

verifica.php

<?php
	//Inicia a sessão
	
	session_start();

	//Verifica se há dados ativos na sessão
	if(empty($_SESSION["id_user_admin"]) || empty($_SESSION["login"]) || empty($_SESSION["nome_usuario"]))
	{
		//Caso não exista dados registrados, exige login
		header("Location:index.php");
	}
?>

cadastroCapanha.php
<?php

ob_start();
include_once("verifica.php");
include_once("inc/bd.php");

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#FFFFFF">
<?php

$id_user = $_GET['id_user'];
$nome_campanha = $_POST['nome_campanha'];
$img = "";
$datahoje = date("d/m/Y"); 


/*echo "$id_user <br>
$nome_campanha <br>
$img <br>
$datahoje <br>";*/


$SQL1 = "INSERT INTO tb_cadastro_mural  
(nome_campanha, data, img, id_user_admin) VALUES 
('$nome_campanha','$datahoje','$img','$id_user')";
$ret1 = mysql_query($SQL1,$link)or die(mysql_error());

//echo "$SQL1";

$SQL = "SELECT * from tb_cadastro_mural ORDER BY id DESC LIMIT 1";
		  $ret = mysql_query($SQL,$link)or die(mysql_error());
		  while($row = mysql_fetch_array($ret)){
  		  
		  $id = $row['id'];
		  }


header("Location:update.php?ok=1&id=$id&id_user=$id_user");

?>
</body>
</html>

Erro

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\cfcrumocerto.com.br\httpdocs\admin\verifica.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at E:\vhosts\site\httpdocs\admin\cadastroCampanha.php:1) in E:\vhosts\site\httpdocs\admin\cadastroCampanha.php on line 47


Abra o arquivo "php.ini" e procure pela linha que contem "session.auto_start = 0"
e mude para "session.auto_start = 1"

e diga se deu certo!!
Genuir Foret

Site pessoal: http://www.designertec.com




2 user(s) are reading this topic

0 membro(s), 2 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq