GET-Variablen
Hallo
Ich bin noch ziemlicher Anfänger in PHP, und begreife die GET-Variablen noch nicht so ganz, nein eigentlich viel mehr, was man damit alles machen kann.
Also:
Zuerst einmal wie die Seite aussehen sollte, ganz simpel:
Tabelle mit zwei Spalten und zwei Zeilen, wobei die oberen Beiden verbunden sind, also hat man einen Header, eine Navi und ein "Inhaltsfenster".
Wenn ich jetzt in der Navi ein Link Home ("index.php"), Info ("info.php") und einen Link Über mich ("ueber_mich.php") habe (als Beispiel). Würde es dann nicht gehen, dass ich eigentlich eine Datei mache ("view.php"), bei der aber über Variablen (z.B. ?content=info oder ?content=ueber_mich) eigentlich den Inhalt, der in einer Datenbank ist, eingebunden wird. Oder das mit den Variablen den Inhalt aus einer Datei (z.B. "info.php") herausgeholt wird.
Eigentlich könnte man in der "Inhalts-Zelle" ja schreiben: include "info.php", aber dann wäre bei der "view.php" als Inhalt ja immer nur den Inhalt von "info.php".
Jetzt sollte ich doch schreiben können:
Die Links in der Navi (oder allgemein) müssten dann auf z.B. view.php?content=info oder info.php hinweisen, oder wie sollten die dann aussehen?
Habe ich mich irgendwie grob verrechnet, oder gibt es viel praktischere Möglichkeiten?
Thankz for all answers.
Lousek
Ich bin noch ziemlicher Anfänger in PHP, und begreife die GET-Variablen noch nicht so ganz, nein eigentlich viel mehr, was man damit alles machen kann.
Also:
Zuerst einmal wie die Seite aussehen sollte, ganz simpel:
Tabelle mit zwei Spalten und zwei Zeilen, wobei die oberen Beiden verbunden sind, also hat man einen Header, eine Navi und ein "Inhaltsfenster".
Wenn ich jetzt in der Navi ein Link Home ("index.php"), Info ("info.php") und einen Link Über mich ("ueber_mich.php") habe (als Beispiel). Würde es dann nicht gehen, dass ich eigentlich eine Datei mache ("view.php"), bei der aber über Variablen (z.B. ?content=info oder ?content=ueber_mich) eigentlich den Inhalt, der in einer Datenbank ist, eingebunden wird. Oder das mit den Variablen den Inhalt aus einer Datei (z.B. "info.php") herausgeholt wird.
Eigentlich könnte man in der "Inhalts-Zelle" ja schreiben: include "info.php", aber dann wäre bei der "view.php" als Inhalt ja immer nur den Inhalt von "info.php".
Jetzt sollte ich doch schreiben können:
1
2
3
4
5
6
7
2
3
4
5
6
7
Wenn der Inhalt in einer Datenbank (im PHP-Format) gespeichert, $content = Abfrage mit dem Datensatz $_GET['content'];
(variable: ?content=info)
Wenn der Inhalt in einer Datei (im PHP-Format) gespeichert, $content = include $_GET['content'];
(variable: ?content=info.php)
oder $content = include "$_GET['content'].'.php'"; (Richtig so mit " und ' ?)
(variable: ?content=info)
Habe ich mich irgendwie grob verrechnet, oder gibt es viel praktischere Möglichkeiten?
Thankz for all answers.
Lousek
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 77535
Url: https://administrator.de/forum/get-variablen-77535.html
Ausgedruckt am: 06.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar
Moin,
also
ist eine blöde Idee !
Dabei hast du zuwenig bzw. kein Kontrolle über die Herkunft der Adresse.
Was würde wohl passieren wenn jemand z.b.:
aufruft !?
Richtig, deine Seite würde den Inhalt der angegebenen Adresse auslesen und anzeigen. Zugegeben, das wäre in diesem Beispiel nicht soo schlimm, aber trotdem blöde.
Schlimmer wäre es da schon wenn jemand auf diese Weise versucht auf deine Konfigurations-Dateien zuzugreifen z.B.: "?content=./config.php" in der deine Datenbankbenutzerdaten stehen.
Gefährlich wird es aber wenn man anstelle einer fremd URL versucht auf Systemdateien zuzugreifen, z.B.: "?content=../../../../userpwd" das könnte einem auf einem Linuxserver den Zugriff auf die Password-Datei gewähren.
Natürlich ist das alles von der Konfiguration der entsprechenden Software abhängig, so kann z.B.: das includieren von URLs verboten sein.
Aber man muss es ja gar nicht erst soweit kommen lassen und schon gar nicht provozieren
Mein Vorschlag wäre daher nur ein Schlüsselwort zu übergeben z.B.: "?content=start", "?content=news" oder "?content=gb" und dann per switch die entsprechende Datei zu includieren:
So kann nur von dir festgelegtes includiert/angezeigt werden !
Wie du schon richtig erkannt hast gibt es zwei Arten von Anführungszeichen, das doppelte " und das einfache '. Sie haben allerdings unterschiedliche Auswirkungen auf deinen PHP-Code !
Der Inhalt von doppelten Anführungszeichen wird geparst, das heist das bei folgendem PHP-Code die Variable "$name" durch ihren Wert ersetzt wird:Der Inhalt einfacher Anführungszeichen hingegen wird nicht geparst !Das Parsen kostet natürlich Zeit, nicht viel, aber es ist so ! Zusätzlich führt die Verwendung von einfachen Anführungszeichen zu einer besseren lesbarkeit des Quelltextes unter Verwendung von Syntaxhighlight. Deutlich im zweiten Beispiel im zweiten echo zu sehen, die Variable ist deutlich zu erkennen wärend sie im ersten echo auch leicht überlesen werden kann.
Ein weitere Vorteil der einfachen Anführungszeichen ist auch das wegfallen des escapen von doppelten Anführungszeichen bei der Ausgabe von HTMLDer Punk "." diehnt auch als "Verkettungsoperator" und kann zwei oder mehr dings miteinander vebindenSo, da wir nun etwas mehr wissen, bauen wir deinen include doch mal neu:
http://de3.php.net/manual/en/function.echo.php
http://de3.php.net/manual/en/function.include.php
http://de3.php.net/manual/en/control-structures.switch.php
Gruß Arano
PS. Jetzt habe ich auch noch was gelernt !
Ein "include" ist keine Funktion sondern ein Sprachkonstrukt, weswegen es auch ohne Klammern aufrufbar ist.
also
1
"?content=datei.php" -> "$content=$_GET['content'];" -> "include($content);"
Dabei hast du zuwenig bzw. kein Kontrolle über die Herkunft der Adresse.
Was würde wohl passieren wenn jemand z.b.:
1
"?content=http-www-meindeseite-de"
Richtig, deine Seite würde den Inhalt der angegebenen Adresse auslesen und anzeigen. Zugegeben, das wäre in diesem Beispiel nicht soo schlimm, aber trotdem blöde.
Schlimmer wäre es da schon wenn jemand auf diese Weise versucht auf deine Konfigurations-Dateien zuzugreifen z.B.: "?content=./config.php" in der deine Datenbankbenutzerdaten stehen.
Gefährlich wird es aber wenn man anstelle einer fremd URL versucht auf Systemdateien zuzugreifen, z.B.: "?content=../../../../userpwd" das könnte einem auf einem Linuxserver den Zugriff auf die Password-Datei gewähren.
Natürlich ist das alles von der Konfiguration der entsprechenden Software abhängig, so kann z.B.: das includieren von URLs verboten sein.
Aber man muss es ja gar nicht erst soweit kommen lassen und schon gar nicht provozieren
Mein Vorschlag wäre daher nur ein Schlüsselwort zu übergeben z.B.: "?content=start", "?content=news" oder "?content=gb" und dann per switch die entsprechende Datei zu includieren:
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
switch($_GET['content']){
default :
case "startseite":
case "start": include("startseite.php"); break;
case "news": include("./unterordner/news.php"); break;
case "gb": include("guestbook.php"); break;
}
?>
$content = include "$_GET['content'].'.php'"; (Richtig so mit " und ' ?)
Nein !Wie du schon richtig erkannt hast gibt es zwei Arten von Anführungszeichen, das doppelte " und das einfache '. Sie haben allerdings unterschiedliche Auswirkungen auf deinen PHP-Code !
Der Inhalt von doppelten Anführungszeichen wird geparst, das heist das bei folgendem PHP-Code die Variable "$name" durch ihren Wert ersetzt wird:
1
2
3
4
5
2
3
4
5
<?php
$name = "Max Mustermann";
echo "Hallo $name !";
// Ausgabe: Hallo Max Mustermann !
?>
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$name = "Max Mustermann";
echo 'Hallo $name !';
echo 'Hallo '.$name.' !';
// Ausgabe: Hallo $name !
// Ausgabe: Hallo Max Mustermann !
?>
Ein weitere Vorteil der einfachen Anführungszeichen ist auch das wegfallen des escapen von doppelten Anführungszeichen bei der Ausgabe von HTML
1
2
3
4
5
2
3
4
5
<?php
echo "<div class=\"rotebox\" id=\"news_3\">bla bla bla bla bla \"bla\" blubbb's</div>";
echo '<div class="rotebox" id="news_3">bla bla bla bla bla "bla" blubbb\'s</div>';
// im letzen echo muss allerdings das einfache Anführungszeichen escapet werden
?>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$name = 'Arano';
echo $name.$name.$name
// AranoAranoArano
echo 'Hallo '.$name.' !';
// Hallo Arano !
echo 'Hallo '.$name." ! ($name)";
// Hallo Arano ! (Arano)
?>
1
2
3
4
5
2
3
4
5
<?php
$content = include "$_GET['content'].php";
// oder
$content = include $_GET['content'].'php';
?>
http://de3.php.net/manual/en/function.include.php
http://de3.php.net/manual/en/control-structures.switch.php
Gruß Arano
PS. Jetzt habe ich auch noch was gelernt !
Ein "include" ist keine Funktion sondern ein Sprachkonstrukt, weswegen es auch ohne Klammern aufrufbar ist.