Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:31 Der er 27 kommentarer og
1 løsning

Cannot add header information?

Jeg er igang med et login system, og skal redirecte brugeren når en session bliver ændret osv.. Jeg støder bare på et problem når jeg skriver Header("location: http://www.url.dk"); så kommer flg. fejlmeddelelse:

Warning: Cannot add header information - headers already sent by (output started at /customers/gagag.dk/gagag.dk/httpd.www/cs/include/head.php:13) in /customers/gagag.dk/gagag.dk/httpd.www/cs/login.php on line 13

På line 13 i login.php har jeg stående den header som redirecter og i head.php er det eneste som jeg har stående session_start() og et kald til mysql databasen.. Hvad skal jeg gøre for at min header virker?

//Hav0k
Avatar billede 7th Praktikant
14. oktober 2003 - 22:33 #1
Hvordan ser din kode ud for login.php, de 15 første linier?
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:33 #2
der må ikke være noget udskrivning til siden før headern husk altid det
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:35 #3
<? include("include/head.php"); ?>

<center><h3>]Login[</h3></center>

<?

if($logout == 1){
    session_destroy();
    session_unregister($_SESSION['id']);
    session_unregister($_SESSION['logged_in']);
    session_unregister($_SESSION['user']);
    session_unregister($_SESSION['pass']);
    header("location: http://cs.gagag.dk");
    exit;
}else{
osv osv..

}

Det er hvad jeg har stående i min login.php
Avatar billede 7th Praktikant
14. oktober 2003 - 22:36 #4
<?
include("include/head.php");

if($logout == 1){
    session_destroy();
    session_unregister($_SESSION['id']);
    session_unregister($_SESSION['logged_in']);
    session_unregister($_SESSION['user']);
    session_unregister($_SESSION['pass']);
    header("location: http://cs.gagag.dk");
    exit;
}else{
osv osv..

}
?>

<center><h3>]Login[</h3></center>
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:36 #5
<?    //global variables and functions:
   
    session_start();
   
    $connect1 = mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());;
    mysql_select_db("xxx", $connect1);    //Connects to the MySQL database
?>

<html>
<head>
    <title></title>
<link rel="stylesheet" type="text/css" href="include/style_frame.css">
</head>

Det er hvad jeg har stående i min head.php (bruger den pga. at jeg bruger iframes)
Avatar billede 7th Praktikant
14. oktober 2003 - 22:37 #6
Som krydset skriver, så må du ikke generere noget output til browseren før header, så <center><h3>]Login[</h3></center> skal placeres efter header.
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:38 #7
ryk session start op i øverste linie
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:39 #8
Så vidt jeg husker skal session_start() altid stå i øverste linie
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:43 #9
Har gjort det hele.. men den skriver det alligevel..

Det er som om der bliver sendt noget output fra min head.php.. husk lige på at min head.php er en include i min login.php og kommer derfor FØR min header
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:44 #10
sådan ser min head.php ud nu:

<?    session_start();
   
    $connect1 = mysql_connect("localhost", "gagag_dk", "50lRU0OG") or die(mysql_error());;
    mysql_select_db("gagag_dk", $connect1);    //Connects to the MySQL database
?>

<html>
<head>
    <title></title>
<link rel="stylesheet" type="text/css" href="include/style_frame.css">
</head>

Er der noget af det som tæller for "output" så jeg ikke kan bruge min header efter dette?
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:46 #11
Skift lige dit sql password MED DET SAMME ik.

Der burde ik være noget der
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:47 #12
sådan ser min head.php ud nu:

<?    session_start(); ?>

<?PHP
   
    $connect1 = mysql_connect("localhost", "gagag_dk", "50lRU0OG") or die(mysql_error());;
    mysql_select_db("gagag_dk", $connect1);    //Connects to the MySQL database
?>

<html>
<head>
    <title></title>
<link rel="stylesheet" type="text/css" href="include/style_frame.css">
</head>

Prøv det
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:48 #13
hmm en idiot jeg dog er
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:50 #14
men det med session_start() i første linje er jeg temmelig sikker på ikke er det..
Avatar billede fangel Nybegynder
14. oktober 2003 - 22:51 #15
alt der udsender headers() skal stå før ALT output!

dette gælder for

1) session_start
2) header
3) cookie

osv..

---

dvs at du skal have din header() op over dit include() kald - eller bruge output-buffering, men dette er for det meste overkill

