Ankündigung

Einklappen
Keine Ankündigung bisher.

Link geklickt - Neue Seite soll geladen werden: Mit header() oder include() umsetzen?

Einklappen

Neue Werbung 2019

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

  • Link geklickt - Neue Seite soll geladen werden: Mit header() oder include() umsetzen?

    Hallo,

    Ich nutze Clean-URL's und eine Router-Funktionalität in meinem Projekt. Jede Request wird auf die index.php geleitet.
    Wenn ich jetzt auf meiner Seite beispielsweise auf "Home" klicke, wie soll dann die "Home"-Seite geladen werden?
    - Mit include("bla/home.php)"?
    - Oder mit header ("Location: http://bla.de/home.php")?

    Falls mit Variante 1 (include()):
    Wie realisiert man denn hier, dass die URL stets aktuell ist? Denn wenn ich z.B. derzeit auf der Login-Seite bin, dann auf den Login-Button klicke, dann wird der Parameter "checkLogin" an die Index geschickt, welche dann die checkLogin() Methode ausführt und anschließend die home.php inkludiert. Es öffnet sich dann zwar die Home-Seite, allerdings steht in der URL dann noch als Parameter "checkLogin".


    Falls mit Variante 2 (header()):
    Wie kann denn dann noch überhaupt das Templating von header und footer funktionieren?
    Denn dafür nutze ich bisher immer folgende Variante:

    PHP-Code:
        <?php
        
    include "$GLOBALS[root]/view/header.html";
        
    ?>
         
        <!-- html zeugs.... -->
         
        <?php
        
    include "$GLOBALS[root]/view/footer.html";
        
    ?>
    Wenn ich aber nun header() benutze, dann wäre in dem Fall ja $GLOBALS['root'] bzw. der Index 'root' garnicht bekannt, da ja bereits ein neuer Request angefordert wird. Das ganze endet also mit einer Fehlermeldung...


    Ich hoffe ihr versteht was mein Problem ist.

  • #2
    Also deine Lösung mit Header wird vermutlich nicht funktionieren, da die ja nur wieder im Router ankommt und dann weitergeleitet wird. Aus diesem Grund wird es von der Art her nur mit der 2. Variante funktionieren.


    PS: Der Pfad kannst du auch perfekt über __DIR__ bzw. __FILE__ herausfinden.
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      @ ChrisvA:

      Du meinst es wird nur mit Varinate 1. funktionieren (du schriebst Variante 2., sagtest aber gleichzeitig, dass die Variante mit dem Header nicht funktioniert)., oder?

      Kommentar


      • #4
        Ja, habe mich da wohl mit den Zahlen verschaut
        [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
        [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

        Kommentar


        • #5
          Zitat von ChrisvA Beitrag anzeigen
          Ja, habe mich da wohl mit den Zahlen verschaut
          Ok, aber wie löse ich dann das Problem von Variante 1, welches ich im Startpost beschrieben habe?

          Kommentar


          • #6
            Indem du die beiden Varianten kombinierst. include() zum inkludieren von Wasauchimmer und immer wenn du das für notwendig hälst kannst du ja header() nutzen um "weiterzuleiten". Das wurde so z. B. im Laravel 3 Framework genau so gemacht, nannte sich dort Redirect.

            Kommentar


            • #7
              Zitat von monolith Beitrag anzeigen
              Indem du die beiden Varianten kombinierst. include() zum inkludieren von Wasauchimmer und immer wenn du das für notwendig hälst kannst du ja header() nutzen um "weiterzuleiten". Das wurde so z. B. im Laravel 3 Framework genau so gemacht, nannte sich dort Redirect.
              Mir ist in der Zwischenzeit noch eine weitere Lösung eingefallen:

              Ich nutze da Clean-URL's und leite jeden Request zur index.php weiter.
              Um das Probelm zu beheben, könnte ich ja auch einfach statt header() direkt den kompletten gewünschten Link angeben wie z.B.

              [PHPWIKI]
              <a href="<?php echo "http://localhost/projectxy/profile/10"; ?>"> Link </a>
              [/PHPWIKI]

              Natürlich nicht hartgecodet wie im Beispiel, sondern mit Variablen, aber so funktioniert es auch. Der Vorteil ist eben, dass man nicht auf header() angewiesen ist und vorher bereits HTML ausgeben kann.

              Ist diese Variante denn auch ok?

              Kommentar


              • #8
                Das verstehe ich nicht - wo ist der Unterschied? Was hat die angabe kompletter Links ("http://localhost/projectxy/profile/10") im Unterschied zu elativen ("profile/10") damit zu tun, dass der Parameter ("/10") noch dran hängt?

                Kommentar


                • #9
                  Ich frage mich, ob da solche "clean-urls" Sinn machen. Nehmen wir als Beispiel Wordpress. Das hat die Seiten-URL in 2 (!!!) verschiedenen Rows in der Datenbank eingetragen. Und in jedem Post (!!!) fix. Somit wird umziehen sau mühsam. Absolute URLs.

                  Nehmen wir als Gegenbeispiel das Symfony Framework. Das kannst du den ganzen Tag 100-mal hin- und herschieben - wohin du willst. Es funktioniert immer. Relative URLs.

                  Insbesondere ist dein echo völlig sinnfrei...
                  [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                  Kommentar


                  • #10
                    Zitat von ChristianK Beitrag anzeigen
                    Ich frage mich, ob da solche "clean-urls" Sinn machen. Nehmen wir als Beispiel Wordpress. Das hat die Seiten-URL in 2 (!!!) verschiedenen Rows in der Datenbank eingetragen. Und in jedem Post (!!!) fix. Somit wird umziehen sau mühsam. Absolute URLs.

                    Nehmen wir als Gegenbeispiel das Symfony Framework. Das kannst du den ganzen Tag 100-mal hin- und herschieben - wohin du willst. Es funktioniert immer. Relative URLs.

                    Insbesondere ist dein echo völlig sinnfrei...


                    Ich komme von Java SE und das sind meine Anfänge in PHP. Dafür finde ich das schon ganz ok. Besser gehts natürlich immer, aber die ausgefeilteste und vielleicht dafür auch schwerste Variante muss ich mir ja nicht direkt zu Anfang geben.

                    Zum echo:
                    Wie gesagt, ich echo da nicht hart die URL wie im Beispiel, sondern es sieht eher so aus (kam wohl falsch rüber):

                    PHP-Code:
                    <a href="<?php echo $GLOBALS['baseURL'] . '/profile/10'?>"> Link </a>
                    wobei $GLOBALS['baseURL'] dann eben den Anfang der URL enthält (Beispielsweise http://localhost/projectxy).

                    Kommentar


                    • #11
                      Wie realisiert man denn hier, dass die URL stets aktuell ist? Denn wenn ich z.B. derzeit auf der Login-Seite bin, dann auf den Login-Button klicke, dann wird der Parameter "checkLogin" an die Index geschickt, welche dann die checkLogin() Methode ausführt und anschließend die home.php inkludiert. Es öffnet sich dann zwar die Home-Seite, allerdings steht in der URL dann noch als Parameter "checkLogin".
                      Gerade bei so einer Anforderung würde ich auf nach erfolgreicher Prüfung bspw. einen Session-Parameter setzen und dann per header auf die index.php leiten. Dann haste auch die URL wieder sauber.

                      Wobei ich mich bei einem Parameter, wie "checkLogin" frage, wie Du cleanURL´s definierst?!
                      Für meine Definition müsste das so ablaufen:
                      Code:
                      aktuelle URL: http://example.com/login
                      
                      Login-Button wird geklickt
                          -> entweder Affen-Formular oder action="checkLogin"
                              wobei Affenformular hier imho besser wäre.
                      
                      Prüfung erfolgreich:
                          -> Session-Parameter setzen, per header() auf http://www.example.com
                      
                      Prüfung fehlgeschlagen:
                          -> Meldung für Fehler und erneuter Eingabeversuch
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar

                      Lädt...
                      X