Simsso: Passwort mit PHP

Hallo,
ich habe mal den Code hier geschrieben:
<?php
 $A = '<form method="post" action="Geschuetzter_Bereich.php" name="Passwort" class="Eingabe_0"><input type="password" name="XXX" /><input type="submit" value="Enter" /></form>';
 $B = 'Geschützter Bereich!';
 if ($_POST["XXX"] == "XXX") {
  setcookie("Cookie", "Positiv", time()+60*10); [Hier ist Line 44!]
 }
 if ($_COOKIE["Cookie"] != "Positiv") {
  echo $A;
 }
 if ($_COOKIE["Cookie"] == "Positiv") {
  echo $B;
 }
?>
Damit möchte ich einen Teil der Seite nur zeigen, wenn man das Passwort eingibt.
Wisst ihr wo der Fehler ist.
Ich bekomme die Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php:5) in /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php on line 34
Die Linie wurde oben markiert!
Gruß

  1. Hi,

    Wisst ihr wo der Fehler ist.
    Ich bekomme die Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php:5) in /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php on line 34

    steht doch klar und deutlich da: In Zeile 5 fand bereits eine Ausgabe statt, die HTTP-Header sind dadurch längst abgeschlossen und können nicht mehr verändert oder ergänzt werden.

    Die Linie wurde oben markiert!

    Du hast angeblich Zeile 44 markiert, die Fehlermeldung nennt aber Zeile 34.

    Ciao,
     Martin

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Moin!

    Ich bekomme die Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php:5) in /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php on line 34
    Die Linie wurde oben markiert!

    Hast du gegoogelt? Hast du da nix gefunden zu dieser Fehlermeldung?

    Abgesehen davon ist deine Vorgehensweise sehr fragwürdig, denn man sieht den geheimen Teil nicht nur, wenn man das Passwort eingibt, sondern schon dann, wenn man einfach das richtige Cookie "Cookie" mit dem Inhalt "positiv" mitsendet. Man kann also auch ohne Passwort an die Info rankommen.

    Benutze Sessions für dieses Problem! Sessions erzeugen ein Cookie mit zufälliger ID, die man nicht raten oder ausprobieren kann. Speichere dann in $_SESSION, ob das Passwort korrekt war, anstelle im Cookie.

    Und noch ein Problem wird dein Code haben: Wenn du setcookie() aufrufst, entsteht nicht direkt ein gleichnamiger Eintrag in $_COOKIE, sondern erst beim nächsten Request. Nur falls du dich wunderst, dass der geheime Text noch nicht sofort nach Passworteingabe erscheint.

    - Sven Rautenberg

    1. Hallo,
      kannst du mir den code mit sessions schicken
      weil wie das geht weiß ich nicht.
      Gruß

      1. Moin!

        Hallo,
        kannst du mir den code mit sessions schicken
        weil wie das geht weiß ich nicht.

        Der Artikel wäre eigentlich hier: http://aktuell.de.selfhtml.org/artikel/php/loginsystem/

        Weil aber der Server gerade down ist, nimm den Google-Cache: http://webcache.googleusercontent.com/search?q=cache:5nUSnQTBgTwJ:aktuell.de.selfhtml.org/artikel/php/loginsystem/+selfhtml.org+php+session&cd=1&hl=de&ct=clnk&gl=de&client=opera&source=www.google.de

        - Sven Rautenberg

  3. hi,

    setcookie("Cookie", "Positiv", time()+60*10); [Hier ist Line 44!]

    Warning: Cannot modify header information - headers already sent by (output started at /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php:5) in /hp/bw/ab/mc/www/Ablage/Geschuetzter_Bereich.php on line 34

    Jow. Ab Zeile 34 (lt. Fehlermeldung) beginnt die Ausgabe, d.h. PHP generiert dazu einen HTTP-Header. Du möchtest nun in Zeile 44 selbst einen Header senden (Cookie) und kriegst die Meldung, weil PHP schon einen Header gesendet hat.

    Damit möchte ich einen Teil der Seite nur zeigen, wenn man das Passwort eingibt.

    Dein Script macht was es soll: Es zeigt die Seite schon, bevor Du das möchtest. Wenn Du das nicht möchtest, dann muss Deine PHP-Datei links oben mit
    <?php
      // beginnen
      // und ganz unten mit
    ?>

    enden. Vor und nach diesen Token darf nichts stehen (kein Leerzeichen, kein Zeilenumbruch, keine BOM). Und dazwischen keine Spaghetties.

    Hotti

    --
    BOM? Das war doch der, der den Editor++ erfunden hat, oder?