PHP 4.3

3.1 Datenübergabe mit URL-Parametern

Die Parameter zu einer HTTP-GET-Anfrage werden als sogenannte URL-Parameter an den Webserver übermittelt, d.h. diese Parameter sind Teil des URLs, den z.B. ein Webbrowser an einen Webserver bei einer Anfrage nach einer Ressource sendet. Im allgemeinen können Sie daher diese Parameter auch in der Adresszeile Ihres Browsers sehen, in der der URL der aktuellen Webseite angezeigt wird. Rufen Sie zum Beispiel die Suchmaschine www.google.de auf und geben einen Suchbegriff ein, dann sehen Sie nach dem Absenden des Suchformulars in der Adresse unter anderem den von Ihnen eingegebenen Suchbegriff.

Parameter werden im Allgemeinen von Skriptprogrammen auf dem Server verarbeitet, wobei es sich natürlich nicht ausschließlich um PHP-Skripte handeln muss. Auch Programme, die in anderen Sprachen geschrieben wurden, sind in der Lage, Parameter zu verarbeiten. Beispiele dafür sind Perl-Skripte (die oft die Endung .cgi oder .pl aufweisen), ASP-Skripte (Active-Server-Pages mit der Endung .asp) und JSP-Skripte (Java Server Pages mit der Endung .jsp). Manchmal ist es, wie es der URL http://www.google.de/search?hl=de&safe=off&q=berlin&meta= (Beispiel) der Suchmaschine www.google.de zeigt, auch gar nicht nötig, den Dateityp des ausgeführten Dokuments (hier: "search") zu benennen. Dafür sind in der Regel spezielle Webserver-Konfigurationen notwendig.

Ein Vorteil von PHP gegenüber beispielsweise Perl (ohne besondere CGI-Unterstützung) ist es, dass Sie im verarbeitenden Skript relativ leicht auf die übertragenen Daten zugreifen können. Das Schlüssel-/Wert-Paar schluessel1=wert1 ist bei Übertragung mit der get-Methode unter $HTTP_GET_VARS["schluessel1"] im Zielskript zugänglich. Ohne diese Daten wie in Perl aus der Umgebungsvariablen QUERY_STRING auslesen und zuweisen zu müssen, stehen sie sofort in dieser PHP-Variablen zur Verfügung.

Wenn Sie sich daran erinnern, welche Zeichen in Variablennamen erlaubt sind, wird Ihnen sicherlich auffallen, dass eckige Klammern oder Anführungszeichen normalerweise verboten sind, in $HTTP_GET_VARS["schluessel1"] aber trotzdem vorkommen. Ist das dann trotzdem eine Variable? Ja, es handelt sich um ein so genanntes Array. $HTTP_GET_VARS ist eine Liste von mehreren Werten, nämlich eine Liste aller an das aktuelle Skript übertragenen Werte. Um auf einen bestimmten übertragenen Parameter zuzugreifen, muss man nur in eckigen Klammern den Namen der Information angeben. Eine ausführliche Erläuterung von Arrays, insbesondere wie Sie selber welche anlegen, folgt in Lerneinheit 5.

Sie müssen für die Übertragungen der Daten nicht unbedingt ein Formular verwenden. Wenn Sie es möchten, können Sie ganz einfach selbst den URL bilden. Dafür hängen Sie zur Einleitung der Parameterliste an den URL ein Fragezeichen an und lassen anschließend die einzelnen Parameter in Form von Schlüssel-/Wert-Paaren folgen, die durch ein kaufmännisches Und-Zeichen (&) getrennt sind:

http://www.domainname.tld/dokument.php?schluessel1=wert1&schluessel2=wert2 usw.

www.domainname.tld steht dabei für den entsprechenden Servernamen (z.B. www.example.com), dokument.php repräsentiert das auszuführende Programm und schluessel1 und wert1 sowie schluessel2 und wert2 beziehen sich auf die jeweiligen Schlüssel-/Wert-Paare.

Hier ein Beispiel. Der Link innerhalb des Skripts test.php verweist dabei auf das Skript selbst:

Übergabe von Formulardaten mit einem Link:
<html>
  <body>

   Sie haben den Wert <?php echo $HTTP_GET_VARS["var"]; ?> übergeben.<br><br>

   <a href="test.php?var=hallo">Übertrage "hallo" als Parameter</a>

  </body>
</html>

Browserausgabe vor Aufruf des Links:
  Sie haben den Wert   übergeben.

  Übertrage "hallo" als Parameter
Browserausgabe nach Aufruf des Links:
Sie haben den Wert hallo übergeben.

  Übertrage "hallo" als Parameter

Beachten Sie, dass nichtalphanumerische Zeichen außer " . ", " - " und " _ " nicht in ihrer Reinform übertragen werden können, insbesondere gilt das für Leerzeichen und Umlaute. Die Übergabe des Parameters

	  
?var=Jetzt übertrage ich Sonderzeichen!
            

würde fehlschlagen.

Bei der Formulierung eines URL mit Datenübergabe durch die get-Methode müssen Sie einige Konventionen einhalten:


  • Leerzeichen müssen durch ein Pluszeichen + ersetzt werden
  • Alle Zeichen, deren Zeichencodes 128 bis 255 entsprechen, müssen als Hexadezimalzeichenfolge abgebildet werden, welche durch ein Prozentzeichen eingeleitet wird. Hinter dem Prozentzeichen folgt dann der Hexadezimalwert des jeweiligen Zeichens. Ein "ä" beispielsweise wird dann zu "%E4". Sofern die Daten Zeichen wie &, =, + oder % enthalten, müssen auch diese durch Hexadezimalzeichenfolgen ersetzt werden, weil diese Zeichen ansonsten als Steuerzeichen im Sinne der Regeln zur Unterscheidung von Wert und Schlüssel interpretiert würden.

Diese Regeln müssen Sie sich aber nicht alle merken, denn PHP erleichtert Ihnen die Kodierung der Parameter in einen gültigen URL mit der Funktion urlencode(). Diese nimmt sämtliche erforderlichen Umwandlungen vor und liefert eine kodierte Zeichenkette zurück. Ein entsprechend richtiger Aufruf unter Verwendung von urlencode() für die ebengenannte Zeile wäre also:

	 
<a href="test.php?var=<?php echo urlencode("Jetzt übertrage ich Sonderzeichen!"); ?>"> 
	 

Kommentare (1)

papua am 15.04.2016 17:10:40

Wie wäre es bei der Übergabe von Parameter, wenn die zu übergebenden Parameter in einer Form stehen, aber die Übergabe AUSSERHALB der Form per css-Button in einer <a href="xxx.php?.......>
an eine andere php Datei zu übergeben?
Bei meiner Code funktioniert nicht.

Ihr Kommentar

Name