Warning Session_start()

Roflmao

Mitglied
Erst heute habe ich danke eurer Hilfe ein Problem gelöst,aber schon ist wieder ein neues aufgetaucht. :(

Ich bin dabei einen passwortgeschuetzten Bereich aufzubauen.

Die Seite ist wie folgt aufgebaut.
Es gibt einen Header, ein Navigationsmenue, einen Mainteil ein Sidepanel und einen Footer.

Der Header, das Navigationsmenue, das Sidepanel und der Footer werden mit der php Funktion readfile aus einer externen Datei ausgelesen.


Pseudo Code:

PHP:
<head>

<?php 

function GetContent($path)
	{
	$datei_inhalt ='';
	ob_start();
	readfile($path);
	&datei_inthalt = ob_get_contents();
	ob_end_clean();
	echo $datei_inhalt;
	}
?>



</head>

<body>
<?php GetContent('.\...\Header.php') ?>
<?php GetContent('.\...\Navigation.php') ?>


Normales HTML Inhalt der Hauptseite


<?php GetContent('.\...\Sidepanel.php') ?>
<?php GetContent('.\...\Footer.php') ?>

</body>



Das Sidepanel enthaelt ein Form mit der methode post und schickt die eingegebenen Daten zur Login.php. Dort werden die Eingegebenen Daten mit einer MySQL Datenbank verglichen und bei einer erfolgreichen Pruefung wird eine Session erstellt.


Jeh nachdem ob ein User eingeloggt ist wollte ich ihn verschiedenen Content anzeigen, deswegen habe ich zu Testzwecken unterhalb des Headers folgenden Code eingefuegt.

PHP:
<?php 
session_start();

if($_SESSION['username'])
	{
	echo "Login succesfull";
	}
	else 
	{
	echo "you are not logged in";
	}


?>

Nun taucht aber folgender Fehler auf.


Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\Index.php:35) in C:\xampp\htdocs\Index.php on line 63

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Index.php:35) in C:\xampp\htdocs\Index.php on line 63

Notice: Undefined index: username in C:\xampp\htdocs\Index.php on line 65
you are not logged in

Oder

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Index.php:35) in C:\xampp\htdocs\Index.php on line 63
Login succesfull

Wo genau liegt der Fehler?
 
Aus der FAQ:
Ich bekomme die Fehlermeldung "cannot add header information", was mache ich falsch?

Diese Fehlermeldung wird ausgegeben, wenn versucht wird, ein Cookie zu setzen, eine Session zu starten oder per Header auf eine andere Seite weiterzuleiten, zuvor allerdings schon HTML Code an den Browser geschickt wurde. Entweder ihr stellt nun euren Code dementsprechend um oder ihr benutzt die Funktion ob_start() in Verbindung mit ob_end_flush().

Soll nicht altklug klingen. Aber so ists schneller gesagt :)
Kannst auch mal in die Suche hier eingeben "header already sent" Das Problem hatten inklusive mir schon sehr viele.

Gruss Joe.
 
ich schreibe lieber zuviel als zuwenig. Wenn ich Leute in anderen Gebieten helfe fand ich es immer sehr hilfreich wenn etwaiger Code dabeistand ;). Aber klar ich werde die Suche nacher nocheinmal bemuehen.
Ich hatten naemlich noch 2 weitere Probleme welche ich hier spaeter klaeren wollte.

1. Wenn ich php Code in meine externe php Datei schreibe wird diese auskommentiert in meinen Quelltext angezeigt und der php code nicht ausgefuehrt.

2. Ich moechte folgendes if Statement schreiben.

if (Session)
{

echo Wilkommen
}
else
{
<form>
...Username
</form>
}


Mit den Php Tags und dem if Statement fuehrt dies aber zu einen Syntax Error gleich dort wo das from anfaengt.
 
Ist ja kein Problem es kommen hier sicher noch kompetentere Leute vorbei um dir zu helfen. Daher das fixe kurze Posting meinerseits :)

