# ob_start() und header() ?



## Funjoy (11. November 2004)

Hallo,

Ich habe derzeit folgendes Problem ich mache gerade ne Login Datei und ich will falls der user schon eigeloggt ist den zur Index weiterleiten ich habe das so gemacht


```
<?php

#--> Location Wechseln
ob_start();
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/index.php$Session2");
$OUT = ob_get_contents();
ob_clean();

if($LOG == TRUE)
  {
	$OUT;
	die(); 
}
?>
```

so klappt es schonmal nicht   
Der leitet mich immer weiter obwohl $LOG auf FALSE ist!

Was mach ich Falsch?

MfG Funjoy


----------



## redlama (11. November 2004)

Gib ihm doch mal ein else dazu.
Ich hatte mal so ein ähnliches Problem, welches ich durch ein else gelöst habe.
Also z.B.:
	
	
	



```
if($LOG == TRUE) 
  { 
    $OUT; 
    die(); 
}
else
{
}
```

redlama


----------



## Ben Ben (11. November 2004)

Das else ist ja leer das bringt dann aj nichts da es eh optional ist.

Nur wo stellst du den Fest ober er eingeloggt ist?
Wenn $LOG = TRUE?

Sonst hätte ich es einfach so gelöst:

```
if( $LOG )
    header(...);
else
    //whatever
```


----------



## Funjoy (11. November 2004)

$LOG wird über eine Includierte globale Datei definiert ob FALSE oder TRUE. Das Problem ist das ich die Header funktion mehrmals benutzen möchte deswegen auch ob_start() 

Ps: Und $LOG ist zu 100% FALSE da diese Globale datei Leer ist   

MfG Funjoy


----------



## Ben Ben (11. November 2004)

Mehrmals? Hintereinander oder wie?
Dann würde mehr code helfen das ganze zu überblicken


----------



## Funjoy (11. November 2004)

Mit Mehrmals hintereinander meine ich ganz genau 2mal 

Einmal zum Überprüfen ob der User eingeloggt ist und das andere mal wenn sich der user erfolgreich eingeloggt hat soll er zur Index weitergeleitet werden.

MfG Funjoy


----------



## Ben Ben (11. November 2004)

Versteh ich nicht. Wozu willst du denn weiterleiten um zu überprüfen ob der User eingeloggt ist? Weil dann leitest du ja auf eine andere Seite weiter usw...


----------



## Funjoy (11. November 2004)

Hmm Wie soll ich dir das jetzt erklären also nochma  ;-) 

die Datei heist access.php über diese Datei kann man sich einloggen! Wenn jedoch ein User schon eigeloggt ist macht es ja kein Sinn das Login Formular anzuzeigen richtig? deswegen wird er dann auch zur Index.php weitergeleitet! Dafür brauch ich zum ersten mal die Header funktion!

beim zweiten mal ist die Header funktion für die Leute die nicht eingeloggt sind die bekommen dann logischerweise das Login Formular zu sehen die Geben darinn dann halt ihr benutzernamen und Ihr Passwort ein! wenn alles richtig ist wird ebenfalls zur Index seite weitergeleitet.

Hoffe das war verständlicher   

MfG Funjoy


----------



## Ben Ben (11. November 2004)

Ja eben...

also sie kommen zu access.php und von dort entweder zum formular oder weiter
also so


    -> Formular    
    |                  
    |                 
-> Access.php 
    |
    |
    wonanders


Also muss im acces.php schematisch doch nur passieren:


```
if( $eingeloggt )
    header('Location: woandershin.php');
else
    header('Location: zumformuklar.php');
exit;
```

ansonsten klinke ich mich an dieser stelle aus


----------



## Funjoy (11. November 2004)

Die access.php Datei ist das Formular deswegen   

Die 2te Weiterleitung erfolgt nur wenn sich ein User erfolgreich eingeloggt hat deswegen auch ob_start(); weill ich ja wegen das Formular zwischdurch mal echo benutze bevor die 2te Weiterleitung stafindet   

MfG Funjoy


----------



## Funjoy (12. November 2004)

So habe es nun ohne ob_start() gemacht nachdem mir eingefallen ist das eh nix vorher wie echo oder print kommt   

Habe auch was Falsch verstanden mit ob_start() 

so schauts dann insgesammt aus wenns Interessiert!
access.php

