.MB: PHP Seitenfragement Verweise probleme

moin Community,

ich will über ein Seitenfragment einer der index.php auf sich selbst - also index.php Verweisen. habs mal mit header( " Location: index.php?page=logon " ); oder include( " index.php?page=logon " ); versucht abe kommt n Fehlermeldung: failed to open stream: oder einfach ne Leere Seite. Ich hab mit nem PHP Script auf die Haptseite verwiesen den ich in die hauptseite eingebuten habe.

Wie kan man das anders anstellen???

Grüße MB

  1. Moin!

    habs mal mit header( "Location: index.php?page=logon" ); … Leere Seite.

    Fehler anzeigen lassen. Ich vermute, da wird vor dem Header irgendwoher ein Leerzeichen gesendet.

    Kandidaten:

    • Zeilenumbruch oder Leerzeichen vor <?php
    • Der Editor schreibt eine BOM (die ist unsichtbar)
    • Zeilenumbruch oder Leerzeichen nach ?> (Hint: ganz weglassen wenn kein Text/HTML in der selben Datei folgt)

    Test geht auch mit headers_sent()

    oder include("index.php?page=logon"); versucht abe kommt n Fehlermeldung: failed to open stream

    Was zu erwarten ist.

    Wenn schon:

    <?php
    $_GET['page']='logon';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/index.php';
    

    Jörg Reinholz

    1. Hallo Jörg

      habs mal mit header( "Location: index.php?page=logon" ); … Leere Seite.

      Fehler anzeigen lassen. Ich vermute, da wird vor dem Header irgendwoher ein Leerzeichen gesendet.

      http://localhost/logon/?page=main das kam dabei raus. genauso wie ich es geschrieben habe. Oder meins du etwas anderes?

      oder include("index.php?page=logon"); versucht abe kommt n Fehlermeldung: failed to open stream

      Was zu erwarten ist.

      Was meinst du? Es wäre doch als Laihe logisch.

      Aufjedenfall hatts geklappt. Warum require_once und nich inculde, oder include_once??? Möchte das wissen aufbauen und Vestehen warum. Bleibt das $_GET[] gespeichert sodass require_once aufgerufen wid und sich nachher beim $_GET bedient?

      Viele Grüße MB

      1. Moin!

        Was meinst du? Es wäre doch als Laihe logisch.

        Wenn Du das Dateisystem bemühst (das machst Du mit require / include) dann gibts keine Parameter.

        Warum require_once und nich inculde, oder include_once

        Link zum Tutorial.

        Bleibt das $_GET[] gespeichert sodass require_once aufgerufen wid und sich nachher beim $_GET bedient?

        Ja. PHP-Handbuch. Superglobale

        Jörg Reinholz

        1. Hallo Jörg,

          Wenn Du das Dateisystem bemühst (das machst Du mit require / include) dann gibts keine Parameter.

          Ah ok

          Bleibt das $_GET[] gespeichert sodass require_once aufgerufen wid und sich nachher beim $_GET bedient?

          Ja. PHP-Handbuch. Superglobale

          Besten Dank MB

          1. Moin!

            GRRRRRRRRRRRR!!!

            Das ist mal wider Tüüüüü-Pisch! Für schnattrige Antworten und einen schnöden Link zum Geschreibsel Dritter wird sich höchst eifrig bedankt - aber dafür, dass ich mir für die Erweiterung und Verbesserung des Tutorials zu include/require (_once) ganz gewaltig den A... naja aufgerissen habe, gibt's NATÜRLICH keinen Lohn!

            *immernochgrummel*

            Jörg Reinholz

            1. Hallo Jörg Reinholz,

              Das ist mal wider Tüüüüü-Pisch! Für schnattrige Antworten und einen schnöden Link zum Geschreibsel Dritter wird sich höchst eifrig bedankt - aber dafür, dass ich mir für die Erweiterung und Verbesserung des Tutorials zu include/require (_once) ganz gewaltig den A... naja aufgerissen habe, gibt's NATÜRLICH keinen Lohn!

              Ich hatte dich schon im Verdacht, dass du diesen Artikel anonym bearbeitet hast. Dankeschön!

              Bis demnächst
              Matthias

              --
              Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
            2. Tach!

              Das ist mal wider Tüüüüü-Pisch! Für schnattrige Antworten und einen schnöden Link zum Geschreibsel Dritter wird sich höchst eifrig bedankt - aber dafür, dass ich mir für die Erweiterung und Verbesserung des Tutorials zu include/require (_once) ganz gewaltig den A... naja aufgerissen habe, gibt's NATÜRLICH keinen Lohn!

              Tut's noch weh? ;)

              Statt einer aufwändigen Blacklist-Funktion kann man auch ein ganz einfaches Whitelist-Array mit den erlaubten Inkludierdateinamen verwenden.

              dedlfix.

              1. Hallo dedlfix,

                Statt einer aufwändigen Blacklist-Funktion kann man auch ein ganz einfaches Whitelist-Array mit den erlaubten Inkludierdateinamen verwenden.

                Kann man nicht nur, sollte man auch. Alles andere ist zu fehleranfällig.

                LG,
                CK

                1. Moin!

                  Statt einer aufwändigen Blacklist-Funktion kann man auch ein ganz einfaches Whitelist-Array mit den erlaubten Inkludierdateinamen verwenden.

                  Kann man nicht nur, sollte man auch. Alles andere ist zu fehleranfällig.

                  Deswegen ist ja auch eine "negative blacklist" also eine "whitelist" drin (Verboten ist alles, was nicht /[^A-Za-z0-9_.]/ erlaubt ist) :

                  nach allerhand recht speziellen und gewillkürten Verboten kommt:

                  $forbiddenChars='/[^A-Za-z0-9_.\/*+:,-]/';
                  if ( preg_match($forbiddenChars, $fileName) ) {
                    # Brutal:
                    return error_403();
                  }
                  

                  "malen nach Zahlen" habe ich auch vorgesehen und als "sehr sicher und einfach" angepriesen

                  Jörg Reinholz

                  1. Tach!

                    Deswegen ist ja auch eine "negative blacklist" also eine "whitelist" drin (Verboten ist alles, was nicht /[^A-Za-z0-9_.]/ erlaubt ist) :

                    "malen nach Zahlen" habe ich auch vorgesehen und als "sehr sicher und einfach" angepriesen

                    Das ist alles jede Menge Code mit vielen Möglichkeiten, ihn nicht zu verstehen oder Fehler einzubauen (beim Erstellen und beim Abtippen). Ein einfaches Array mit den erlaubten Namen der Dateien dazu ein if mit in_array() sowie ein else für den Fehlerfall und fertig ist die Laube.

                    dedlfix.

                    1. Moin!

                      Ein einfaches Array mit den erlaubten Namen der Dateien dazu ein if mit in_array() sowie ein else für den Fehlerfall und fertig ist die Laube.

                      Wenn Du dann noch hinzufügst, dass die erlaubten includes in einer CSV stehen und außerdem ein paar Kommentare verwendest bist Du bei nichts anderem als einer Variante von 6.3 Sehr sicher und vergleichsweise einfach: includieren mit abstrakten Angaben (Zahlen)

                      Jörg Reinholz

                      1. Tach!

                        Wenn Du dann noch hinzufügst, dass die erlaubten includes in einer CSV stehen und außerdem ein paar Kommentare verwendest bist Du bei nichts anderem als einer Variante von 6.3 Sehr sicher und vergleichsweise einfach: includieren mit abstrakten Angaben (Zahlen)

                        Warum entwickelst du so komplexe Lösungen? Weil du es kannst? Es reicht doch, das Prinzip zu zeigen, und das geht mit einem einfachen Array. Das ist auch verständlicher, als wenn man sich erstmal durch viel Code durchzuwühlen muss. Ob der Leser sich dann entscheidet, eine CSV-Datei oder ein anderes Datenformat, eine Datenbank oder sonstwas statt des Arrays zu verwenden, steht auf einem anderen Blatt. Für die meisten des Zielpublikums ist doch die Array-Variante völlig ausreichend.

                        dedlfix.

                        1. Moin!

                          Für die meisten des Zielpublikums ist doch die Array-Variante völlig ausreichend.

                          Ach? Und die gerade eben von Dir als "nicht so ganz fit" beschriebenen sollen dann mit deren "dicken Fingern" im Programm herumschreiben weil eine Seite hinzukommt? Das ist doch gerade der Grund, warum man Daten nicht im Programm unterbringt...

                          Jörg Reinholz