zu den html Tags die du im php-Teil senden willst nimmst du ein echo.
Also so:
PHP:
echo "<form>";
... Username
echo "</form>";

Du kannst auch die Php Tags kurz schliessen und wieder öffnen.
Also so:
PHP:
<?php
// PHP-Code
?>
<form>
<?php
... Username
?>
</form>
<?php
// PHP-Code
?>
 
Da bleibt noch zweierlei zu ergänzen.

1) Wenn man seine Scripts in UFT-8 schreibt, weil das sonst mit den deutschen Sonderzeichen für ausländische Besucher nicht funktioniert, muss man einen Editor verwenden, der UTF-8 ohne BOM speichern kann, weil sonst PHP die BOM als HTML Inhalt ansieht und der Header auch dann nicht gesendet werden kann, wenn dieser ganz oben im Script steht.

2) Es gibt viele Möglichkeiten HTML innerhalb von PHP auszugeben, z.B. wie schon genannt die TAGs schliessen und wieder öffnen, oder der Befehl echo.
Das wird heftig unübersichtlich, wenn man in HTML die Werte von PHP Variablen, wie z.B. Username ausgeben will, weil man dann in etwa sowas macht:

Code:
<?php
$username = "DeinName";
?>

<p>Du bist mit dem Usernamen 

<?php
echo $username;
?>

 eingeloggt.</p>

Viel einfacher geht das mit dem Befehl print <<<END

Code:
<?php

$username = "DeinName";

print <<<END
<p>Du bist mit dem Usernamen $username eingeloggt.</p>
END;

?>
 
Zuletzt bearbeitet:
Ich habe schon einige Probleme geloest. session_start(); wurde an den Anfang des Dokumentes verfrachtet.


Dennoch habe ich noch einige Probleme mit der Ausgabe des HTML.

Es ist eine Mischung von HTML CSS und Javascript. Einzelnen Text auszugeben ist kein Problem, aber ich bekomme es mit den Form(s) einfach nicht hin.

Wenn keine Session aktiv ist moechte ich die Moeglichkeit zum einloggen bieten, wenn der User eingeloggt ist moechte ich ihnen einen alternative Code anbieten. D.h. kompletter folgender Code ist Teil eines If Statements, weshalb das schliessen der php Tags sicher keine Alternative ist.


HTML:
        <form method="post" action=".\de\Fixed\login.php">

        <p><input type="text"     name="username" value="Username" onclick="if (this.defaultValue==this.value) this.value=''" onblur="if (this.value=='') this.value=this.defaultValue"></p>

        <p><input type="password" name="password" value="*****"    onclick="if (this.defaultValue==this.value) this.value=''" onblur="if (this.value=='') this.value=this.defaultValue"></p>

        <div style="margin-top:-15px;"><a href="#"><span style="color:#666;font-size:10px;">Passwort vergessen?</span></a></div> 
        <br/>
        <input type="submit" value="Einloggen"></p>

	</form>


Der CSS part wird noch ausgelagert.

Auch wenn ich euch heute meiner Meinung nach schon genug mit Fragen bombadiert habe muss ich leider noch ein kleines Problem an euch herantragen.


Ich ueberpruefe mit der if Abfrage

PHP:
if($_SESSION['username'])

ob der User eine aktive Session besitzt, dies funktioniert auch wunderschoen solange der User eingeloggt ist, aber wenn ich diese If Abfrage beim ersten Start der Index.php aufrufe ist 'username' ja noch nicht gesetzt weshalb ich folgenden Fehler bekomme
Notice: Undefined index: username in C:\xampp\htdocs\Index.php on line 65
Um diesen Fehler auszubauen muss ich sicher die ganze Logik des Codes veraendern, ich habe auch schon ueberlegt ob ich nicht Anfangs ueberpruefen soll ob 'username' != "" ist, aber ich bin mir nicht sicher ob das nicht das ganze Konzept der Session ueber den Haufen wirft. (Das ist im Punkto Sicherheit sicher kein gutes workaround)
 
Zurück