borisbaer: Wie rufe ich mit URL-Parametern dynamisch Inhalte auf?

Beitrag lesen

problematische Seite

Schau mal, das Ganze sieht jetzt so bei mir aus:

$page_found = false;

if (!empty($_GET["page"])
	&& preg_match("/^[a-z]+$/i", $_GET["page"]) == 1)
{
	$pageFile = __DIR__ . "/page/" . $_GET["page"] . ".php";
	if (file_exists($pageFile))
	{
		include $pageFile;
		$page_found = true;
	}
}

if (!$page_found)
{
	include __DIR__ . "/page/game.php";
}

Ich glaube, ich habe jetzt auch einigermaßen den Aufbau dieses Scripts verstanden. Ich versuche das mal in Worten zu formulieren und würde gerne noch einige Rückfragen stellen.

$page_found = false;

Erst mal wir die Variable auf false gestellt, damit ihr Status später vom Script abgefragt werden kann.

if (!empty($_GET["page"])
	&& preg_match("/^[a-z]+$/i", $_GET["page"]) == 1)
{

Wenn der URL-Parameter nicht leer ist, stelle die Bedingung auf, dass der URL-Parameter nach der Variable ?page= nur aus Buchstaben von A bis Z besteht. Wozu wird das gemacht? Sicherheit?

Das ^ ist ein Anker und setzt, denke ich, dort an, wo der URL-Parameter beginnt, nämlich nach dem ?page=. Ich schätze, das +$ steht wohl für die Dateiendung (also in dem Fall .php), aber was soll das /i bedeuten?

{
	$pageFile = __DIR__ . "/page/" . $_GET["page"] . ".php";
	if (file_exists($pageFile))
	{
		include $pageFile;
		$page_found = true;
	}
}

Danach wird die Variable $pageFile als Pfad definiert. DIR bedeutet, man geht vom aktuellen Verzeichnis aus und hängt dann den Unterordner page dran, dann den Namen des URL-Paramters, der durch den Link aufgerufen wird und schließlich die Datei-Endung.

Wenn die Datei existiert, schreibe das include und setze die anfängliche Variable auf true. An dieser Stelle endet das Script, wenn die Datei bzw. Seite gefunden wurde.

if (!$page_found)
{
	include __DIR__ . "/page/game.php";
}

Sollte die Datei nicht gefunden werden und bleibt die Variable $page_found deshalb auf false, dann wird standardmäßig die Seite game.php aufgerufen.

Hier könnte man es wohl noch so schreiben, dass es nicht immer nur mit der Datei game.php funktioniert, sondern z.B. die Datei aufgerufen wird, die den Zusatz .default enthält, also etwa game.default.php, dann wäre man nicht so limitiert, wäre mal keine game.php da.

Wie müsste man denn den Einzeiler umschreiben, damit das obige (ausführliche) Script ausgeführt wird. Momentan sieht er so aus:

$pageFile = ".//" . (empty($_GET["page"]) || !preg_match("/^[a-z]+$/i", $_GET["page"]) ? "game" : $_GET["page"]) . ".page.php";
			file_exists($pageFile) && include $pageFile;

Meine Versuche haben bisher leider nicht geklappt.


Entschuldigt den langen Posting, aber ich wollte noch auf etwas zurückkommen. Oben hast du als best practice Folgendes geschrieben:

Also - best practice wäre:

  • die URLs in den Tabs ohne Fragezeichen und ohne # notieren. Also genau so, wie sie jetzt sind.
  • am Server in der .htaccess per mod_rewrite dafür sorgen, dass Tab-Namen als ?tab=... an index.php angehängt werden. Falls irgendein Heini direkt die index.php abruft, kommt halt index.php?tab=index.php an. Ja und? Ist ein ungültiger Tab-Name, und:
  • in index.php den tab-Parameter verarbeiten und auf gültige Tab-Namen validieren. Für ungültige oder fehlende Tabnamen das Default-Tab includen
  • als progressive enhancement einen click-Handler auf die Tabs legen, der die Page per Ajax holt und per pushState so tut, als wär's über den Server gelaufen.

Ich habe mal gestrichen, was ich bereits leisten kann.

Übrig bleibt also die Geschichte mit .htaccess (würde ich zum Schluss angehen) und das mit dem pushState. Ich habe nicht ganz verstande, wie das funktioniert und wozu das gut ist (Sicherheit?).

Boris

0 75

Wie rufe ich mit URL-Parametern dynamisch Inhalte auf?

borisbaer
  • url
  1. 0
    TS
    • ajax
    • client-server
    • url
    1. 0
      borisbaer
  2. 0
    dedlfix
    1. 0
      borisbaer
      1. 0
        Samuel fiedler
        • javascript
        • php
        • url
        1. 0
          Der Martin
          • php
          • url
        2. 0
          Rolf B
          1. 0
            borisbaer
            1. 0
              Rolf B
              1. 0
                borisbaer
                1. 0
                  Rolf B
                  1. 0
                    borisbaer
                    1. 0
                      Rolf B
                      1. 0
                        borisbaer
                        1. 0
                          tk
                          • php
                          • url
                          1. 0
                            borisbaer
                        2. 0
                          Rolf B
                          1. 0
                            borisbaer
                            1. 0
                              Rolf B
                      2. 1
                        tk
                        • php
                        • url
                        1. 0
                          Rolf B
                          1. 0
                            borisbaer
                            1. 0
                              Der Martin
                              1. 0
                                Rolf B
                                1. 0
                                  borisbaer
                                  1. 0
                                    Rolf B
                                    1. 0
                                      borisbaer
                                      1. 0
                                        Rolf B
                                        1. 0
                                          borisbaer
                                          1. 0
                                            Rolf B
                                            1. 0
                                              borisbaer
                                            2. 0
                                              borisbaer
                                              1. 0
                                                Rolf B
                                                1. 0
                                                  borisbaer
                                                  1. 0
                                                    Rolf B
                                                    1. 0
                                                      borisbaer
                                                      1. 0
                                                        Rolf B
                                                        1. 0
                                                          borisbaer
                                                          1. 0
                                                            borisbaer
                                                            1. 0
                                                              Rolf B
                                                              1. 0
                                                                borisbaer
                                                                1. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    borisbaer
                                                            2. 0
                                                              Rolf B
                                                              1. 0
                                                                borisbaer
                                                                1. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    borisbaer
                                                                    1. 0
                                                                      Rolf B
                                                                      1. 0
                                                                        borisbaer
                                                                        1. 0
                                                                          Rolf B
                                                                          1. 0
                                                                            klawischnigg
                                                                            1. 0
                                                                              Rolf B
                                                                              1. 0
                                                                                klawischnigg
                                                                                1. 0
                                                                                  Rolf B
                                                                          2. 1
                                                                            borisbaer
                                2. 0
                                  Der Martin
                                  1. 0
                                    Rolf B
                                    1. 0
                                      Der Martin
                                      1. 0
                                        Rolf B
                                        1. 0
                                          Der Martin
                                          1. 0
                                            Rolf B
                            2. 0
                              Tabellenkalk
                              1. 0
                                borisbaer
        3. 0
          borisbaer
  3. 0
    Rolf B
    1. 0
      borisbaer
      1. 0
        Rolf B
        1. 0
          borisbaer
          1. 0
            Rolf B
            1. 0
              borisbaer
              1. 1
                Rolf B
                1. 0
                  borisbaer
                  1. 0
                    Rolf B
                    1. 0
                      borisbaer