Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Variablen per URL mit $_GET übergeben

Sie befinden sich: Home > Php Tutorial > Variablen per URL mit...

Variablen per URL mit $_GET übergeben


Eintrag am:  20.09.2010
Hits / Besucher:  18796
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wer Daten von einer Seite zur nächsten weiterleiten möchte, kann sie direkt in die URL schreiben. PHP stellt dafür die superglobale Variable $_GET bereit, die alle Parameter aus der URL als assoziatives Array enthält. Diese Methode kommt immer dann zum Einsatz, wenn Werte sichtbar in der Adresszeile stehen dürfen, zum Beispiel bei Suchbegriffen, Seitennummern oder Filtereinstellungen.

Aufbau einer URL mit Parametern

Parameter werden an die URL angehängt, getrennt durch ein Fragezeichen. Jeder Parameter besteht aus einem Schlüssel und einem Wert, verbunden durch ein Gleichheitszeichen. Mehrere Parameter werden mit & aneinandergereiht.

seite.php?name=Max&alter=30

seite.php?suche=php+tutorial&seite=2

In diesen Beispielen enthält die URL jeweils zwei Parameter. Die Reihenfolge spielt keine Rolle, da PHP die Zuordnung über den Schlüsselnamen vornimmt.

Werte aus $_GET auslesen

In der Zieldatei stehen die übergebenen Werte im Array $_GET zur Verfügung. Bevor ein Wert verwendet wird, sollte immer geprüft werden, ob der erwartete Schlüssel tatsächlich vorhanden ist. Andernfalls erzeugt PHP eine Warnung wegen eines undefinierten Array-Index.

<?php

if (isset($_GET['name'])) {
$name = $_GET['name'];
echo 'Hallo, ' . htmlspecialchars($name);
}
?>

Die Funktion htmlspecialchars() wandelt Sonderzeichen wie < und > in harmlose HTML-Entities um. Das ist wichtig, weil der Inhalt von $_GET direkt vom Benutzer manipuliert werden kann. Ohne diese Absicherung wäre die Seite anfällig für Cross-Site-Scripting (XSS).

Sonderzeichen in URLs mit urlencode()

Bestimmte Zeichen haben in URLs eine feste Bedeutung. Das Fragezeichen leitet die Parameter ein, das Gleichheitszeichen trennt Schlüssel von Wert, und das kaufmännische Und trennt Parameter voneinander. Wenn solche Zeichen im Wert selbst vorkommen, muss der Wert vorher kodiert werden.

<?php

$suchbegriff = 'PHP & MySQL';
$seite = 'ergebnisse.php?suche='
. urlencode($suchbegriff);

echo $seite;
/* Ausgabe: ergebnisse.php?suche=PHP+%26+MySQL */
?>

Die Funktion urlencode() ersetzt alle problematischen Zeichen durch ihre prozentkodierten Entsprechungen. Leerzeichen werden zu +, das &-Zeichen wird zu %26. Beim Auslesen über $_GET dekodiert PHP die Werte automatisch. Ein manueller Aufruf von urldecode() ist nicht nötig und würde sogar zu einer doppelten Dekodierung führen.

Praxisbeispiel: Einfache Suchfunktion

Ein typischer Anwendungsfall für $_GET ist eine Suchfunktion. Der Suchbegriff wird per Formular abgeschickt und landet als URL-Parameter auf der Ergebnisseite. So lässt sich das Suchergebnis als Link teilen oder als Lesezeichen speichern.

<?php

/* Suchformular (HTML) */
?>
<form method="get" action="suche.php">
<input type="text" name="q">
<button type="submit">Suchen</button>
</form>

<?php
/* suche.php: Ergebnisse anzeigen */
$suchbegriff = '';

if (isset($_GET['q']) && $_GET['q'] !== '') {
$suchbegriff = trim($_GET['q']);
echo '<p>Ergebnisse für: '
. htmlspecialchars($suchbegriff)
. '</p>';
}
?>

