Probleme mit Header bei Login System

funnyzocker

Erfahrenes Mitglied
Hallo.
Ich fange nach Langer Zeit ohne Programmieren mal wieder an,
So mein Problem.
Ich habe 1 Seite mit dem ganzen Design der Webseite und dort wird der rest der php sachen includiert.
PHP:
<?
session_start();
include('links.php');

 echo"
<link rel=stylesheet href=images/Refresh.css type=text/css />
<div id=wrap>
  		<div id=header>
            <h1 id=logo-text>Bilder-<span class=gray>Gigant</span></h1>
            <h2 id=slogan>Speicherplatz für Ihre Bilder</h2>
   		</div>
		<!-- menu -->
		<div  id=menu>
			<ul>
				<li id=current><a href=index.php?section=start>Startseite</a></li>
				<li><a href=index.php?section=info>Informationen</a></li>
    			<li><a href=index.php?section=kontakt>Kontakt</a></li>
				<li><a href=index.php?section=impressum>Impressum</a></li>
			</ul>
		</div>					
			   <div id=content-wrap>
				<div id=sidebar>
    			<h1>Sidebar Menu</h1>
				<div class=left-box>
					<ul class=sidemenu>
						<li><a href=indexphp?section=start>Startseite</a></li>
						<li><a href=index.php?section=register>Registrieren</a></li>
						<li><a href=index.php?section=login>Login</a></li>
						<li><a href=index.php?section=mediadaten>Mediadaten</a></li>
                    </ul>
				</div>
			    <h1>Weiteres Menu</h1>
				<div class=left-box>
					<ul class=sidemenu>
   					<li><a href=index.php>#</a></li>
						<li><a href=index.php>#</a></li>
						<li><a href=index.php>#</a></li>

  					</ul>	
				</div>
				
				<h1>Weiteres Menu</h1>
				<div class=left-box>
					<p>Infos </p>
					
     				</div>
				
				<h1>Weiteres Menu</h1>
				<div class=left-box>
					<p>Infos</p>
				</div></div>	";



if(isset($_GET['section']) AND isset($dateien[$_GET['section']]))
{
 if(!file_exists($dateien[$_GET['section']])) echo "Die Datei ist nicht vorhanden.";

 include $dateien[$_GET['section']];
}
else
{
  include $dateien['home'];
}
 echo"
		
		<!-- content-wrap ends here -->
		</div>
					
		<!--footer starts here-->
		<div id=footer>
   		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  			</a>
   		</p>
  		</div>
       <!-- wrap ends here -->
</div>

";
?>

Das Login system sieht folgend aus.
PHP:
<?php

    session_start();
ob_start();
    include("connect2db.inc.php");
    include("usermanagment.inc.php");

    if (isset($_POST['action']) && $_POST['action']=='login')
    {
        $un = (isset($_POST['un'])) ? $_POST['un'] : '';
        $pw = (isset($_POST['pw'])) ? $_POST['pw'] : '';
        CheckUserLogin ($un, $pw, session_id());
    }

    if (isset($_GET['action']) && $_GET['action']=='logout')
    {
        UserLogout (session_id());
    }
ob_end_flush();
?>

<br>
<form name="login" method="post" action="index.php?section=login">
  <input type="hidden" name="action" value="login">
  Bitte Username und Passwort eingeben
  <br>
  Username:&nbsp;</td><td><input class="flat" type="text" name="un"><br>
  Passwort:&nbsp;</td><td><input class="flat" type="password" name="pw"><br>
  <input type="submit" value="Login">
</form>

Und das usermanagment:
PHP:
function CheckUserLogin ($un, $pw, $session) {
    $result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserPasswd FROM user
                    WHERE UserName='$un' AND UserPasswd=MD5('$pw')") or mysql_error();
    $zeile = mysql_fetch_array($result);

    if ( $zeile["UserId"] == "" )
    {
      header ("Location: index.php?section=login");
    }
    else
    {
      $result = mysql_query("UPDATE user SET UserSession = '".$session."',UserLogin = NOW()
                    WHERE UserId = '".$zeile["UserId"]."'") or mysql_error();
      header ("Location: user/user.php");
    }
  }


/***
  * LOGOUT
  */

  function UserLogout ($session) {
    $result = mysql_query("UPDATE user SET UserSession = NULL
                    WHERE UserSession = '".$session."'") or mysql_error();
    header ("Location: index.php?section=loggedout");
  }


/***
  * Prüfen, ob die Session in Ordnung ist.
  */

  function CheckUserSession ($session) {
    $result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserLogin FROM user
                    WHERE UserSession = '".$session."'") or mysql_error();
    if ( mysql_num_rows($result) == 1 ) {
      $zeile = mysql_fetch_array($result);
      $sessarr[UserId]    = $zeile["UserId"];
      $sessarr[Name]      = $zeile["Name"];
      $sessarr[Vorname]   = $zeile["Vorname"];
      $sessarr[UserLogin] = $zeile["UserLogin"];
      return $sessarr;
    }
    else {
      header ("Location: index.php");
      return false;
    }
  }

So wenn ich mich einloggen möchte kommt immer die Aussage
Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/bilder-gigant.de/httpdocs/index.php:66) in /var/www/vhosts/bilder-gigant.de/httpdocs/usermanagment.inc.php on line 21

Wie kann ich verhindern das der Header gesendet wird.
Sitze da schon 2 Tage drann und komme nicht weiter.
 
Zuletzt bearbeitet:
Die Header werden mit der ersten Ausgabe an den Browser gesendet, danach ist es, wie Du gemerkt hast, nicht mehr moeglich diese zu aendern.
Du musst also entweder sicherstellen, dass vor Funktionen die mit dem Header arbeiten (z.B. header() oder setcookie()) keine Ausgabe stattfindet, oder aber erstmal alle Ausgaben cachen und am Ende die gesamte Seite in einem Rutsch ausliefern (ob_start() und ob_end_flush()).
Empfehlen wuerde ich dabei die erste Methode, denn wenn Du die zweite nutzt kannst Du den Output Buffer nicht mehr fuer andere Spielereien nutzen.
 
Hm. Also nehme ich mal an da das Usermanagment ja includiert wird wird ja automatisch vorher eine Ausgabe gemacht.
Ich habe nur keine Idee wie ich das ändern kann und soll
 
Setz einfach den Aufruf der ob_start()-Funktion an den Anfang des Skriptes, sodass die gesamte Ausgabe gepuffert wird.
 
Was steht denn diese Mal in der Fehlermeldung? Dort wird ja genau beschrieben, wo die Ausgabe im Skript begann.
 
Bis auf die zeilen angabe das selbe.

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/bilder-gigant.de/httpdocs/index.php:64) in /var/www/vhosts/bilder-gigant.de/httpdocs/usermanagment.inc.php on line 21

Muss dazu sagen das ich alle leerzeilen gelöscht habe um das script für mich übersichtlicher zu machen.
 
Dann schau doch mal in die in der Fehlermeldung erwähnten Zeilen, insbesondere in die in den Klammern stehende.
 
Wo hast du denn nun das ob_start() hingesetzt? Wirklich an den Anfang des gesamten Skriptes?
 
Zurück