Warning: Cannot modify header information - headers already sent by...

lucavalentino

Utente Attivo
15 Lug 2006
114
0
16
Ho guardato in giro per la rete il significato dell'errore e ho capito che potrebbe capitare che stampo qualcosa prima del header ma nel mio codice non sembra cosi non ditemi di guardare
http://kb.creativepark.it/kb/entry/4/ già fatto.

Ecco l'errore

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\xampp\htdocs\xxxxxx\include\common.inc.php:51) in C:\xampp\xampp\htdocs\xxxxxx\librerie\login.inc.php on line 34

Codice:
<?php
	session_start();
	require_once("librerie/login.inc.php");
	include("include/common.inc.php");
	require_once("librerie/config.inc.php");
	require_once("librerie/db.php");
	if (isset($_POST['usern'])) {
		$result = esegui_login($_POST['usern'],$_POST['passw']);
		$error_message = $result;
	}
    
    mainheader("login");
    pageheader();    
?>
	<div>
	<p class="error"><?php echo $error_message; ?></p>
	<form method="post" name="login"> 
	<p>Username:<br />
	<input name="usern" type="text" class="textfield" id="usern" size="30"></p>
	<p>Password:<br />
        <input name="passw" type="password" class="textfield" id="passw" size="30"></p>
	<input name="submit" type="submit" value="Login">
	</form>
	</div>	
<?php
	pagefooter();
	mainfooter();
?>
il file login.inc.php
Codice:
<?php   

function verifica_login()
{
	if (is_null($_SESSION['user'])) 
	{	return  false;	}
	else
	{	return true;	}

}
function esegui_login($username, $password)
{
		$sql = 'SELECT username, livello
			FROM users 
			WHERE username = ''.$username.'' AND password = ''.$password.''';
				
		$result = db_query($sql);
		if (db_num_rows($result) == 1) 
		{
			$row = db_fetch_assoc($result);
			$_SESSION['user'] = $row['username'];
			$_SESSION['livello'] = $row['livello'];
			if($_SESSION['livello']==0)
			{	header('Location: index.php');	}
			else if ($_SESSION['livello']==1)
			{	header('Location: amministratore.php');    }
		}
		else
		{
			$errorMessage = 'Username o password errati';
		}
	
	}
	return $error_message;
}
?>

Per connetermi con mysql e php e apache uso xampp su windows 7 64bit

Mettendo tutto il sito su altervista funziona tutto.

aiutooooo :incazz2:
 
Ultima modifica:
Probabilmente le impostazioni tra il tuo Windows e i loro server Linux sono diverse, comunque fai una cosa, metti nel primo file in alto, prima della chiamat alle sessioni, la funzione ob_start() e infondo allo stesso file ob_end_flush() dovrebbero risolvere.
L'errore è sicuramente il richiamo di uno dei due header all'interno dell'altro file (login.inc.php) mancano i numeri di riga ma immagino sia una di quelle a causare l'errore; se non dico cavolate, sono le sette di mattina cacchio, non puoi in un file incluso richiamare un header, ma presumo anche che in uno dei tanti file che hai incluso, forse in uno o più di essi hanno una chiamata a session_start() o un riferimento ai cookie.
 
L'errore è sicuramente il richiamo di uno dei due header all'interno dell'altro file (login.inc.php) se non dico cavolatenon puoi in un file incluso richiamare un header, ma presumo anche che in uno dei tanti file che hai incluso, forse in uno o più di essi hanno una chiamata a session_start() o un riferimento ai cookie.

Nei file collegati non ho nessuna chiamata session allora dipende tutto da windows 7 e xampp.
Come potrebbere essere riferimento ai cookie?
 
ciao
fai come ha detto marco grazia, oppure considera che il require (e l'include) è considerato un output html, quindi devi metterlo dopo
 
Infatti, tra l'altro pensavo mentre leggevo il tuo codice che require e include sono oramai considerati uno l'alias dell'altro e non c'è più differenza tra loro tranne che per gli errori che rilasciano.
require = E_ERROR e include E_WARNING ovviamente non c'entra nulla col tuo problema :)
 
magari è solo una sciocchezza, hai controllato che non ci sia un session_start anche nel file per il login?
 
Magari dico una scemenza, ho iniziato da 2 giorni con il php ma negli script di prova che sto facendo dopo l'header (nel tuo caso):

PHP:
else if ($_SESSION['livello']==1) {	
header('Location: amministratore.php');    }

non ci va un exit; per terminare lo script corrente?
una cosa del tipo:

PHP:
else if ($_SESSION['livello']==1) {	
header('Location: amministratore.php');  
exit; }
 
ciao
secondo me (ma i super esperti eventualmente mi smentiscano) l'exit e superfluo, quando cambi pagina con l'heder lo scrip muore.

p.s.
non so se è un errore di monitor, ma in php è un else if deve scriversi elseif senza spazi
 
ciao
secondo me (ma i super esperti eventualmente mi smentiscano) l'exit e superfluo, quando cambi pagina con l'heder lo scrip muore.

p.s.
non so se è un errore di monitor, ma in php è un else if deve scriversi elseif senza spazi

thnx per l'info sull'exit.
testando in questi giorni ho notato che else if o elseif non fanno differenza.

p.s.: ripeto abbiate pazienza se il 99% di quello che dico sono stupidagini è tutta inesperienza e si accettano consigli ^^'
 
Ultima modifica:

Discussioni simili