Das Formular verwendet method="get", wodurch der Browser die Eingabe automatisch als URL-Parameter anhängt. Die URL sieht dann zum Beispiel so aus: suche.php?q=php+arrays.

Praxisbeispiel: Pagination

Bei längeren Listen oder Suchergebnissen werden die Daten auf mehrere Seiten verteilt. Die aktuelle Seitennummer wird dabei über $_GET gesteuert.

<?php

$seite = 1;

if (isset($_GET['seite'])) {
$seite = (int) $_GET['seite'];
if ($seite < 1) {
$seite = 1;
}
}

$pro_seite = 20;
$offset = ($seite - 1) * $pro_seite;

echo 'Zeige Einträge ab Position '
. $offset;

/* Navigation ausgeben */
echo '<a href="?seite=' . ($seite - 1)
. '">Zurück</a> ';
echo '<a href="?seite=' . ($seite + 1)
. '">Weiter</a>';
?>

Durch den Cast auf (int) wird sichergestellt, dass nur ganzzahlige Werte in die Berechnung einfließen. Egal was ein Benutzer in die URL schreibt, das Script erhält immer eine gültige Zahl.

Eingaben sicher validieren mit filter_input()

Neben isset() und manuellen Casts bietet PHP mit filter_input() eine elegante Möglichkeit, GET-Parameter direkt beim Auslesen zu validieren und zu bereinigen.

<?php

/* Ganzzahl auslesen und validieren */
$id = filter_input(
INPUT_GET,
'id',
FILTER_VALIDATE_INT
);

if ($id === false || $id === null) {
echo 'Ungültige oder fehlende ID.';
} else {
echo 'Artikel-ID: ' . $id;
}

/* String bereinigen */
$name = filter_input(
INPUT_GET,
'name',
FILTER_SANITIZE_SPECIAL_CHARS
);
?>

FILTER_VALIDATE_INT gibt false zurück, wenn der Wert keine gültige Ganzzahl ist, und null, wenn der Parameter gar nicht existiert. FILTER_SANITIZE_SPECIAL_CHARS kodiert HTML-Sonderzeichen und schützt so vor XSS-Angriffen.

Sicherheitshinweise

GET-Parameter stehen sichtbar in der Adresszeile und werden in der Browser-History, in Server-Logs und in Referrer-Headern gespeichert. Daraus ergeben sich einige Regeln für den sicheren Umgang:

Passwörter, Session-Tokens und andere vertrauliche Daten gehören nie in die URL. Für solche Daten ist $_POST die richtige Wahl, weil POST-Daten nicht in der Adresszeile erscheinen.

Jeder Wert aus $_GET muss vor der Ausgabe im HTML mit htmlspecialchars() behandelt werden. Ohne diese Maßnahme kann ein Angreifer beliebigen JavaScript-Code in die Seite einschleusen.

Bei der Verwendung in Datenbankabfragen sollten ausschließlich Prepared Statements zum Einsatz kommen. Das direkte Einfügen von GET-Werten in SQL-Queries ermöglicht SQL-Injection-Angriffe.

Die URL-Länge ist technisch begrenzt. Die meisten Browser und Webserver akzeptieren URLs bis etwa 2000 Zeichen. Für größere Datenmengen sollte stattdessen $_POST verwendet werden.

$_GET und $_POST im Vergleich

$_GET eignet sich für alle Daten, die in der URL sichtbar sein dürfen: Suchbegriffe, Seitennummern, Filter, Sortieroptionen. Ein großer Vorteil ist, dass sich die URL als Lesezeichen speichern und per Link teilen lässt.

$_POST ist die bessere Wahl für Formulare, die Daten verändern (zum Beispiel Registrierung, Bestellung, Login) oder vertrauliche Informationen übertragen. POST-Daten erscheinen weder in der Adresszeile noch in der Browser-History.

Als Faustregel gilt: Aktionen, die nur Daten lesen, verwenden GET. Aktionen, die Daten schreiben oder verändern, verwenden POST.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.