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.

  • Arne Drews
    antwortet
    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

    Einen Kommentar schreiben:


  • jack159
    antwortet
    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).

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    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...

    Einen Kommentar schreiben:


  • monolith
    antwortet
    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?

    Einen Kommentar schreiben:


  • jack159
    antwortet
    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?

    Einen Kommentar schreiben:


  • monolith
    antwortet
    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.

    Einen Kommentar schreiben:


  • jack159
    antwortet
    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?

    Einen Kommentar schreiben:


  • ChrisvA
    antwortet
    Ja, habe mich da wohl mit den Zahlen verschaut

    Einen Kommentar schreiben:


  • jack159
    antwortet
    @ 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?

    Einen Kommentar schreiben:


  • ChrisvA
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X