PHP/Wie werden Daten weitergereicht?

Aus Mikiwiki
< PHP
Wechseln zu: Navigation, Suche

Die Methode "GET"

Neben "POST" wird auch die Methode "GET" zum Übertragen von Daten verwendet - durch Anhängen der Werte an den URL. Die bisher bei den Formularen gezeigten Methoden zur Datenübergabe wurden zwar immer wieder auf dasselbe Skript zurückgeführt, jedoch diente das bloss zur Vereinfachung. Ebenso könnte man von einem Skript zum nächsten springen und dabei Daten mitnehmen. Eine andere Möglichkeit der direkten Übergabe von Variablen zwischen Skripten gibt es nicht - wenn einmal von "externen" Varianten" wie gespeicherten Textdateien oder Datenbanken abgesehen wird.

Es ist naheliegend, auf die Methode "GET" nicht nur mittels Formularen, sondern direkt zuzugreifen. Der direkte Zugriff erfolgt mittels entsprechend aufgebauter Links. Dabei finden folgende drei besonderen Zeichen Anwendung:

  • Das Fragezeichen "?") dient als Trennzeichen zwischen dem URL und den Daten.
  • Das Ampersand ("&") dient als Trennzeichen zwischen den einzelnen Variablen-/Wertepaaren.
  • Das Gleichheitszeichen ("=") dient als Trennzeichen innerhalb der Variablen-/Wertepaare.
<a href="skript.php?var1=wert&var2=wert">Link</a>

Achtung: Zu beachten ist, dass Webbrowser einschliesslich des URL nur die Menge von etwa 2'000 Zeichen akzeptieren. Grössere Datenmengen können tatsächlich nur mit Formularen übertragen werden.

Eine Extrahierung der Daten ist wie bei den Formularen nicht notwendig. Alle Daten stehen in einzelnen Variablen zur Verfügung. Eine typische Ansammlung zeigen die beiden folgenden Skripte. Dabei werden die Artikeldaten in der Variablen "$artikel" verpackt und mit dem Link an die aufgerufene Seite "get_linkanswer.php" übertragen.

## Name     get_link.php

<h3>Was möchten Sie bestellen?</h3>
<a href="get_linkanswer.php?artikel=1">Der Unbesiegbare</a><br>
<a href="get_linkanswer.php?artikel=2">Der Schnupfen</a><br>
<a href="get_linkanswer.php?artikel=3">Sterntagebücher</a><br>
<a href="get_linkanswer.php?artikel=4">Eden</a><br>

"$_GET" ist ein assoziatives Array, das als Indizes die Namen aller Formularelemente und als Werte deren Inhalte enthält. Das Array selbst existiert immer, kann aber leer sein, wenn keine "GET"-Werte benutzt werden.

## Name     get_linkanswer.php

<h3>Was haben Sie bestellt?</h3>
<p>Sie haben das Buch <i>
<?php
switch($_GET['artikel']) 
{
  case 1: echo "Der Unbesiegbare "; break;
  case 2: echo "Der Schnupfen ";    break;
  case 3: echo "Sterntagebücher ";  break;
  case 4: echo "Eden ";
}
?>
</i> von Stanislaw Lem bestellt. Vielen Dank!</p>
<p><a href="get_link.php">Zurück zum letzten Skript</a></p>

In der Praxis werden solche Weitergaben sehr häufig eingesetzt. Oft dienen Bilder als Schaltflächen und es ist dann einfacher, mit "<a ...>"-Tags zu arbeiten als mit Formularen.

Kodierung von Daten

Solange nur Artikelnummern übertragen werden, wird das vorige Beispiel problemlos funktionieren. Wurde im folgenden Beispiel jedoch der Eintrag "Ihr Name?" aus einem Formular übernommen, so kann das Skript nicht richtig funktionieren. Leerzeichen sind an dieser Stelle nicht zulässig. Die Daten müssen also in ein Format gebracht werden, in dem die Sonderzeichen "?", "&" und "=" tatsächlich als solche erkannt werden.

<a href="get_coded.php?email=Ihr Name?">Ihr Name?</a>

Mit der Funktion "urlencode" können diese Zeichen durch die Zeichenfolge "%HH" ersetzt werden, wobei "HH" den Hexadezimalcode des betreffenden Zeichens im ASCII-Zeichensatz darstellt. Die Funktion "urldecode" wandelt einen so kodierten URL wieder zurück. Um eine URL zu schreiben, sollte deshalb erst eine Variable erzeugt werden, deren Wert mit "urlencode" kodiert wird. Diese Variable wird dann in den Link eingesetzt.

$coded = urlencode($email);
echo "<a href=\"get_coded.php?email=$coded\">Ihr Name?</a>

Wird für den Text der Variablen etwa "$email = "Jörgs E-Mail?" eingesetzt, so findet sich im Quelltext die folgende Form. Das Leerzeichen wird durch das Pluszeichen ersetzt, das Pluszeichen durch den entsprechenden ASCII-Code.

J%F6rg%27s+E-Mail%3F
<h3>Kodierung von Daten für den URL</h3>
<p>Senden Sie eine E-Mail!</p>
<?php
if (isset($_GET['email']))
{
  $email = $_GET['email'];
  echo stripslashes($email) . " wurde übertragen";
}
$email = "Jürg's E-Mail?";
$coded = urlencode($email);
$xx    = $coded;
echo <<<XLINKS
  <p><a href="{$_SERVER['PHP_SELF']}?email=$coded">
       Inhalt von <b>$email</b> übertragen?
     </a>
XLINKS;
?>

Kodierung von Daten für den URL

Senden Sie eine E-Mail!

Inhalt von Jürg's E-Mail? übertragen?