Fehler bei wiederholtem Login!

scrotum

Erfahrenes Mitglied
Also ich hab da ein Login mit Sessions nach einem Tutorial (http://www.php-resource.de/tutorials/read/3/1/) gemacht und es funktioniert auch soweit, nur wenn ich mich dann auslogge und mich nochmals einloggen will, z.B. mit einem anderen Namen oder auch mit dem gleichen Namen (spielt keine Rolle) dann kommt diese Fehlermeldung:

Warning: Cannot add header information - headers already sent by (output started at c:\programme\easyphp\www\var.inc.php:6) in c:\programme\easyphp\www\verify.php on line 37

zeile 37 von verify.php ist die am ende:
header("Location:hauptseite.php");

hier der code zu verify.php:
PHP:
<?php
session_start();

include 'var.inc.php';

if ((!isset($username)) OR (!isset($passwort))) 
{ 
die ("Sorry, aber ohne Name bzw. Passwort geht hier nichts !"); 
}

$conn = mysql_connect("localhost","root",""); 
if (!$conn) 
{ 
die ("Sorry, Verbindungsversuch zur Datenbank ist fehlgeschlagen !"); 
}

mysql_select_db($dbname,$conn);


$result = mysql_query("SELECT passwort FROM register WHERE nickname = '$username'",$conn);

$zeileholen = mysql_fetch_array($result,MYSQL_ASSOC); 


if (!$zeileholen) 
{ 
die ("Sorry, aber dieser Name ist leider nicht bekannt !"); 
}

if ($zeileholen["passwort"] <> $passwort) 
{ 
die ("Sorry, aber dieses Passwort passt nicht zum Usernamen !"); 
}

session_register('username'); 

header("Location:hauptseite.php");

?>

und zu var.inc.php:
zeile 6 ist die ganz am ende also nur noch das:
?>

PHP:
<?// Datenbank Variablen 
$dbserver = "localhost"; // Datenbankserveradresse 
$dbname = "test"; // Name der Datenbank 
$dbuser = "root"; // Username des Datenbankbenutzers 
$dbpass = ""; // Passwort des Datenbankbenutzers 
?>

was habe ich falsch gemacht? wieso kommt diese fehlermeldung?
vielen dank für die hilfe schon im voraus.
 
das ist ein typischer Fehler: der Header wurde bereits gesendet. Daher kann man nicht nochmal einen senden. Bei dir wird das erstmal der Header mit der Session_Start()-Sequenz übergeben. Du solltest von daher eine andere Möglichkeit verwenden auf deine andere Seite umzulenken.

Ich habe das bisher nie verwenden müssen, deshalb kann ich dir auch keine Alternative nennen.
 
Weiß nicht ob das klappt, aber man könnte doch auch versuchen die Ausgabe zu Puffern. Hier mal der fertige Code:
PHP:
<?php
ob_start();
session_start();

include 'var.inc.php';

if ((!isset($username)) OR (!isset($passwort))) 
{ 
die ("Sorry, aber ohne Name bzw. Passwort geht hier nichts !"); 
}

$conn = mysql_connect("localhost","root",""); 
if (!$conn) 
{ 
die ("Sorry, Verbindungsversuch zur Datenbank ist fehlgeschlagen !"); 
}

mysql_select_db($dbname,$conn);


$result = mysql_query("SELECT passwort FROM register WHERE nickname = '$username'",$conn);

$zeileholen = mysql_fetch_array($result,MYSQL_ASSOC); 


if (!$zeileholen) 
{ 
die ("Sorry, aber dieser Name ist leider nicht bekannt !"); 
}

if ($zeileholen["passwort"] <> $passwort) 
{ 
die ("Sorry, aber dieses Passwort passt nicht zum Usernamen !"); 
}

session_register('username'); 

header("Location:hauptseite.php");
ob_end_flush();
?>
 
juhui

so funktionierts einwandfrei, vielen dank!

kannst du mir auch noch bisschen erklären was das genau ist und was das macht:
ob_start(); und ob_end_flush();

oder wo kann ich das nachlesen?

vielen dank nochmals
 
Zuletzt bearbeitet:
ob_start() und ob_end_flush() gehören zu den Pufferungsmöglichkeiten in PHP. Wenn ob_start() initialisiert wird, wird alles nachfolgende nicht sofort an den Browser geschickt, sondern erst wenn du den Befehl dazu gibst.

Nachzulesen natürlich in der PHP-Doku. Die würde ich sowieso immer auf dem Rechner haben, da man Sie immer wieder braucht. Ich empfehle für Windows die CHM-Version.
 
Zurück