Geschützter Bereich klappt nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anmeldung
ausgabe
code
datei
dokument
einloggen
eintragen
fehler
feld
header
http
index
inhalt
kontakt
login
page
privat code
url
weiterleitung
zeile
-
Hallo
Weiß einer wo der fehler liegt hier der code:
<?php session_start(); ?> <?php if(!isset($_SESSION["username"])) { header('Location: index.php?page=nichteingeloggt'); exit; } ?> <!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>Unbenanntes Dokument</title> <link rel="stylesheet" type="text/css" href="../CSS/1.css" /> </head> <body> <div id="privat"> <i> <h2>Privat...</h2> </i> </div> </body> </html>
Es kommt immer Warning: "Cannot modify header information - headers already sent..."
Vielen Dank
Philip -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Jegliche Ausgaben, selbst ein Leerzeichen, sind vor session_start oder der Weiterleitung zu vermeiden.
Versuchs mal, indem du meinen Code kopierst und einfügst.
<?php session_start(); if(!isset($_SESSION["username"])) { header('Location: index.php?page=nichteingeloggt'); exit; } ?> <!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>Unbenanntes Dokument</title> <link rel="stylesheet" type="text/css" href="../CSS/1.css" /> </head> <body> <div id="privat"> <i> <h2>Privat...</h2> </i> </div> </body> </html>
-
Leider klappt es auch nicht
Keiner mehr eine idee?
Beitrag zuletzt geändert: 17.2.2010 12:26:53 von philip-felder -
also: dieser fehler tritt immer dann auf, wenn man etwas vor der session_start(); hat. Hast du davor irgendwas geschrieben?
(und das exit kannst du denke ich weglassen! -
Nein das ist der reine code
<?php session_start(); if(!isset($_SESSION["username"])) { header('Location: index.php?page=nichteingeloggt'); exit; } ?> <!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>Unbenanntes Dokument</title> <link rel="stylesheet" type="text/css" href="../CSS/1.css" /> </head> <body> <div id="privat"> <i> <h2>Privat...</h2> </i> </div> </body> </html>
-
Also wenn ich deinen Code nehme und auf meinen Webspace lege als PHP-Datei, dann funktioniert das wunderbar. Kann es sein, dass dieser Code in irgendetwas eingebettet wird, per Include oder in ein Frame?
Hier wirst du auf meine Index weitergeleitet, folglich funktioniert der Code:
http://karpfen.lima-city.de/abc.php -
J also wenn man nicht eingeloggt ist so man auf die Seite nichteingeloggt kommen die ist als if in der index (also
elseif($page == "nichteingeloggt") { include "Einloggen.php"; }
Einloggen.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>Unbenanntes Dokument</title> </head> <link type="text/css" rel="stylesheet" href="CSS/2.css" /> <body> <div id="einloggen"> <h1>Nicht Eingeloggt!</h1> <p>Um diesen Inhalt sehen zu können, müssen sie eingeloggt sein!</p> <p>Bitte Loggen sie sich ein!</p> </div> </body> </html>
-
Kann es sein das du die Bedingung erfüllst?
Probier einfach mal:
<?php header('Location: index.php?page=nichteingeloggt'); ?>
-
Das klappt auch nicht :
Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/philip-felder/html/index.php:10) in /home/webpages/lima-city/philip-felder/html/Seiten/Privat.php on line 2
Beitrag zuletzt geändert: 17.2.2010 13:08:02 von philip-felder -
Ich denke mal, der Fehler liegt darin, dass du je nach Navigationspunkt irgendwas in der index.php änderst. So sieht das nämlich auf deinem Webspace aus. Nun scheint aber die index.php irgendwas vorher auszugeben.
Vielleicht kannst du mal den Code der index.php hier posten und die Stelle markieren, wo per Variablenübergabe entschieden wird, dass der Privatbereich aufgerufen werden soll. -
<?php session_start(); ?> <html> <head> <title>Philips Homepage</title> <link rel="stylesheet" type="text/css" href="css.css"> </head> <body background="Hintergrund.jpg"> <?php $page == $_GET['page']; ?> <div id="logo" style="position:absolute;Left:px;Top:px"> <img src="logo.gif" width="60%"> </div> <div id="Menü" style="position:absolute;Left:px;Top:200px"> <?php include "Menue.html"; ?> </div> <div style="border:solid 0px #00F; position:absolute;Top:420px"> <?php include "check.php"; include "login.html"; ?> <div style="margin:30px"> <font color="#FFFFFF"> Oder hier <a href="index.php?page=Anmeldung">Anmelden!</a> </font> </div> </div> <div id="content" style="position:absolute;Left:300px;Top:180px"> <?php if(!isset($page)){ $page = "Home"; } if($page == "Mira") { include "Seiten/Mira.php"; } elseif($page == "Amos") { include "Seiten/Amos.php"; } elseif($page == "Sina") { include "Seiten/Sina.php"; } elseif($page == "Home") { include "Seiten/Home.php"; } elseif($page == "Kontakt") { include "Seiten/Kontakt.php"; } elseif($page == "Login") { echo "<font color='#FFFFFF' size='+2'><br> <br> Erfolgreich Eingeloggt! </font> "; } elseif($page == "Pass") { echo "<font color='#FFFFFF' size='+2'><br> <br> Falsche Benutzerdaten! </font>"; } elseif($page == "Ausgeloggt") { echo "<font color='#FFFFFF' size='+2'><br> <br> Ausgeloggt! </font>"; } elseif($page == "Anmeldung") { include "eintragen.html"; } elseif($page == "Privat") { include "Seiten/Privat.php"; } elseif($page == "nichteingeloggt") { include "Einloggen.php"; } ?> </div> </body> </html>
-
Und genau da liegt das Problem. Alle Ausgaben beginnen von <html> in Zeile 4 bis hin zu folgendem Codeteil, welcher entscheidet, welcher Inhalt dargestellt wird:
} elseif($page == "Anmeldung") { include "eintragen.html"; } elseif($page == "Privat") { include "Seiten/Privat.php"; } elseif($page == "nichteingeloggt") { include "Einloggen.php"; }
stellt eine Ausgabe vor der Weiterleitung dar und ist nicht zulässig. Die Weiterleitung muss vor diesen Ausgaben stehen. Also faktisch in der index.php direkt nach session_start();
Im Übrigen brauchst du in der Einloggen.php und Co die Session nicht mehr starten, das übernimmt ja deine index.php schon!
Beitrag zuletzt geändert: 17.2.2010 13:18:52 von karpfen -
Das klappt aber:
http://www.philip-felder.lima-city.de/index.php?page=nichteingeloggt
Hier noch mal die index.php:
<?php session_start(); if(!isset($page)){ $page = "Home"; } if($page == "Mira") { include "Seiten/Mira.php"; } elseif($page == "Amos") { include "Seiten/Amos.php"; } elseif($page == "Sina") { include "Seiten/Sina.php"; } elseif($page == "Home") { include "Seiten/Home.php"; } elseif($page == "Kontakt") { include "Seiten/Kontakt.php"; } elseif($page == "Login") { echo "<font color='#FFFFFF' size='+2'><br> <br> Erfolgreich Eingeloggt! </font> "; } elseif($page == "Pass") { echo "<font color='#FFFFFF' size='+2'><br> <br> Falsche Benutzerdaten! </font>"; } elseif($page == "Ausgeloggt") { echo "<font color='#FFFFFF' size='+2'><br> <br> Ausgeloggt! </font>"; } elseif($page == "Anmeldung") { include "eintragen.html"; } elseif($page == "Privat") { include "Seiten/Privat.php"; } elseif($page == "nichteingeloggt") { include "Einloggen.php"; } ?> <html> <head> <title>Philips Homepage</title>.........
Beitrag zuletzt geändert: 17.2.2010 13:23:34 von philip-felder -
In der Einloggen.php verwendest du ja auch keine Weiterleitung. Deshalb geht das dort auch!
-
Verstehe ich jetzt i-wie nicht
-
Es gibt bei deinem Code 2 Zeilen, die immer vor jeglicher Ausgabe stehen müssen, selbst Leerzeichen wären eine Ausgabe.
Zeile 1:
session_start();
Zeile 2:
header('Location: index.php?page=nichteingeloggt');
Steht vor diesen beiden Zeilen schon irgendeine Ausgabe, sei es ein Leerzeichen, html-Code, etc... dann kommt die bei dir vorkommende Fehlermeldung.
Du hast eine index.php, in der du je nach Seite per Variable eine andere PHP-Datei includierst (also anzeigen lässt). Vor der Entscheidung, welcher Inhalt angezeigt wird, liegt aber schon diverser html-Code, was den von mir oben genannten Regeln widerspricht. Die Einloggen-Datei enthält keine dieser oben genannten Code-Zeilen, deshalb funktioniert sie. Die Privat-Datei enthält diese Code-Zeilen aber, deshalb funktioniert sie nicht.
Du musst also die Überprüfung, welche Datei (bzw. welcher Inhalt) includiert wird gleich ganz am Anfang machen. Dann sollte es funktionieren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage