Optionen und weiterführende Links



In der Datenbank befinden sich derzeit 477 Specials. Alle Specials anzeigen...

Übermittlungsfragen

Übermittlungsfragen

In vielen Fällen wollt Ihr Euren PHP-Skripten Parameter mitgeben: Die Begriffe, nach denen gesucht werden soll, die Nummer des Forumthemas, das angezeigt werden soll, beim Login Benutzernamen und Passwort und so weiter. Das geht recht einfach, indem Ihr Eurer PHP-Skript zum Ziel eines gewöhnlichen HTML-Formulars macht. Die Eingaben, die der User in dem Formular macht, werden an Euer Skript weitergereicht und können dort ausgewertet werden. Verfügbar sind diese Eingaben je nach Übertragungsmethode (GET oder POST) in den superglobalen Arrays $_GET und $_POST. In diesen assoziativen Arrays findet Ihr die Werte unter den Schlüsseln, die Ihr im Formular per name-Attribut zugewiesen habt.

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

<body>
  <!-- Das Formular -->

  <form action="get">
    Username: 
    <input type="text" name="name"><br>
    Passwort: 

    <input type="text" name="passwort"><br>
    <input type="submit" value="Abschicken">
  </form>

  <!-- PHP zur Auswertung -->
  <?php
    // gebe die eingegebenen Daten aus
    echo "Username: " . $_GET['name'];
    echo "Passwort: " . $_GET['passwort'];
  ?>

</body>

</html>

Da dies das erste komplette Beispielskript ist, will ich hier noch mal den Ablauf erlätern: Der PHP-Teil wird jedesmal ausgewertet, wenn die Datei im Browser aufgerufen wird. Da aber die Variablen beim ersten Durchlauf noch nicht belegt sind, ist die Ausgabe nach dem Formular einfach

Username:
Passwort:

Da im form-Tag kein action-Attribut angegeben ist, werden die eingegebenen Daten an das Skript selbst geschickt. Das bedeutet, das Skript wird ein zweites Mal aufgerufen, jetzt mit den eingegebenen Werten in $_GET. Die Ausgabe ist also etwas wie

Username: Henning
Passwort: 12345

Um zu verhindern, daß jedesmal Formular und die Ausgabe des PHP-Teils auftauchen, gibt es mehrere Möglichkeiten: Ihr könnt den PHP-Teil in eine eigene Datei schreiben und die dann im form-Tag per action-Attribut aufrufen. Wenn dieses Formular dann übertragen wird, wird Euer PHP-Skript vom Server abgerufen, mit den eingebenen Werten in $_GET.

An dieser Stelle müssen wir uns leider auch bei PHP mit verschiedenen Versionen herumschlagen: Die superglobalen Arrays $_GET und $_POST (und einige andere, auf die wir später noch zu sprechen kommen) gibt es seit PHP 4.1. Seit der Version 4.2 müßt Ihr sie verwenden. Die früher mögliche, einfachere Version mußte aufgrund von Sicherheitsproblemen standardmäßig abgeschaltet werden.

Früher wurden für die Eingaben in einem Formular einfach entsprechend benannte globale Variablen benutzt. Der Inhalt unserer Eingabefelder (zur Erinnerung: name="name" und name="passwort") hätte sich also in den Variablen $name und $passwort wiedergefunden statt in entsprechenden Einträgen eines superglobalen Arrays. Dieses Vorgehen hatte allerdings den Nachteil, das bei ungeschickt programmierten Skripten ein «böswilliger» User dem Skript gefäschte Werte für beliebige globale Variablen unterjubeln könnte. Das geht deshalb, weil der User auch per Hand Variablen an die URL anhängen kann

meinSkript.php?variable=wert&variable2=wert2

Wenn Ihr jetzt eine interne Variable $ist_eingeloggt verwendet, um irgendwelche Zugriffsrechte zu kontrollieren, konnte (in der alten Version) der User die Variable ganz einfach beliebig setzen

meinSkript.php?ist_eingeloggt=1

Und schon kommt jeder User auch ohne Passwort auf Eure Seite, weil die übergebene Variable $ist_eingeloggt einfach «Eure» $ist_eingeloggt überschreibt. Nach der neuen Methode landet der Wert des Users erst mal in $_GET, wo er keinen Schaden anrichten kann.

Ich beschreibe das deshalb so ausführlich, weil Ihr durch eine Änderung in der zentralen PHP-Konfigurationsdatei (Stichwort REGISTER_GLOBALS) den alten Zustand wieder herstellen könnt. Die Versuchung ist groß, wieder zur bequemen alten Methode zurückzukehren, daher habe ich den «Wurm im Apfel» hier so betont. Auch viele PHP-Bücher erklären leider noch die alte Methode.

Mit dem bisher Kennengelernten könnt Ihr bereits einen einfachen Bildbrowser schreiben

<html>
<head>
  <title>Meine Urlaubsfotos</title>
</head>

<body>

  <h1>Meine Urlaubsfotos</h1>

  <?php
    // wenn ohne Wert für $bild aufgerufen, nehme $bild=0 an
    if (!isset($bild))
      $bild = 0;

    // behandele zu große und zu kleine Werte von $bild
    if ($bild < 0)
      $bild = 0;
    if ($bild > 25)
      $bild = 25;
  ?>

  <!-- Der img-Tag mit dem gewählten Bild -->

  <img src="pictures/urlaub/pic<?php echo $bild ?>">
  <br>

  <!-- Die Links zum vorherigen und dem nachfolgenden Bild -->
  <a href="picbrowser.php?bild=<?php $b = $bild - 1; echo $b ?>">

  Vorheriges Bild
  </a><br>

  <a href="picbrowser.php?bild=<?php $b = $bild + 1; echo $b ?>">
  Nächstes Bild
  </a>

</body>

</html>

Dieses Beispiel soll Euch verschiedenes zeigen. Zum einen könnt Ihr in einer Datei mehrere PHP-Bereiche benutzen, jeweils mit <?php und ?> begrenzt. Zum anderen könnt Ihr den HTML- und den PHP-Code sehr eng verknüpfen, wie Ihr beispielsweise an dieser Zeile seht

<img src="pictures/urlaub/pic<?php echo $bild ?>">

Der PHP-Abschnitt steht hier mitten im src-Attribut. Bei der Auswertung wird dort einfach der aktuelle Wert von $bild ausgegeben, so daß etwas wie

<img src="pictures/urlaub/pic15">

herauskommt. Das gleiche Prinzip wird bei den a-Tags für die Links benutzt.



Special vom: 16.01.2003
Autor dieses Specials: Henning Kockerbeck
Die weiteren Unterseiten dieses Specials:
Die reine Lehre - HTML
Stilvoll - CSS
Kleiner Grundkurs Programmieren
Jetzt wird's dynamisch - JavaScript
Die andere Seite der Dynamik - PHP
Neue Gefilde - XML
Weiterführende Links
Zurück zur Hauptseite des Specials


?>