alex: problem mit header("Location:...)

hallo...

meine seite hat folgenden aufbau:

header

mainbereich

footer

im mainbereich brauche ich die funktion header("Location:...)

nun kommt immer ne fehlermeldung das ja bereits eine ausgabe erfolgt ist. das leuchtet mir ein, nur wie kann ich das jetzt umgehen? ich kann die funktion ja nicht eher einbinden und daher wird immer schon vorher etwas ausgegeben, nämlich im header.

wäre für nen tip dankbar

  1. Hallo.

    Eventuell solltest Du den Aufbau überdenken:

    Includes
      header
      mainbereich
      footer
    header
    mainbereich
    footer

    Oder wie/warum wird Location mitten in der Seite "gebraucht"?

    Grüße aus Würzburg
    Julian

    --
    ss:) zu:{ ls:< fo:) de:< va:} ch:° n4:} rl:° br:> js:| ie:{ fl:( mo:)
    1. Hallo.

      Eventuell solltest Du den Aufbau überdenken:

      Includes
        header
        mainbereich
        footer
      header
      mainbereich
      footer

      warum 2 mal das ganze?

      Oder wie/warum wird Location mitten in der Seite "gebraucht"?

      es wird mitten in der seite gebraucht, weil ich ein script für ein gästebuch habe und nach dem eintrag soll direkt auf ne andere seite umgeleitet werden. das GB-script beinhaltet aber nun eben den header und da stehen schon ausgaben

      1. Hallo Alex,

        Deine Probleme entstammen einem Denkfehler.

        es wird mitten in der seite gebraucht, weil ich ein script für ein gästebuch habe und nach dem eintrag soll direkt auf ne andere seite umgeleitet werden. das GB-script beinhaltet aber nun eben den header und da stehen schon ausgaben

        Header und auch Header( 'Location: ...' ); haben nichts mit der Ausgabe dazu sondern antworten VOR dem 'verschicken' der eigentlichen Seite dem Browser. D.h., selbst, wenn Du Dein Problem lösen würdest, würde die Ausgabe vor Header nicht angezeigt werden.

        Du wirst also entweder das Konzept noch etwas überdenken müssen oder auf einen Meta-Redirect zurückgreifen müssen.

        Gruss, Thoralf

        --
        Sic Luceat Lux!
        1. Hi...

          also mit header meinte ich nur meine bezeichnung für alles was im kopfbereich steht. mir gehts um die funktion header(). da ja mein kopf und fussbereich imemr gleich aussieht wird nur der mittelteil verändert und aber in diesem benötige ich die weiterleitung

          1. Hallo.

            funktion header(). da ja mein kopf

            Genau da ist ja der Denkfehler. Lies doch mal kurz in der Doku den teil über die Funktion (http://www.php3.de/header).

            Grüße aus Würzburg
            Julian

            P.S: Tom: Eine Meta-Angabe mitten in der Seite sollte auch nicht klappen - zumindest wenn der Browser sauber arbeitet.

            --
            ss:) zu:{ ls:< fo:) de:< va:} ch:° n4:} rl:° br:> js:| ie:{ fl:( mo:)
            1. Hmmm... hab ich wo wirklich :-)

              aber ich möcht ja wie gesagt nur ne  weiterleitung auf ne andere seite nachdem ein formular abgeschickt wurde. wenn in dem formular fehleingaben sind kommt ne fehlermeldung und ansonsten wird weitergeleitet. ich könnte auch ne zwischenseite machen wo ein link zu der anderen seite eingebaut ist, aber mir gehts darum das man mein formular durch drücke nauf den aktualisieren-button im browser nicht 100 mal abschicken kann, daher die weiterleitung

              1. Hallo Alex,

                aber ich möcht ja wie gesagt nur ne  weiterleitung auf ne andere seite nachdem ein formular abgeschickt wurde. wenn in dem formular fehleingaben sind kommt ne fehlermeldung und ansonsten wird weitergeleitet. ich könnte auch ne zwischenseite machen wo ein link zu der anderen seite eingebaut ist, aber mir gehts darum das man mein formular durch drücke nauf den aktualisieren-button im browser nicht 100 mal abschicken kann, daher die weiterleitung

                Nun kommen wir der Sache schon näher ;)

                Lesestoff:
                http://www.dclp-faq.de/q/q-stil-normalform.html
                http://www.dclp-faq.de/q/q-formular-mehrfach.html
                http://www.dclp-faq.de/q/q-formular-verarbeitung.html

                Die gesamte Seite ist auch über http://www.php-faq.de/ zu erreichen, die 'komische' URL kommt daher, dass die Seite zur PHP-Newsgroup gehört, die sich unter De.Comp.Lang.Php.* befindet.

                Gruss, Thoralf

                --
                Sic Luceat Lux!
                1. Danke für die infos.

                  ich habe aber nun immer noch das problem das ich in meinem kopfbereich der seite noch html-ausgaben stehen hab, weil ja immer nur ein kleiner teil zwischen kopf und fussbereich verändert wird und in diesem teil mache ich den aufruf von header("Location:...)

                  1. Hallo Alex,

                    ich habe aber nun immer noch das problem das ich in meinem kopfbereich der seite noch html-ausgaben stehen hab, weil ja immer nur ein kleiner teil zwischen kopf und fussbereich verändert wird und in diesem teil mache ich den aufruf von header("Location:...)

                    Lässt sich so einfach nicht beantworten. Ich habe in meinen Projekten immer mal wieder solche Sachen und löse die immer gleich. Computer sind dazu da, montone und wiederkehrende Aufgaben abzunehmen. Also lagere ich die reproduzierbaren Inhalte wie eben Kopfbereich, Navigation, Fusszeilen, Copyrights o.usw. in extra Dateien aus. Da diese per include/require eingebunden werden, können sie den grössten Teil selbst erledigen, wie zB die Navigation anhand des aktuellen Script-Pfads zuordnen oder ich übergebe veränderliche Werte per Variable, zB das title-Tag.

                    Du müsstest also bissi ins Detail gehen, wie Du das bei Dir gelöst hast. Eine Fertig-Lösung wirst Du von mir nicht bekommen, allerdings werd ich vielleicht doch mal einen Feature-Artikel verfassen, wie man ein solches Seitengerüst mit PHP sinnvoll und performant gestalten kann.

                    Die Links, die ich Dir gegeben habe, beschreiben und lösen Probleme, die bei einer solchen Konstruktion typischerweise immer wieder auftreten. ;) Insbesondere der Hinweis auf das ReLoad-Verhindern beim Formular erscheint mir wichtig, denn ein blosses ungeprüftes Weiterleiten ist nicht nur sehr leicht zu umgehen, sondern im Endeffekt eine perfekte Waffe, da ich bei einem (D)DoS meine Requests (=Angriffe) für lau nahezu verdoppeln lassen kann. ;)

                    Gruss, Thoralf

                    --
                    Sic Luceat Lux!
              2. Hallo.

                ok, nochmal ganz langsam. Weiterleitung können auf zwei Weisen realisiert werden:
                1. Per Meta-Tag (http://selfhtml.teamone.de/html/kopfdaten/meta.htm#weiterleitung), wobei das zwischen <head> und </head> stehen muss - also nicht mitten im Body-Bereich
                2. Per HTTP-Header (siehe PHP-Doku), wobei die vor _jeglichem_ HTML-Code stehen muss.

                Eine Weiterleitung mitten in der Seite ist meines Wissens nach nicht (zuverlässig) möglich.

                Grüße aus Würzburg
                Julian

                --
                ss:) zu:{ ls:< fo:) de:< va:} ch:° n4:} rl:° br:> js:| ie:{ fl:( mo:)
  2. Hallo,

    meine seite hat folgenden aufbau:

    header

    mainbereich

    footer

    im mainbereich brauche ich die funktion header("Location:...)

    Kann es sein, dass du eigentlich include verwenden willst? Mit header ("Location:...) wird doch z.B. eine andere Seite aufgerufen.

    Gruß,
    Henning

    1. Ich binde über include ja die verschieden scripte ein aber header und footer sind ja immer gleich

  3. Hallo alex,

    nun kommt immer ne fehlermeldung das ja bereits eine ausgabe erfolgt ist. das leuchtet mir ein, nur wie kann ich das jetzt umgehen? ich kann die funktion ja nicht eher einbinden und daher wird immer schon vorher etwas ausgegeben, nämlich im header.

    ich hatte das gleiche Problem und habe es auf die für mich bequemste art gelöst.

    $head = 'blah';
    $body = 'blah';
    $bottom = 'blah';

    show_html($head,$body,$bottom);

    function show_html($head,$body,$bottom) {
      html-Gerüst mit den einbindungen an den entsprechenden Stellen.
    }

    So kannst du was auch immer du machen möchtest machen und falls nötig die ausgabe mit dem Funktionsaufruf starten.

    Gruß,
    small-step

    1. Danke dir.

      ich werde das gleich mal so ausprobieren. falls es schwierigkeiten gibt werde ich mich nochmal melden

    2. Ich müsste also erst schreiben header(....) und dann die funktion?

      1. Hallo alex,

        Ich müsste also erst schreiben header(....) und dann die funktion?

        ja. Die show_html() funktion kommt bei mir immer erst ganz zum Ende. Wenn dann also header() kommt, wird die funktion gar nicht erst aufgerufen.

        Gruß,
        small-step