header.. problema!

Ciao, ho fatto questa pagina per provare un login e il logout, a funzionare funziona, ma se ripeto l'errore di non scrivere il campo NOME alla seconda volta mi da un errore sull header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio); ... e naturalmente non ho capito xkè... e poi me lo fa anche sull'header finale del logout cioè : " header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio); "

L'errore in entrambi i casi è : Warning: Cannot modify header information - headers already sent by (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\prova\login.php:57) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\prova\login.php on line [la linea dell header,cioè o 111, o 78]

Vi ringrazio per l'attenzione.

<?php

session_start();

// richiamo il file di configurazione

require 'config.php';

// richiamo lo script responsabile della connessione a MySQL

require 'connect.php';

echo $_SESSION['login_effettuato'];

if ((!$_SESSION['login_effettuato']) && (!$_POST)) {

   mostra_login();

   echo mostrato;

}

else{

   if(!$_SESSION['login_effettuato'])

   {

   logga();

   }

   else{

      if((isset($_GET['log']))&&($_GET['log']=1))

         {logout();

         }else{

      ?> <a href="login.php?log=1">logout</a><?php

      }

   }

}

//funzione che mostra a video il form per il log-in

function mostra_login()

{

   // mostro un eventuale messaggio

   if(isset($_GET['msg']))

      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   ?>

   <form name="form_login" method="post" action="">

   <label>nome:

   <input name="nome" type="text" />

   </label>

   <p>

    <label>email:

   <input name="email" type="text" />

   </label>

    </p>

    <input name="login" type="submit" value="login" />

    </form>

   <?php

   }

//funzione che controlla il login

function logga()

{

   // mostro un eventuale messaggio

   if(isset($_GET['msg']))

      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   $nome= trim($_POST['nome']);

   $email= trim($_POST['email']);

   // verifico se devo eliminare gli slash inseriti automaticamente da PHP

   if(get_magic_quotes_gpc())

   {

      $nome= stripslashes($nome);

      $email= stripslashes($email);

   }

   // effettuo l'escape dei caratteri speciali per inserirli all'interno della query

   $nome = mysql_real_escape_string($nome);

   $email = mysql_real_escape_string($email);

   // verifico la presenza dei campi obbligatori

   if (!$nome)

   {

      $messaggio = urlencode("Inserire entrambi i campi per effettuare il login.");

      header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio);

      exit;

   }

   $query="SELECT nome,email FROM utenti WHERE nome='".$nome."' and email='".$email."' ";

   $result= mysql_query($query);

   // controllo l'esito

   if (!$result){

      $messaggio = urlencode("Dati errati, login non effettuato.");

      header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio);

      exit;

   }

   $_SESSION['login_effettuato'] = true;

   // libero la memoria di PHP occupata dai record estratti con la SELECT

   mysql_free_result($result);

   // chiudo la connessione a MySQL

   mysql_close();

   $messaggio = urlencode('Login Effettuato');

   header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio);

}

function logout()

{

   unset($_SESSION['login_effettuato']);

   $messaggio = urlencode("Logout effettuato.");

   header('location: '.$_SERVER[PHP_SELF].'?msg='.$messaggio);

}

?>

inviato 7 anni fa
Pixel
modificato 7 anni fa
X 0 X

prova ad inserire

ob_start();

all'inizio

co si facendo crei un buffer e dovresti risolvere ;-)

risposto 7 anni fa
dyd666
X 0 X

Grazie, funziona, anche se non ho capito il motivo ma funziona :D.

risposto 7 anni fa
Pixel
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda