deedee0815
Goto Top

Kleines Problem mit header LOCATION

Ich möchte auf meiner Seite dafür sorgen, dass wenn man die index.php aufruft automatisch zur index.php?section=startpage weitergeleitet wird. Hier gibt es ein kleines Problem, da der HEADEr schon gesendet wurde...

Hallo,

Ich habe auf meiner Homepage in der index.php folgende Schleifen:

      if(isset($_GET['section'])) {  
      
         switch($_GET['section']) {  
      
            case "startpage":  
               include "sections/startpage.php";  
               break;
               
            case "article":  
               include "sections/article.php";  
               break;
               
            case "feature":  
               include "sections/feature.php";  
               break;
               
            case "download":  
               include "sections/download.php";  
               break;
               
            case "board":  
               include "sections/board.php";  
               break;
               
            case "link":  
               include "sections/link.php";  
               break;
               
            case "feedback":  
               include "sections/feedback.php";  
               break;
               
            case "impress":  
               include "sections/impress.php";  
               break;
               
            case "disclaimer":  
               include "sections/disclaimer.php";  
               break;
         
            default:
               include "sections/error.php";  
               break;
         }
         
      } else {
      
         include "sections/startpage.php";  
         
      }

ELSE-Teil unten soll den folgenden Befehl enthalten:

header("LOCATION: index.php?section=startpage");  

Was ich bisher gemacht habe, ruf zwar dieselbe Seite auf, ich finde es aber doof wenn in der Adresszeile dann nur 'index.php' steht, und nicht 'index.php?section=startpage".

Was das problem ist, wei� ich schon: Oben in der Datei werden schon einige "ECHOS" gemacht, so ist die Header-Info nicht mehr änderbar, bzw. schon gesendet, bevor PHP "wei�", das diese eingentlich modifiziert werden soll.

Wie kann ich dieses Problemchen beheben?

GruÃ?
DeeDee0815

Content-Key: 24044

Url: https://administrator.de/contentid/24044

Printed on: April 26, 2024 at 05:04 o'clock

Member: DeeDee0815
DeeDee0815 Jan 19, 2006 at 18:26:13 (UTC)
Goto Top
Also ich denke nicht, dass es meine aufgabe ist Umlaute selber in 'ä' etc. umzuwandeln. Ich denke hier sollten mal die Programmierer dieser Seite etwas entspechendes einbauen. Ich denke es handelt sich um einen temporären Fehler, das war voher auch nicht so.

Gruß
DeeDee0815
Member: filippg
filippg Jan 19, 2006 at 18:48:15 (UTC)
Goto Top
Hallo,

du kannst PHP anweisen, die erzeugten Daten nicht gleich zu senden, sondern erst am Ende des Skripts oder bei einem entsprechenden Befehl. Ergebnis: die Header werden noch nicht gesendet und du kannst sie noch modifizieren. Wie der Befehl heisst weiss ich aus dem Stehgreif auch nicht, aber du wirst ihn in der PHP-Doku sicherlich finden.
Aber ich würde mich gegen die Weiterleitung entscheiden, das braucht ja nur nochmal zusäztliche Zeit.

Filipp
Member: badrulecracker
badrulecracker Jan 19, 2006 at 18:49:41 (UTC)
Goto Top
Hi,

also da gibt es den Weg über das Apache Addon mod rewrite.
Infos: www.modrewrite.de

dein .htaccess file müsste glaube ich etwa so aussehen:

RewriteEngine on
RewriteRule index.php$ index.php?section=startpage


Kleiner Tip für den Programmierstiel:
Mach es doch so, nicht über eine normale switch anweisung, sondern mach ein array mit den dateien als inhalt:

$section = array();
$section['startpage'] = 'sections/startpage.php';
$section['article'] = 'sections/article.php';
$section['feature'] = 'sections/feature.php';

und dann wo du momentan die switch anweisung hast machst du etwa folgendes:

if(isset($_GET['section']) AND isset($section[$_GET['section']]))
{
include $section[$_GET['section']];
}
else
{
include $section['startpage'];
}

Somit brauchst du nur noch für jede weitere Section die du machst einen Eintrag im Array erstellen und nicht mehr im code herumändern...

Ach, übrigens: das ist keine schleife, sondern eine Switch anweisung ;)

mfg, brc
Member: Dani
Dani Jan 19, 2006 at 20:06:24 (UTC)
Goto Top
Warum so kompliziert??

du könntest dies doch so machen:

if(isset($_GET['section']))
{
$modul=$_GET['section'];

include ("sections/".$modul.".php");
}
else
{
include ('sections/startpage.php');
}

So würde ich das machen!!!
Member: DeeDee0815
DeeDee0815 Jan 20, 2006 at 16:18:41 (UTC)
Goto Top
Danke für den Tipp. Aber das löst leider das Problem nicht.
Member: Dani
Dani Jan 20, 2006 at 16:22:40 (UTC)
Goto Top
Wo sendest du den Header noch??
Member: filippg
filippg Jan 20, 2006 at 16:25:52 (UTC)
Goto Top
Kopie aus der offiziellen PHP-Hilfe (nur die eckigen Klammern sind in wirklichkeit spitz):

Beachten Sie, dass header() aufgerufen werden muss, bevor eine Ausgabe gesendet wurde, egal ob normale HTML Tags, leere Zeilen in einer Datei oder von PHP. Ein weit verbreiteter Fehler ist mittels include(), require(), oder anderen Dateizugriffsmethoden Code zu lesen, und so unbewusst Leerzeichen oder Leerzeilen auszugeben, bevor header() aufgerufen wird. Das gleiche Problem besteht auch bei Verwendung einer einzigen PHP/HTML Datei.


[html]
[?php]
Dies funktioniert nicht. Beachten Sie die
obige Ausgabe noch vor dem header()-Aufruf
header('Location: http://www.example.com/');
?]


Anmerkung: In PHP 4 können Sie dieses Problem umgehen, indem Sie Output Buffering benutzen (mit dem Overhead, dass alle Ihre Ausgaben an den Browser gepuffert werden, bis Sie diese Senden). Um dies zu tun, verwenden Sie in Ihrem Skript ob_start() und ob_end_flush(), oder setzten die Konfigurationsdirektive output_buffering in der php.ini bzw. in den Server Konfigurationsdateien.

Hast du ob_start() mal ausprobiert?

Filipp
Member: DeeDee0815
DeeDee0815 Jan 20, 2006 at 16:30:30 (UTC)
Goto Top
Danke für die Hilfe. Ob die Weiterleitung nun Zeit kostet oder nicht. Sowas mache ich ja nicht ständig. Und außerdem würde es kaum auffallen. Meine domain verweist ohnehin auf den Parameter. So kostet die Weiterleitung nur die Zeit, die der "Domanserver" benötigt.

EDIT: Ich habe meine Meinung geändert. Vielleicht ist es doch besser keine Weiterleitung zu machen. Denn wer achtet schon auf die Adressleiste.... face-wink

Gruß
DeeDee0815
Member: Dani
Dani Jan 20, 2006 at 16:33:39 (UTC)
Goto Top
Geht das bei PHP 5 auch??
Member: filippg
filippg Jan 20, 2006 at 16:37:58 (UTC)
Goto Top
Geht das bei PHP 5 auch??
Keine Ahnung, ich habe hier gerade nur die 4er Doku. Und in die Onlinedoku schauen kannst nun wirklich auch selber.

Filipp
Member: DeeDee0815
DeeDee0815 Jan 23, 2006 at 18:17:22 (UTC)
Goto Top
Ja es geht! Vielen Dank für eure Hilfe.

Gruß
DeeDee0815