Hermann-Udo Schmidt: Weiterleiten funktioniert nicht

Guten Tag,

Header("Location: http://www.beispiel.de") klappt bei mir nicht.
Ich weiß auch den Grund, weil ich index.php includet habe, also dass ich nicht immer wieder Index kopierne muss, sondern einfach Dateien erstellen kann und mein textreinschreiben kann, die dann im content angezeigt werden.

Zurück zur Header Funktion...
Die muss ja immeroben im header stehen, aber wenn ichjetzt in einer anderen Datei diesen Befehl schreibe kommt folgender Fehler:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/customers/webs/wsexperte/webpages/kingspace/index.php:20) in /var/www/customers/webs/wsexperte/webpages/kingspace/kundenlogin.php on line 20

gibt es eine andere möglichkeit von einer Seite weiterzuleiten?

Script:

if($_GET[b]=="")
{
if(isset($_SESSION["beispiel"]))

{
Header("Location: http://www.kingspace.de/index.php?s=kundenlogin&b=2");
}
else {
echo "
Hallo ";
}
}

  1. Die muss ja immeroben im header stehen, aber wenn ichjetzt in einer anderen Datei diesen Befehl schreibe kommt folgender Fehler:

    Nein, es ist völlig egal wo die Funktion aufgerufen wird - das kann auch in der vorletzten Zeile deines Scripts sein.

    Warning: Cannot modify header information - headers already sent by (output started at /var/www/customers/webs/wsexperte/webpages/kingspace/index.php:20) in /var/www/customers/webs/wsexperte/webpages/kingspace/kundenlogin.php on line 20

    gibt es eine andere möglichkeit von einer Seite weiterzuleiten?

    Ja genug, aber das ist die vernünftigste Variante - wenn du nach der Fehlermeldung in der Suchmaschine deiner Wahl suchst, wirst du schnell herrausfinden warum das so ist und was man dagegen tun kann.

    Um deine Suche ggf. schneller zum Erfolg zu bringen, solltest du dich ggf. mit Output-Buffering beschäftigen.

    1. Die muss ja immeroben im header stehen, aber wenn ichjetzt in einer anderen Datei diesen Befehl schreibe kommt folgender Fehler:

      Nein, es ist völlig egal wo die Funktion aufgerufen wird - das kann auch in der vorletzten Zeile deines Scripts sein.

      Warning: Cannot modify header information - headers already sent by (output started at /var/www/customers/webs/wsexperte/webpages/kingspace/index.php:20) in /var/www/customers/webs/wsexperte/webpages/kingspace/kundenlogin.php on line 20

      gibt es eine andere möglichkeit von einer Seite weiterzuleiten?

      Ja genug, aber das ist die vernünftigste Variante - wenn du nach der Fehlermeldung in der Suchmaschine deiner Wahl suchst, wirst du schnell herrausfinden warum das so ist und was man dagegen tun kann.

      Um deine Suche ggf. schneller zum Erfolg zu bringen, solltest du dich ggf. mit Output-Buffering beschäftigen.

      Zitat:
      Es sollte bei der Verwendung der header() Funktion darauf geachtet werden das vor dem Aufruf dieser Funktion noch keine Daten vom Server zum Browser gesendet wurden.

      1. Es sollte bei der Verwendung der header() Funktion darauf geachtet werden das vor dem Aufruf dieser Funktion noch keine Daten vom Server zum Browser gesendet wurden.

        Ja - und das gilt es deinerseits zu vermeiden.

        1. Und das geht ja nicht, da ich den Header befehl ja von index.php?s=beispiel aufrufe. bzw. ich wüsst nicht wie ich das machen sollte, weil bei google steht immer nur das gleiche

          Auf Leerzeichen gucken, bevor html befehl im head ist machen

          1. Und das geht ja nicht, da ich den Header befehl ja von index.php?s=beispiel aufrufe.

            Den Zusammenhang verstehe ich nicht, da ich nicht riechen kann, wie deine Scripte aussehen.

            Aber darum gab ich dir auch den Hinweis mit dem Output-Buffering ;)

            1. Und das geht ja nicht, da ich den Header befehl ja von index.php?s=beispiel aufrufe.

              Den Zusammenhang verstehe ich nicht, da ich nicht riechen kann, wie deine Scripte aussehen.

              Aber darum gab ich dir auch den Hinweis mit dem Output-Buffering ;)

              Dieses ?s= in dem Link gibt doch schon den hinweis das ich den befehl nicht von index.php aufrufe :P

              Output buffering erklärt mir keine deutsche seite

              1. Hallo,

                Und das geht ja nicht, da ich den Header befehl ja von index.php?s=beispiel aufrufe.
                Dieses ?s= in dem Link gibt doch schon den hinweis das ich den befehl nicht von index.php aufrufe :P

                ja und? Das hat absolut nichts mit der Ausgabe zu tun.

                Ciao,
                 Martin

                --
                F: Was ist schlimmer: Alzheimer oder Parkinson?
                A: Parkinson. Lieber mal ein Bier vergessen zu zahlen, als eins verschütten.
              2. Dieses ?s= in dem Link gibt doch schon den hinweis das ich den befehl nicht von index.php aufrufe :P

                Nein, gibt es nicht - da kann stehen was will, es hat 0 Aussagekraft:

                index.php?foo=bar

                funzt:

                <?php  
                  header();  
                  exit;  
                  echo $_GET['foo'];  
                ?>
                

                funzt nicht:

                <?php  
                  echo $_GET['foo'];  
                  header();  
                  exit;  
                ?>  
                
                

                Output buffering erklärt mir keine deutsche seite

                In der Suchmaschine meiner Wahl nach "PHP Output-Buffering" gesucht finde ich _sofort_ als ersten Treffer folgende Seite in der offiziellen PHP-Dokumentation:
                PHP: Output-Control-Funktionen

                Für mich sieht das ziemlich deutschsprachig aus ;)

                In der Google-Büchersuche finde ich z.B. das hier:
                Professionelle PHP 5-programmierung: Output Buffering

              3. Hi,

                Dieses ?s= in dem Link gibt doch schon den hinweis das ich den befehl nicht von index.php aufrufe :P

                nein, es ist ein Hinweis darauf, dass ein URL-Parameter namens "s" existiert. Mehr nicht. Der Umstand, dass in der URL "index.php" steht, ist übrigens nicht mal ein Hinweis darauf, dass eine Datei namens "index.php" überhaupt existiert - oder dass Du mit PHP arbeitest. Und nichts, aber auch wirklich gar nichts von dem, was hier gesagt wurde, ändert etwas an der schlichten Tatsache, dass Du verdammt noch mal die Ausgabe vor dem header()-Befehl entfernen musst.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. @@Cheatah:

                  nuqneH

                  Der Umstand, dass in der URL "index.php" steht, ist übrigens nicht mal ein Hinweis darauf, dass eine Datei namens "index.php" überhaupt existiert - oder dass Du mit PHP arbeitest.

                  Ein Indiz ist kein Hinweis?

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
          2. Grüße,
            randnotiz von n00b zu n00b - wenn es utf8 ist, achte dass es "ut8 ohne bom" ist.
            MFG
            bleicher

            --
            __________________________-

            FirefoxMyth
            1. Grüße,
              randnotiz von n00b zu n00b - wenn es utf8 ist, achte dass es "ut8 ohne bom" ist.
              MFG
              bleicher

              bom sagt mir nicht viel aber ist ohne^^

              1. bom sagt mir nicht viel aber ist ohne^^

                Wenn dir "BOM" nichts sagt, wie kannst du dann behaupten, es wäre nicht vorhanden? ;)

              2. bom sagt mir nicht viel aber ist ohne^^

                Wenn dir "BOM" nichts sagt, wie kannst du dann behaupten, es wäre nicht vorhanden? ;)

                "Hyperglykämie sagt mir nichts, kann ich nicht haben!" - du wärst der Traum aller Ärzte :D

                Gibts eigentlich einen Fachbegriff für negative Hypochonder - also Personen, die jede Krankheit die man ihnen attestiert, verleugnen?

                1. Hi,

                  Gibts eigentlich einen Fachbegriff für negative Hypochonder - also Personen, die jede Krankheit die man ihnen attestiert, verleugnen?

                  ja: Workoholic. Ich bleibe da lieber ehrlich: Hypochondrie ist die einzige Krankheit, die ich nicht habe ... *röchel* *keuch*

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
              3. @@udo:

                nuqneH

                bom sagt mir nicht viel

                ↗Was ist die UTF-8-Signatur (BOM)? [UTF8-BOM]

                aber ist ohne^^

                ↗Das BOM erkennen [ibid.]

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
          3. Hallo,

            Und das geht ja nicht, da ich den Header befehl ja von index.php?s=beispiel aufrufe.

            was ändert das? Du kannst includieren, soviel du lustig bist; solange du dabei noch keine Ausgabe an den Browser machst, kannst du immer noch an beliebiger Stelle HTTP-Header setzen. Ob das im Sinne der Wartbarkeit und Übersichtlichkeit ist, wäre eine andere Frage.

            bzw. ich wüsst nicht wie ich das machen sollte, weil bei google steht immer nur das gleiche

            Aha ...

            Auf Leerzeichen gucken, bevor html befehl im head ist machen

            Ist deutscher das Satz kein. Kann niet verstaan!

            Ciao,
             Martin

            --
            Drei Sachen vergesse ich immer wieder: Telefonnummern, Geburtstage und ... äääh ...
  2. Moin,

    Du musst eben drauf achten, dass da in der Zeile 20 kein Output geschieht, wenn Deine if-Kaskade später zutrifft.

    Alternativ könntest Du natürlich auch bis dahin den Output-Buffer abfangen, aber das wäre ein ziemlich schmutziger Workaround.

    Grüße,
    Kim

    1. Alternativ könntest Du natürlich auch bis dahin den Output-Buffer abfangen, aber das wäre ein ziemlich schmutziger Workaround.

      Warum ist kontrolliertes Output-Buffering schmutzig?

  3. Hi,

    Zurück zur Header Funktion...
    Die muss ja immeroben im header stehen, aber wenn ichjetzt in einer anderen Datei diesen Befehl schreibe kommt folgender Fehler:

    sie kann an beliebiger Stelle stehen. Nur darf noch keine Ausgabe durchgeführt worden sein.

    gibt es eine andere möglichkeit von einer Seite weiterzuleiten?

    Keine sinnvolle. Verzichte also auf Ausgaben, bevor Du weißt, dass etwas ausgegeben werden soll.

    if($_GET[b]=="")

    "b" ist ein schlechter Name für eine Konstante, da er sehr wenig aussagekräftig ist. Ich würde eher den URL-Parameter "b" nennen, nicht jedoch die Konstante, die den Namen des URL-Parameters enthält.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes