Login-Script (header("location") Fehler

D-LuX

Erfahrenes Mitglied
Hallo,

ich bin momentan dabei ein Login-Script zu verfassen.
Leider bekomme ich folgende Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at xxx.php:28) in xxx.php on line 53

PHP:
        <div id='content'>"; 
 
        $host = "domain";
        $benutzer = "benutzer";
        $password = "passwort";

        $db = mysql_connect($host,$benutzer,$password);
        mysql_select_db("datenbank");  
   

        $user_nick     = $_POST['user_name'];
        $user_passwort = $_POST['user_passwort'];


        $sql="SELECT * FROM users WHERE user_nick = '$user_nick' and user_passwort = '$user_passwort'";
        $result=mysql_query($sql);
        

        $count=mysql_num_rows($result);
        

        if($count==1)
         {
         session_register("user_nick");
         session_register("user_passwort");
         header("location:login_success.php");
         }
          else 
          {
          echo "Userdaten falsch!";
          }
        
         
          echo"   
          
		    </div>

Habe jetzt gelesen, dass vor dem header nix ausgegeben werden darf, lässt sich bei mir leider nicht vermeiden ..jemand ne Idee?
 
Ah, interessant ;)

Näheres kannste mir nicht dazu sagen?

Muss ich dann den Ausgabepuffer mit $variable = ob_get_clean(); leeren?
vor dem header?
 
Es reicht am Anfang des Skriptes mit ob_start() die Ausgabepufferung einzuschalten. Den Rest übernimmt PHP selbstständig.
 
Du musst am Anfang, also am besten in der ersten Zeile deines Scripts ob_start() verwenden, dann kannst du an jeder beliebigen Stelle den gepufferten Content mit ob_get_content() holen und mit ob_end_clean() den Puffer leeren oder beides in einem Rutsch, wie du schon geschrieben hast, mit ob_get_clean().
 
Nabend alle hinzugestoßenen ;)

ob_start() hab ich an den Anfang geschrieben.

Jetzt funktioniert es :)

Dankeschön!

Naja Login funktioniert mit Daten aus der DB ..

Aber mit den Sessions wohl noch nicht, wenn ich die Seiten wechsel ..
 
Zuletzt bearbeitet:
Bevor irgendeine Ausgabe vonstatten gehen kann, setzt du
PHP:
@ob_start();
ein. Die Funktion - sofern du sie denn verwenden möchtest - steht ganz gut am Anfang des Scripts.

Zum Ende des (Controller-)Scripts kannst du dann noch
PHP:
// Output Buffer ohne Ausgabe leeren
if (@ob_get_level() > 0) {
    @ob_end_clean();
}
// oder Output Buffer ausgeben, leeren und deaktivieren
if (@ob_get_level() > 0) {
    @ob_end_flsuh();
}
anwenden, oder eine andere OutputBuffering Funktion - Einen Link zum PHP-Manual hat dir Gumbo bereits geliefert. Ich empfehle dir, das einfach mal zu lesen ;)

Vorbeugen kannst du solchen Fummeleien durch Anwendung des EVA-Prinzips: Eingabe -> Verarbeitung -> Ausgabe.
Das heißt, dass zuerst alle Steuereingaben abgefangen werden, diese dann verarbeitet werden und anschließend erst die Ausgabe erfolgt. Das ist übrigens auch der Sinn der meisten Templateklassen & -systeme (PHP ist eine Templatesprache, also muss es nicht unbedingt Smarty sein). Falls dich das Thema interessiert, empfehle ich dir die Zend-Framework View Klasse (setzt PHP >= 5.0 voraus), die meiner Meinung nach in Sachen Templating sauber und effizient arbeitet.

Aber um nochmal kurz auf OB zurückzukommen: Header werden immer gesendet, egal ob OB aktiviert oder deaktiviert ist. Das nur der Vollständigkeit halber, und bevor du versuchst, vor dem Senden eines Headers den Ausgabebuffer zu leeren ;)

Noch eine kleine Anmerkung: Im EVA-Prinzip hat die OB-Steuerung einen sinnvollen Einsatz beim Caching der Ausgabe (ob_start(); ... $cache = ob_get_contents(); ...) :)

Edit: Ich merke, ich werde alt und langsam :/
 
Kein Problem, trotzdem Danke :)

Hat jemand Lust mir das morgen nochmal über ICQ zu helfen?
Thema werden dann Sessions sein, damit man wenn man eingeloggt ist, auch eingeloggt bleibt beim Seitenwechsel ..
 
Naja, einfach session_start() an den Anfang des Scripts. Damit werden die Sessions schon mal initialisiert. Mit $_SESSION hast du ein globales Array in dem du Daten ablegen kannst, die "seitenübergreifend" verfügbar sind. Der Rest was Sessions angeht, lernst du während der Benutzung oder einfach, in dem du das Manual liest: http://de.php.net/manual/de/features.sessions.php
 
Zurück