```
<?php
#--> SESSID definieren und starten.
session_name("SESSID");
session_start();

#--> Klassen Dateien Laden.
include("../class/TPLManager.php");
include("../class/MySQL.php");

#--> Konfigurationsdatei Laden.
include("config.php");

#--> Funktionsdatei Laden.
include("function.php");

#--> Globale Datei Laden.
include("global.php");

#--> Überprüfen ob User schon eigeloggt ist.
if($LOG == TRUE)
  {
	header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/index.php$Session2");
	die(); 
}

#--> Userdaten Überprüfen auf Rechte und Richtigkeit.
if(isset($_POST['login']) && !empty($_POST['adminname']) && !empty($_POST['adminpassword']))
  {
	$admin = $DB->dbActionQuery("SELECT userid,username,password,permission FROM ".$Config_MySQLPrefix."members WHERE username='".strtolower($_POST['adminname'])."' AND password='".MD5(strtolower($_POST['adminpassword']))."'");
	if(!empty($admin)) $Permission = $DB->dbActionQuery("SELECT pid,view_acp FROM ".$Config_MySQLPrefix."permission WHERE pid=$admin[permission]");  
}

#--> Textfelder auf Inhalt und Gültigkeit überprüfen.
if(isset($_POST['adminname']) && empty($_POST['adminname']))
  {
	$ErrorMessage = "Du hast kein Benutzernamen eingegeben.";
	$MatchError = TRUE;  
}
elseif(isset($_POST['adminpassword']) && empty($_POST['adminpassword']))
  {
	$ErrorMessage = "Du hast kein Password eingegeben.";  
	$MatchError = TRUE;
}
elseif(isset($_POST['login']) && empty($admin))
  {
	$ErrorMessage = "Dein Benutzername oder dein Passwort ist nicht G&uuml;ltig.";
	$MatchError = TRUE;  
}
elseif(isset($_POST['login']) && $Permission['view_acp'] != TRUE)
  {
	$ErrorMessage = "Du hast nicht die erfoderlichen Rechte um diesen Bereich betreten zu k&ouml;nnen."; 
	$MatchError = TRUE;  
}

if(!isset($_POST['login']) || $MatchError == TRUE)
  {
	/////// Anmelde Formular ausgeben ///////
	$TPL = new TPL_Manager();
	$TPL->TemplatesPath = "templates/";
	$TplFile['_ACCESS_'] = "access.htm";
	$TPL->DefineTPL($TplFile);
	  $TPL->keyword('POST_ADMINNAME',$_POST['adminname']);
	  $TPL->keyword('MATCH_ERROR',"<br>$ErrorMessage<br>");
	$TPL->ParseTPL("_ACCESS_");
	$TPL->OutPut();
}

#--> Wenn alle Daten Ok sind Session Id mit allen Informationen in der DB speichern.
if(isset($_POST['login']) && $MatchError != TRUE)
  {
	$DB->dbActionQuery("INSERT INTO ".$Config_MySQLPrefix."adminsession (sessionid,userid,ipadress,useragent,starttime,lastactivity) VALUES ('".session_id()."','$admin[userid]','$_SERVER[REMOTE_ADDR]','$_SERVER[HTTP_USER_AGENT]','".time()."','".time()."')");
	header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/index.php$session2");
	die();
}
?>
```

@Ben Ben vielleicht verstehst du ja jetzt was ich meine   

MfG Funjoy


----------



## Ben Ben (12. November 2004)

Jo, ist mir so klar und so hatte ich es auch gemeint, die beiden header() stören sich ja nciht, da ja kein Output erfolgt...


----------



## Lukasz (12. November 2004)

Hallo

ich löse dir dein Script nicht aber was dir helfen Sollte
OB_START() hebt sich alle ausgaben auf, so lange bis
OB_END_FLUSH() kommt! oder der Script abgearbeitet ist.
Dabei werden alle Ausgaben in ein Buffer geladen. Möchtest du also ein Cookie setzten unerwtrtet in einem Script so bringt dir dies den Vorteil den Cookie zu setzten und wegzuheadern, ohne dass ein echo stören kann. Vergiss aber nie falls du dein echo ausgeben möchtest OB_END _FLUSH anzugeben, denn sonst kannst du schnell an Probleme stossen. Unter Windows kannst du dir die Funktion fast sparen aber Linux sieht das nicht gerne, sobald OB_END_FLUSH() nicht gestzt wird!

Bedenke setzt du OB_END_FLUSH nicht und hederst einen Download so wir der nie übertragen, obwohl er gestartet wird!

Mein Tipp:

Anfang als aller erstes OB_START() setzten

Das letzte im Script ist dann OB_END_FLUSH()

... dazwischen Cookie Header oder EXIT;

```
if($LOG == TRUE) 
  { 
    $OUT; 
    EXIT;
}  else { echo "bal";}

OB_END_FLUSH();
```


BZW

```
if($LOG == TRUE) 
  { 
    $OUT; 
    EXIT; 
}  else { header(); Exit;} 

OB_END_FLUSH();
```

Wobei das OB_END_FLUSH irgendwann am ende auftauchen kann!


----------

