Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] bei redirect mit header() wird Textanker/Sprungmarke angehängt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] bei redirect mit header() wird Textanker/Sprungmarke angehängt

    Hi,

    wenn sich der Browser bei einem Textanker befindet, und dann ein redirect stattfindet - wie kann ich es dann hinbekommen, dass der Anker nicht an die neue URL angehängt wird?

    Hier ein einfaches Beispiel:
    Code:
    <!DOCTYPE html>
    <html>
    <head>
    
    </head>
    <body>
    
    <form action="" id="anker" method="post">
      <input type="text"  name="text1" />
      <input type="submit" name="submit" value="absenden" />
    </form>
    
    <?php
    if( isset($_POST['submit'])) {
      $url = 'http://google.de';
      header('Location: ' . $url, true, '301');
      exit;  
    }
    ?>
    
    </body>
    </html>
    Mit Betätigung des Absendebuttons wird die Seite neu geladen, das if-Statement greift und es wird auf google.de weitergeleitet. Funktioniert auch. Nur wenn sich der Browser beim Textanker #anker befindet, dann steht nach dem redirect in der Adresszeile google.de#anker ...gefällt mir aber nicht.

    Was theoretisch geht, ist beim action-Attribut die URL des Formulars einzutragen. Dann wird quasi zuerst auf die "reine" URL weitergeleitet und direkt danach ohne Anker auf google.de (so versteh ich's jedenfalls). Leider funktioniert das in meinem konkreten Fall nicht, weil ich die aktuelle URL nicht kenne. Ich kann nur auf die Wordpress Funktion get_permalink($post->ID) zurückgreifen, was dann aber wieder dazu führt, dass der Anker bleibt. Es ist verhext

    Scheinbar passiert das anhängen des Ankers Client-seitig und kann irgendwie mit javascript umgangen werden. Ich stehe aber ehrlich gesagt auch etwas im Wald mit dem Problem. Gibt es noch eine php Lösung, die ich übersehen habe? Und warum um alles in der Welt bleibt nach einem Redirect der Anker bestehen? Zumindest mit Chrome und FF habe ich es bisher ausprobiert...

    lg


  • #2
    Mach mal dein Error-Reporting an, du solltest eine "Headers allready send"-Botschaft bekommen.

    Redirects via Header werden vom Browser verwertet, wenn dein Browser meint er müsse einen Anchor anheften ist das Bier des Browsers, PHP verhält sich da so wie es soll und teilt dem Browser eine Url ohne Anchor mit.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Zitat von tr0y Beitrag anzeigen
      Mach mal dein Error-Reporting an, du solltest eine "Headers allready send"-Botschaft bekommen.
      Stehe grad auf dem Schlauch. Du meinst php Errors oder? Wie soll ich die angezeigt bekommen, wenn ich auf google.de weitergeleitet werde?

      Zitat von tr0y Beitrag anzeigen
      Redirects via Header werden vom Browser verwertet, wenn dein Browser meint er müsse einen Anchor anheften ist das Bier des Browsers
      Ok, hab ich befürchtet. Ich muss es also schaffen, dass der redirect erst stattfindet, nachdem der Anker weg ist.

      Kommentar


      • #4
        http://php-de.github.io/jumpto/headers-already-sent/
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Danke! Aber da stellen sich bei mir gleich wieder 2 Fragen:

          - Ich weiß immer noch nicht, wie ich die Fehlermeldung erhalten soll. Mit
          PHP-Code:
          ini_set('display_errors''1');
          error_reporting(E_ALL); 
          passiert gar nichts. Was mich auch nicht verwundert. Denn wo soll php die Fehlermeldung ausgeben, wenn ich zu Google weitergeleitet wurde?

          - Trotz fehlerhaftem Gebrauch der header Funktion scheint die Weiterleitung ja zu klappen. Das Problem mit dem Anker hat ja wohl nichts mit dem header already sent zu tun.

          Kommentar


          • #6
            Die Weiterleitung findet nicht immer statt, da du einen invaliden Response fabrizierst.

            Normal ist:
            Code:
            - header 1
            - header 2
            - header 3
            - body
            du machst
            Code:
            - header 1 ( von PHP automatisch )
            - stück vom body
            - header 2 ( dein location-header )
            - rest vom body
            Manche Browser interpretieren das trotzdem ( quirksen ), die meisten eher nicht.

            Quirksen bedeutet auch das der Browser da tun und lassen kann was er will ( theoretisch ), ob das jetzt die Ursache deines Problems ist, wirst du feststellen wenn du das behoben hast. Ich helfe dir nicht Symptome zu bekämpfen.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Also zuerst mal muss ich noch einen Fehler eingestehen. Ich hatte die/eine Lösung eigentlich schon, habe aber die Wordpress Funktion get_permalink() falsch angewendet (Ausgabe durch "echo" vergessen). Deshalb blieb das action Attribut leer und damit der Anker erhalten.

              Zitat von tr0y Beitrag anzeigen
              ob das jetzt die Ursache deines Problems ist, wirst du feststellen wenn du das behoben hast.
              Nein, auch mit korrektem Aufruf von header() gleich am Anfang des Scripts besteht das Problem weiterhin.

              Aber wie gesagt - ich kann entweder die aktuelle URL mittels Wordpress Funktion ins action Attribut schreiben. Dann ist zwar die header Funktion falsch eingebunden, klappt aber trotzdem. Außerdem kann ich aber auch ein weiteres php Script im action Attribut festlegen. Dort wird die if Abfrage gemacht und ggf (korrekt) auf eine externe URL weitergeleitet (Anker wird nicht angehängt). Wenn if nicht greift, redirecte ich wieder zurück zum Formular.

              Kommentar


              • #8
                Manche Browser interpretieren das trotzdem ( quirksen ), die meisten eher nicht.
                Das würde ich doch stark bezeifeln, dass der Browser das beeinflusst, wo doch PHP den Fehler wirft. Ich denke mal eher, das liegt daran, dass hier Wordpress im Spiel ist, was an allen Ecken und Enden Output buffering betreibt.

                Denn wo soll php die Fehlermeldung ausgeben, wenn ich zu Google weitergeleitet wurde?
                Logischerweise wird dann nicht weitergeleitet, denn genau das sagt die Fehlermeldung ja.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Logischerweise wird dann nicht weitergeleitet, denn genau das sagt die Fehlermeldung ja.
                  Danke! Dann frag ich mich nur, warum tr0y mir die Empfehlung gegeben hat, das Error-Reporting einzuschalten. Ich habe doch nie davon gesprochen, dass die Weiterleitung nicht funktioniert. Es wird nur (fälschlicherweise) der Anker mit angehängt.

                  Zitat von nikosch Beitrag anzeigen
                  Das würde ich doch stark bezeifeln, dass der Browser das beeinflusst, wo doch PHP den Fehler wirft. Ich denke mal eher, das liegt daran, dass hier Wordpress im Spiel ist, was an allen Ecken und Enden Output buffering betreibt.
                  Also nochmal Klartext. Es gibt keine Fehlermeldung. Ich habe vorab auch extra das Problem auf die nötigsten Codezeilen reduziert und völlig von Wordpress isoliert getestet (1:1 wie es oben steht). Wenn ich jetzt alles richtig verstanden habe, leitet php immer korrekt weiter und gibt keine Fehlermeldung aus. Chrome und FF hängen den Anker ungefragt mit dran. Und umgehen kann ich das indem ich eine URL (ohne Anker) ins action Attribut schreibe. Mit oder ohne Wordpress - es kommt immer dasselbe raus.

                  Kommentar


                  • #10
                    Troy's Einwand ist trotzdem berechtigt. Setz die Sache so um, dass sie technisch korrekt ist. Wordpress bietet dafür bspw. umfangreiche Hooks an, über die man quasi an jeder relevanten Stelle eigenen Code integrieren kann.

                    Es gilt immer auch potentielle Fehler auszuschließen, bevor man andere Fragen angeht, die damit zusammen hängen können.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      Setz die Sache so um, dass sie technisch korrekt ist.
                      Ok, seh ich ein. Habe es jetzt so gelöst, dass das Formular auf eine neue Seite verweist (action.php). Diese ist ja völlig losgelöst von Wordpress und macht nichts weiter als als die header Weiterleitung.

                      Danke euch!!

                      Kommentar

                      Lädt...
                      X