Websiteentwicklung: PHP: Praktische Einführung: Benutzereingaben verwenden

Aus Wikibooks

Übergabe von Parametern per GET[Bearbeiten]

Die einfachste Möglichkeit, Benutzereingaben zu verarbeiten, ist GET. Sicher sind dir bei URLs schon die Zeichen ?, = und & aufgefallen. Das Fragezeichen leitet nach dem Dateinamen die Argumentkette ein, das Gleichheitszeichen weist einem Bezeichner einen Wert zu. Das kaufmännische Und trennt schließlich die Argumente voneinander.

Ein Rechner für Währungen könnte z.B. eine solche URL haben:

exchange.php?from=dollar-us&to=euro&amount=10

Wenn dieses PHP-Skript aufgerufen wird, werden diese im superglobalen Array $_GET als die drei Elemente "from" (mit dem Wert 'dollar-us'), "to" ('euro') und "amount" ('10') abgelegt.

Beispiel[Bearbeiten]

show_get.php:

<html>
  <head>
    <title>GET-Beispiel</title>
  </head>

  <body>

  <p>Du möchtest <?php echo (float)$_GET['amount']; ?> <?php echo htmlspecialchars($_GET['from']); ?> in <?php echo htmlspecialchars($_GET['to']); ?> umwandeln.</p>

  <p>
    <a href="show_get.php?from=dollar-us&amp;to=euro&amp;amount=10">10 US-Dollar in Euro</a><br />
    <a href="show_get.php?from=euro&amp;to=dollar-us&amp;amount=4">4 Euro in US-Dollar</a><br />
    <a href="show_get.php?from=chf&amp;to=euro&amp;amount=12.99">12,99 Schweizer Franken in Euro</a>
  </p>

  </body>

</html>
Hinweis

&amp; steht in HTML für &, da & für Zeichenersetzungen reserviert ist.

Dieses Beispiel zeigt dem Benutzer die Aktion an, die er ausgewählt hat. Du kannst auch selbst die URL in der Adresszeile des Browsers verändern und beobachten, was geschieht. Die Eingabe von <script type="text/javascript">alert('XSS!');</script> zeigt dir, warum das vorige Kapitel wichtig ist.

GET hat den Vorteil, dass kein Formular zur Argumentübergabe benötigt wird. Allerdings sind URLs in der Länge begrenzt; daher ist für Daten wie etwa Text die POST-Methode besser geeignet.

Formulare[Bearbeiten]

Formulare bieten dem Benutzer die Möglichkeit, selbstständig Eingaben zu tätigen. Formulare verwenden in der Regel POST, es ist aber genauso möglich, GET zu benutzen:

show_get.php:

<html>
<head>
  <title>GET-Beispiel</title>
</head>
<body>
<?php
/* auswählbare Währungen */
$currencies = array('dollar-us' => 'US-Dollar', 'euro' => 'Euro', 'chf' => 'Schweizer Franken');

/* Nutzereingaben prüfen; wenn die Werte gültig sind, dann Info anzeigen */
if( !empty($_GET['from']) && in_array($_GET['from'], array_keys($currencies))
 && !empty($_GET['to'])   && in_array($_GET['to'],   array_keys($currencies)) )
{
?>
  <p>Du möchtest <?php echo (float)$_GET['amount']; ?> <?php echo $currencies[$_GET['from']]; ?> in <?php echo $currencies[$_GET['to']]; ?> umwandeln.</p>
<?php
}
?>

  <form method="get">
    <label>Ursprungswährung:
    <select name="from" size="1">
    <?php
    foreach ($currencies as $key => $value)
    {
      echo '<option value="' . $key . '">' . $value . '</option>';
    }
    ?>
    </select></label><br />

    <label>Zielwährung:
    <select name="to" size="1">
    <?php
    foreach ($currencies as $key => $value)
    {
      echo '<option value="' . $key . '">' . $value . '</option>';
    }
    ?>
    </select></label><br />

    <label>Betrag:
    <input type="text" name="amount" /></label><br />

    <input type="submit" value="Umrechnen" />
  </form>

</body>
</html>

Die gewünschte Übertragungsmethode wird im Attribut method des form-Tags festgelegt, das Ziel des Formulars im Attribut action. Der Name der Eingabefelder entspricht dem Schlüssel im $_GET- bzw. $_POST-Array. Die Anzeige wurde leicht verändert: Es wird nun auf das Array $currencies zugegriffen, um nicht den programminternen Schlüssel, sondern die vollständige Bezeichnung der Währung anzuzeigen.

POST[Bearbeiten]

Um ein Formular mittels POST zu versenden, musst du lediglich das Attribut method auf "post" umstellen.

Checkboxes[Bearbeiten]

Um Checkboxes ("Kontrollkästchen") in PHP verwenden zu können, müssen die Boxen einer Gruppe als Array importiert werden:

Früchte wählen: <br />

<input type="checkbox" name="fruits[]" value="banana">Banane <br />
<input type="checkbox" name="fruits[]" value="apple">Apfel <br />
<input type="checkbox" name="fruits[]" value="orange">Orange <br />

Durch die beiden eckigen Klammern wird PHP angewiesen, ein Array mit diesem Namen zu erstellen und jeden angekreuzten Wert als ein neues Element hinzuzufügen. Dieses Array ist dann unter $_POST['fruits'] verfügbar. Ohne Klammern würde PHP den Wert von "fruits" mit der jeweils zuletzt angekreuzten Checkbox überschreiben.