Morten
Avatar billede krydset Nybegynder
14. oktober 2003 - 22:53 #16
Jeg hopper af her sorry :-(

ikke noget med at du er misinformerend eller noget derhenaf men har kun selv arjdet med php i 5 mdr så er ikke harcore endnu :-(
Avatar billede 7th Praktikant
14. oktober 2003 - 22:54 #17
login.php

<?
session_start();

$connect1 = mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
mysql_select_db("xxx", $connect1); //Connects to the MySQL database

if($logout == 1){
    session_destroy();
    session_unregister($_SESSION['id']);
    session_unregister($_SESSION['logged_in']);
    session_unregister($_SESSION['user']);
    session_unregister($_SESSION['pass']);
    header("location: http://cs.gagag.dk");
    exit;
}else{
osv osv..

}
?>
<html>
<head>
    <title></title>
<link rel="stylesheet" type="text/css" href="include/style_frame.css">
</head>
<center><h3>]Login[</h3></center>
Avatar billede hav0k Nybegynder
14. oktober 2003 - 22:59 #18
Ja det kom jeg også frem til.. bare et problem her: head.php er en include til ALLE min iframe sider.. og derfor er det lidt besværligt at lægge det op i den..
Og hvad går det med output-buffering og overkill ud på?
Avatar billede detox Nybegynder
14. oktober 2003 - 23:07 #19
Avatar billede fangel Nybegynder
14. oktober 2003 - 23:07 #20
output-buffering er en funktion PHP tilbydder, hvor den 'fanger' alt output, og først viser det når hele siden er løbet igennem... på den måde kommer evt headere ud før output, da output jo bliver fanget...

men dette - siger sig selv - kræver en del flere resourcer, så det kan altid anbefales at lade være med dette! (med mindre man er rigtig hardcore og laver egen error-handler, læs min artikel på showsource.dk)

Morten
Avatar billede hav0k Nybegynder
14. oktober 2003 - 23:11 #21
Nu har jeg gjort sådan her:

<?    //global variables and functions:
   
    session_start();
   
    $connect1 = mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());;
    mysql_select_db("xxx", $connect1);    //Connects to the MySQL database

if($logout == 1){
    session_destroy();
    session_unregister($_SESSION['id']);
    session_unregister($_SESSION['logged_in']);
    session_unregister($_SESSION['user']);
    session_unregister($_SESSION['pass']);
    header("location: http://cs.gagag.dk");
    exit;
}else{

if(!isset($_POST['login_submit'])) { //Tester om brugeren kom fra quick-login
    $msg = "Forkert brugernavn / password";
}else{
    $postuser = $_POST['login_user'];
    $postpass = $_POST['login_pass']; //For læservenligheden overføres post variablerne til normale variabler
   
    $query = mysql_query("SELECT id FROM login WHERE user = '$postuser' AND pass = '$postpass'"); //Spørger efter ID
   
    $number = mysql_num_rows($query); //Tæller antaller af resultater
    if($number == 1) { //Hvis der kun er et resultat, bliver brugeren logged in
        while($data = mysql_fetch_row($query)){
            $_SESSION['id'] = $data[0];
        }
        $_SESSION['logged_in'] = 1;
        $_SESSION['user'] = $postuser;
        $_SESSION['pass'] = $postpass; //Sætter session variablerne
        echo $_SESSION['user'];
        header("Location: http://cs.gagag.dk"); //Sender brugeren videre
        exit;
    }else{
        $msg = "De indtastede oplysninger er ikke korrekte!";
    }
}

}

?>

<html>
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="include/style_frame.css">
</head>

<body>

    <center><h3>]Login[</h3></center>
   
    <? echo $msg ?>

<? include("include/bottom.php"); ?>
Avatar billede hav0k Nybegynder
14. oktober 2003 - 23:11 #22
Nå ja glemte lige at sige at det stadig ikke virker..
Avatar billede hav0k Nybegynder
14. oktober 2003 - 23:12 #23
PPS. Det er den komplette kode.. så hvis det er en fejl (hvilket der jo er) så er det i den..
Avatar billede fangel Nybegynder
14. oktober 2003 - 23:13 #24
hvilken fejl kommer der (alle fejl)... lav et link til siden, eller copy-paste samtlige fejl med. herind

Morten
Avatar billede hav0k Nybegynder
14. oktober 2003 - 23:21 #25
Warning: Cannot add header information - headers already sent by (output started at /customers/gagag.dk/gagag.dk/httpd.www/cs/login.php:34) in /customers/gagag.dk/gagag.dk/httpd.www/cs/login.php on line 35

Som sagt det eneste fejlmeddelelse..
Avatar billede fangel Nybegynder
14. oktober 2003 - 23:26 #26
her har du din synder

---
        echo $_SESSION['user'];
        header("Location: http://cs.gagag.dk"); //Sender brugeren videre
        exit;
---

ret til

---
        header("Location: http://cs.gagag.dk"); //Sender brugeren videre
        exit;
---

tænkte nok der var noget output et sted!

du får lige et svar med på vejen

Morten
Avatar billede hav0k Nybegynder
14. oktober 2003 - 23:29 #27
jeg er og en klovn engang imellem.. har nok ikke fået nok søvn.. kan ikke engang se sådan en fejl :D nå men pointene er dine.. og tak til alle andre også :)

//Hav0k
Avatar billede fangel Nybegynder
14. oktober 2003 - 23:35 #28
'351 fooes left before the top is mine - hahaha' [sidste sagt med en skummel stemme]

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester