Errore Header('Location: pagina.php');

Pubblicità

Mirko88

Utente Attivo
Messaggi
658
Reazioni
32
Punteggio
56
ho questa pagina...ora il punto che mi interessa sapere è cosa ha di sbagliato l'azione login....ovvero controlla i dati nel database e se sono corretti indirizza alla home, oppure reindirizza all'index con un errore..solo che gli header per effettuare l'indirizzamento mi danno questo errore:

Warning: Cannot modify header information - headers already sent by (output started at C:\Users\Mirko\Desktop\xampp\htdocs\progetto\azioni.php:8) in C:\Users\Mirko\Desktop\xampp\htdocs\progetto\azioni.php

e non riesco proprio a capire il perché...tra l'altro ho un esempio fatto da un'altra persona da dove ho preso spunto ed è molto simile alla mia pagina, però i suoi header non danno errore e va perfettamente :boh:

grazie della disponibilità :)

<?php
include "datiDiConnessione.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><?php echo NOMESITO; ?></title>
</head>

<body>
<?php
$azione=$_GET["act"];


function settaCookie($codU,$tempo){
setcookie("Login",$codU,time()+$tempo);
}

else if($azione=="login"){
$user=$_POST["user"];
$pass=md5($_POST["pass"]);
$ricorda=$_POST["ricorda"];

$conn=mysql_connect($mysql_host,$mysql_user,$mysql_passwor);
mysql_select_db($mysql_db);

$query="SELECT codUtente FROM utenti WHERE user='".$user."' AND pass='".$pass."' AND stato=1";

$risp=mysql_query($query);

if(mysql_num_rows($risp)==1){
$riga=mysql_fetch_array($risp);
if($ricorda==1)
$tempo=2592000;
else
$tempo=72000;
settaCookie($riga["codUtente"],$tempo);

header('Location: home.php'); <-----mi da errore
}
else

header('Location: index.php?err=noLogin'); <---- mi da errore

mysql_close($conn);
}

?>

</body>
</html>
 
Ti da errore perché hai un output a schermo prima del setcookie e header ()...

La funzione header(); va sempre chiamata prima di ogni echo, print ecc...od altro codice html. Da definizione gli headers di una pagina vanno impostati prima del rendering della pagina (head=testa) :)

dovresti fare così:

Codice:
<?php
require_once ("datiDiConnessione.php");

$azione=$_GET["act"];


function settaCookie($codU,$tempo){
setcookie("Login",$codU,time()+$tempo);
}

else if($azione=="login"){
$user=$_POST["user"];
$pass=md5($_POST["pass"]);
$ricorda=$_POST["ricorda"];

$conn=mysql_connect($mysql_host,$mysql_user,$mysql _passwor);
mysql_select_db($mysql_db);

$query="SELECT codUtente FROM utenti WHERE user='".$user."' AND pass='".$pass."' AND stato=1";

$risp=mysql_query($query);

if(mysql_num_rows($risp)==1){
$riga=mysql_fetch_array($risp);
if($ricorda==1)
$tempo=2592000;
else
$tempo=72000;
settaCookie($riga["codUtente"],$tempo);

header('Location: home.php'); 
}
else

header('Location: index.php?err=noLogin'); 

mysql_close($conn);
}

?>

<!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><?php echo NOMESITO; ?></title>
</head>

<body>

<?php
 // eventuale output variabile tipo echo od altro codice
?>

</body>
</html>

PS: non ho verificato il funzionamento del tuo codice...
 
ma certo!!!!!!!!!!!!!!!!!!!!!!!!!!!

ora ho capito, basta togliere tutti i tag html e lasciare solo il php

grazie 100000000000000000000
avevo fatto passare anche altri forum con altre persone che chiedevano di questo problema, ma non avevo mai capito dove fosse l'errore, parlavano tutti di output e di echo, ma non capivo, perché non ho usato nessuna echo prima dell'header

ci volevi tu a darmi l'illuminazione :)
non facevano prima a dire di eliminare ogni tag html e lasciare solo il php o comunque se proprio servono mettere i tag html alla fine del codice come mi hai mostrato tu

grazie ancora :)
 
Per evitare degli errori di questo genere io uso una tecnica molto semplice... l'output lo carico in una variabile ed alla fine lo mando all'echo... Nel tuo caso cosi:

Codice:
<?php
require_once ("datiDiConnessione.php");

define('NOMESITO','Mio Sito');

function settaCookie($codU,$tempo)
{
  setcookie("Login",$codU,time()+$tempo);
}

//per evitare di trovarti nei log "index act not found"
if ((isset($_GET['act']))&&($_GET['act']=='login')) 
{
  $user=$_POST["user"];
  $pass=md5($_POST["pass"]);
  $ricorda=$_POST["ricorda"];

  $conn=mysql_connect($mysql_host,$mysql_user,$mysql _passwor);
  mysql_select_db($mysql_db);

  $query="SELECT codUtente FROM utenti WHERE user='".$user."' AND pass='".$pass."' AND stato=1";

  $risp=mysql_query($query);

  if(mysql_num_rows($risp)==1)
  {
    $riga=mysql_fetch_array($risp);

    if($ricorda==1)
      $tempo=2592000;
    else
      $tempo=72000;

    settaCookie($riga["codUtente"],$tempo);

    header('Location: home.php'); 
  }
  else
  {
     header('Location: index.php?err=noLogin'); 
  }

  mysql_close($conn);

}

$page_output='
<!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>'.NOMESITO.'</title>
</head>

<body>
';

// codice php a volontà
// carichi sempre nella $page_output....
// usando
// $variabile='variabile';
// $page_output.='html misto php inserendo variabili php usando'.$variabile.' e continuando col html';

$page_output.='
</body>
</html>';


// alla fine non fai altro che mandare allo schermo il risultato php

echo $page_output;

?>

Ovviamente, solo in questo caso potresti anche invertire le cose, ovvero fare header(); dopo l'html ma prima di fare l'output:

Codice:
<?php

{......}

$page_output='
<!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>'.NOMESITO.'</title>
</head>

<body>
...altro html qui...
</body>
</html>';

[B][COLOR="DarkRed"]header ('Location: pagina.php');[/COLOR][/B] // <-- Puoi mettere qui in quanto l'echo lo hai alla fine del file

[B][COLOR="DarkGreen"]echo[/COLOR][/B] $page_output;
?>

PS: spero non aver fatto qualche errore di battitura come mi succede spesso ;)
 
ok capito, avevo usato una cosa simile in altre pagine per non riscrivere continuamente un form che cambiava in base agli errori dell'utente, quindi l'ho messo in una variabile e lo modificavo sommando altre variabili alla stringa

cmq ho capito il concetto ;)
grazie
 
Figurati! :)

Comunque ti puoi sempre informare su tante cose di php a PHP: PHP Manual - Manual

Preferisco quello in inglese in quanto c'è una serie di esempi dagli utenti che ti possano tornare utili a volte ;)

A presto,
V
 
Pubblicità
Pubblicità
Indietro
Top