armin: header location aus Variabel

Hallo,
ich möchte eine webseite aufrufen die in einer Variablen steht. Z.B.:

$url = $Satz['products_url'];
Wie mache ich das am Besten,? Mit header, aber wie?

  1. $url = $Satz['products_url'];
    Wie mache ich das am Besten,? Mit header, aber wie?

    Mittels:
    header("Location: ./".$Satz['products_url']);

    1. Hi,

      header("Location: ./".$Satz['products_url']);

      auf diese Weise wird der Location-Header niemals eine absolute URL enthalten, die jedoch zwingend erfordert wird.

      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. Hi,

        header("Location: ./".$Satz['products_url']);

        auf diese Weise wird der Location-Header niemals eine absolute URL enthalten, die jedoch zwingend erfordert wird.

        Cheatah

        wie wäre es dann richtig?

        1. wie wäre es dann richtig?

          header ("Location: http://" . DEINE_DOMAIN . "/" . $Satz['products_url'], wenn $Satz['products_url'] den relativen Pfad beinhaltet, sonst

          header ("Location: http://" . $Satz['products_url']

          1. wie wäre es dann richtig?

            header ("Location: http://" . DEINE_DOMAIN . "/" . $Satz['products_url'], wenn $Satz['products_url'] den relativen Pfad beinhaltet, sonst

            header ("Location: http://" . $Satz['products_url']

            gibt es auch einen anderen weg als mit header um auf eine webseite mit variabelen url zur verzweigen?

            1. gibt es auch einen anderen weg als mit header um auf eine webseite mit variabelen url zur verzweigen?

              Wenn es eine Umleitung sein soll, kann das PHP-Skript auch eine Javascript- oder eine Umleitung mit meta-Tag ausgeben, was beides dann clientseitig umleitet.

              Willst Du überhaupt eine Umleitung?

              1. gibt es auch einen anderen weg als mit header um auf eine webseite mit variabelen url zur verzweigen?

                Wenn es eine Umleitung sein soll, kann das PHP-Skript auch eine Javascript- oder eine Umleitung mit meta-Tag ausgeben, was beides dann clientseitig umleitet.

                Willst Du überhaupt eine Umleitung?

                ich muss auf eine bestimmte Seite meiner Webanwendung verzweigen die in dieser variablen($url) drin steht

                1. Willst Du überhaupt eine Umleitung?
                  ich muss auf eine bestimmte Seite meiner Webanwendung verzweigen die in dieser variablen($url) drin steht

                  Wenn Du wirklich eine nicht vom Benutzer initiierte Umleitung willst, nimm header(), oder beschreib genauer, um was es geht.

                  1. Willst Du überhaupt eine Umleitung?
                    ich muss auf eine bestimmte Seite meiner Webanwendung verzweigen die in dieser variablen($url) drin steht

                    Wenn Du wirklich eine nicht vom Benutzer initiierte Umleitung willst, nimm header(), oder beschreib genauer, um was es geht.

                    zu jedem produkt in der datenbank gibt es eine bestimmte webseite. Der url dieser webseite ist in der produktdatenbank zu jedem produkt gespeichert. Wie würdest du dieses lösen?

                    1. Wenn Du wirklich eine nicht vom Benutzer initiierte Umleitung willst, nimm header(), oder beschreib genauer, um was es geht.
                      zu jedem produkt in der datenbank gibt es eine bestimmte webseite. Der url dieser webseite ist in der produktdatenbank zu jedem produkt gespeichert. Wie würdest du dieses lösen?

                      Vermutlich genügt die Ausgabe eines Links zu der jeweiligen Seite ... Aber ganz verstehe ich immer noch nicht, was Du eigentlich erreichen willst. Ich glaube fast, eine Umleitung ist gar nicht das, wonach Du suchst. Soll der Aufruf vom Benutzer ausgehen? Dann mußt Du die Links ausgeben lassen. Soll der Aufruf abhängig von vorheriger Verarbeitung von Daten mittels Skript geschehen? Dann nimm header().

                      1. Wenn Du wirklich eine nicht vom Benutzer initiierte Umleitung willst, nimm header(), oder beschreib genauer, um was es geht.
                        zu jedem produkt in der datenbank gibt es eine bestimmte webseite. Der url dieser webseite ist in der produktdatenbank zu jedem produkt gespeichert. Wie würdest du dieses lösen?

                        Vermutlich genügt die Ausgabe eines Links zu der jeweiligen Seite ... Aber ganz verstehe ich immer noch nicht, was Du eigentlich erreichen willst. Ich glaube fast, eine Umleitung ist gar nicht das, wonach Du suchst. Soll der Aufruf vom Benutzer ausgehen? Dann mußt Du die Links ausgeben lassen. Soll der Aufruf abhängig von vorheriger Verarbeitung von Daten mittels Skript geschehen? Dann nimm header().

                        danke dir für deine hilfe. Ich glaube auch das dann header () besser past. Ich hab ees jetzt eingebaut bekomme aber den Fehler:Cannot modify header information - headers already sent by (output started at F:\xampp\htdocs\AUSGABE2.PHP:7)
                        was soll ich machen? was mache ich verkehrt?

                        1. was soll ich machen? was mache ich verkehrt?

                          Bevor der Header gesendet wird, darf kein einziges Zeichen an den Browser gesendet werden. Das schließt auch (bzw. ist dasselbe) den Quelltext mit ein. Achte darauf, daß dort keine Leerzeichen stehen.

                          1:
                          2: <?php ...
                          3: ?>

                          Zeile 1 führt zum Fehler. Die müßte gelöscht werden. Ausgaben mit echo oder print usw. sind natürlich auch tabu.

                          1. was soll ich machen? was mache ich verkehrt?

                            Bevor der Header gesendet wird, darf kein einziges Zeichen an den Browser gesendet werden. Das schließt auch (bzw. ist dasselbe) den Quelltext mit ein. Achte darauf, daß dort keine Leerzeichen stehen.

                            1:
                            2: <?php ...
                            3: ?>

                            Zeile 1 führt zum Fehler. Die müßte gelöscht werden. Ausgaben mit echo oder print usw. sind natürlich auch tabu

                            kannn ich das dann seperat aufrufen nach meiner Verarbeitung?

                            1. kannn ich das dann seperat aufrufen nach meiner Verarbeitung?

                              Was meinst Du damit? Kannst Du mal Codeauszüge aus Deinem Skript posten?

                              1. kannn ich das dann seperat aufrufen nach meiner Verarbeitung?

                                Was meinst Du damit? Kannst Du mal Codeauszüge aus Deinem Skript posten?

                                <html>
                                  <head>
                                    <title>Ausgabe1</title>
                                  </head>
                                <body>
                                    <?$nr = $_GET['nr'];
                                   $db = mysql_connect ("localhost","root","data") ;
                                   $SQLBefehl = "SELECT * FROM products WHERE arejays_products_id = '$nr';";
                                   $Werte= mysql_db_query("arejays", $SQLBefehl, $db);

                                $Satz = mysql_fetch_array($Werte);

                                $url = $Satz['arejays_products_url'];

                                header("Location: $url);

                                ?>

                                </body>
                                </html>

                                1. kannn ich das dann seperat aufrufen nach meiner Verarbeitung?

                                  Was meinst Du damit? Kannst Du mal Codeauszüge aus Deinem Skript posten?
                                  <html>
                                    <head>
                                      <title>Ausgabe1</title>
                                    </head>
                                  <body>
                                      <?$nr = $_GET['nr'];
                                     $db = mysql_connect ("localhost","root","data") ;
                                     $SQLBefehl = "SELECT * FROM products WHERE arejays_products_id = '$nr';";
                                     $Werte= mysql_db_query("arejays", $SQLBefehl, $db);

                                  $Satz = mysql_fetch_array($Werte);

                                  $url = $Satz['arejays_products_url'];

                                  header("Location: $url);

                                  ?>

                                  </body>
                                  </html>

                                  Da haben wir schon den Fehler. Wenn Du keine Dispatch-Seite schreiben willst, dann kannst Du auf Ausgaben an dieser Stelle völlig verzichten, da Du umleiten willst und die endgültige Ausgabe von der aufgerufenen Seite generiert wird. Ab <html> beginnen in Deinem Beispiel schon die Ausgaben, die zum Browser gesendet werden. Das darf nicht sein. Du mußt Dein Skript so aufbauen

                                  <?php

                                  SQL-Abfragen
                                  header(Location: ...

                                  ?>

                                  Vor dem <?php darf nichts, wirklich nichts stehen, auch keine Leerzeichen oder -zeilen.

                                2. Hallo

                                  <html>
                                    <head>
                                      <title>Ausgabe1</title>
                                    </head>
                                  <body>
                                      <?$nr = $_GET['nr'];
                                     $db = mysql_connect ("localhost","root","data") ;
                                     $SQLBefehl = "SELECT * FROM products WHERE arejays_products_id = '$nr';";
                                     $Werte= mysql_db_query("arejays", $SQLBefehl, $db);

                                  $Satz = mysql_fetch_array($Werte);

                                  $url = $Satz['arejays_products_url'];

                                  header("Location: $url);

                                  ?>

                                  </body>
                                  </html>

                                  1. Keine Ausgabe vor dem Header (sonst wäre es kein Header).

                                  2. EVA-Prinzip[1]: Dateneingabe, Verarbeitung, Ausgabe
                                    - Eingabe ist der GET-Parameter ($_GET['nr']), der übrigens eine Überprüfung auf Gültigkeit vertragen kann
                                    - Verarbeitung ist die Datenbankabfrage mit der folgenden Entscheidung, zu welcher Seite weitergeleitet wird
                                    - Ausgabe (die hier wegen der zwingend folgenden Weiterleitung garnicht nötig wäre) wäre der Zusammenbau und die Ausgabe des HTML-Quelltextes.

                                  Damit würdest du auch 1. erfüllen, da die Ausgabe von HTML zwingend nach der Headerangabe folgen würde (es gibt ja auch noch andere Header, bei denen eine nachfolgende Ausgabe der Normalfall ist).

                                  3. In diesem Fall eine Krücke: die Verwendung von ob_start und ob_end_flush (puffert die auszugebenden HTML-Teile bis der Header gesendet und der Puffer mit ob_end_flush beendet wird)

                                  [1] hat nichts mit Kinder, Küche, Kirche zu tun

                                  Tschö, Auge

                                  --
                                  Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                                  (Victor Hugo)
                                  <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
                                  Veranstaltungsdatenbank Vdb 0.1
                                  1. hallo Auge,

                                    EVA-Prinzip[1]
                                    [1] hat nichts mit Kinder, Küche, Kirche zu tun

                                    Naja, das wäre ja auch KKK - und _da_ müßte man vorsichtig sein wegen Verwechslungsgefahr mit KleinKaliberKalashnikow
                                    ;-)

                                    Grüße aus Berlin

                                    Christoph S.

                                    --
                                    Visitenkarte
                                    ss:| zu:) ls:& fo:) va:) sh:| rl:|
                                    1. Hallo

                                      EVA-Prinzip[1]
                                      [1] hat nichts mit Kinder, Küche, Kirche zu tun

                                      Naja, das wäre ja auch KKK

                                      Ähem, dir ist die Diskussion um das gleichnamige Buch von Eva Herrmann bekannt?

                                      • und _da_ müßte man vorsichtig sein wegen Verwechslungsgefahr mit KleinKaliberKalashnikow

                                      Welche? Die tschechische, die mit Pistolenmunition geladen und anstatt mit Gasdruck mit Federn nachgeladen wurde, oder die "richtige", die AK 74?
                                      Erstere war jedenfalls Schrott.

                                      Tschö, Auge

                                      --
                                      Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                                      (Victor Hugo)
                                      <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
                                      Veranstaltungsdatenbank Vdb 0.1
                                3. <?$nr = $_GET['nr'];
                                     $db = mysql_connect ("localhost","root","data") ;
                                     $SQLBefehl = "SELECT * FROM products WHERE arejays_products_id = '$nr';";
                                     $Werte= mysql_db_query("arejays", $SQLBefehl, $db);

                                  Oh Jubel! Die SQL-Injection, vor der ich gestern (https://forum.selfhtml.org/?t=156605&m=1018749) gewarnt habe, ist immer noch drin.

                                  Ein Aufruf mit ?nr=42'%20or%20'1'='1 und schon ist das Ding mächtig durcheinander. Mit ?nr=42'%20or%201=1%20into%20outfile%20'somefile.php kann ich auch noch Dateien auf dem Server anlegen. Bleibt nur zu hoffen, dass "root" in MySQL und "root" auf Betriebssystemebene nichts miteinander zu tun haben.

                                  Hinweise, wie das Problem zu beheben ist, habe ich gestern gegeben, "dedlfix" hat auch noch eine hilfreiche Anmerkung über alternative Schnittstellen gemacht.

                                  Alexander

                    2. Hi,

                      Wenn Du wirklich eine nicht vom Benutzer initiierte Umleitung willst, nimm header(), oder beschreib genauer, um was es geht.
                      zu jedem produkt in der datenbank gibt es eine bestimmte webseite. Der url dieser webseite ist in der produktdatenbank zu jedem produkt gespeichert. Wie würdest du dieses lösen?

                      Wenn ich dich richtig verstehe hast du einen Link auf ein Produkt der ungefähr so aussieht:
                      weiterleiten.php?url=seiteZuProdukt1.html
                      Warum ersetzt du diesen nicht einfach durch "seiteZuProdukt1.html"?

                      mfG,
                      steckl