php Logo

Paul Ferd. Siegert Datenbankgestützte Webseiten

 
PHP und HTML

Formulare in HTML

Eingabe

Interaktive Webseiten machen nur Sinn, wenn es für den Nutzer möglich ist Eingaben zu machen. Dafür stehen in HTML Formulare zur Verfügung. Hier ein Beispiel für einen Login-Dialog:

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
Kennung: <input type="text" name="kennung" size="20"><br>
Passwort: <input type="password" name="passwort" size="20"><br>
<input type="submit" value="Einloggen">
</form>

Im öffnenden <form>-Tag wird bestimmt was mit den Daten geschehen soll. Und zwar
a) Wohin sie verschickt werden bzw. welche Instanz sie auswerten soll und
b) wie die Daten verschickt werden sollen.


Methode

Die Methode bestimmt auf welche Weise die Daten verschickt werden sollen.

method Bemerkung
POST Ähnlich wie bei HTML bestehen auch die HTTP-Pakete aus einen Header- und einem Body-Teil. Bei Verwendung der Methode POST werden die Daten des Formulars innerhalb des Body-Teils übermittelt und können daher beliebig lang werden. Sie sind dabei für den normalen WWW-Benutzer nicht sichtbar. Das ist wichtig bei längeren Eingaben oder sicherheitsrelevanten Übermittlungen.
GET Die Methode GET hängt die Daten des Formulars an die URL an (also im Head-Teil des HTTP-Pakets). Das heisst, sie sind in der Browserzeile sichtbar. Ein weiterer Nachteil ist, dass eine URL nicht länger als 256 Zeichen lang werden sollte. Daher ist diese Methode nur für die Übermittlungen kleinerer Datenmengen sinnvoll.

Die Syntax der Übermittlung ist hier:
URL?variablenname1=wert1&variablenname2=wert2&...

z.B.:
http://www.firma.com?name=Hanswurst&passwort=nichtsehrgeheim

Der erste Trenner der auf die Top Level Domain (z.B. ".com") folgt ist immer ein ?. Alle weiteren Trenner sind &. Die Einträge bestehen aus Variablennamen/Wert-Paaren mit einem = dazwischen. Die Variablennamen, sie die im HTML-Formular mit name="..." angegebenen.


Übernahme der Variablen

Seit der Version 4.3.x von PHP wird aus Sicherheitsgründen empfohlen die PHP-Variable $register_globals (in der php.ini) auf off zu setzen. Das erfordert, dass im Programm die übergebenen Variablen explizit eingelesen werden müssen

$kennung = $_GET['kennung'];
$passwort = $_GET['passwort'];

bzw.

$kennung = $_POST['kennung'];
$passwort = $_POST['passwort'];

Die vom Nutzer eingegebenen Daten stehen dann in den entsprechenden Variablen.


Aber wohin sollen die Daten nun verschickt werden?

a) an ein anderes PHP-Dokument das die Daten auswertet oder
b) an sich selbst.

a) Fremddatei
Es ist möglich sie an ein anderes Dokument zu schicken
action="auswertung.php"
Hier würde das Dokument auswertung.php die Daten verarbeiten.

b) Eigendatei
Es ist ebenfalls möglich das Dokument an sich selbst zu schicken.

action="<? echo $_SERVER[‘PHP_SELF‘]; ?>"

Die Variable $PHP_SELF zeigt immer auf die Datei in der sie steht. Durch echo wird sie in den HTML-Code geschrieben. So schickt das Formular die Daten an das eigene Dokument. Probleme kann es bei dieser Konstruktion geben, wenn der Nutzer die reload-Funktion seines Browsers betätigt. Die selben Daten werden dann erneut bearbeitet.


Beispiel1
<?
$kennung = $_POST['kennung'];
$passwort = $_POST['passwort'];
?>

<html lang="de">
<body>

<form action="<? echo $_SERVER[‘PHP_SELF‘]; ?>" method="post">
Kennung: <input type="text" name="kennung" size="20" value="<? echo $kennung; ?>"><br>
Passwort: <input type="password" name="passwort" size="20" value="<? echo $passwort; ?>"><br>
<input type="submit" value="Einloggen">
</form>

<?
echo "->".$kennung;
echo "->".$passwort;
?>
</body>
</html>


Vergleiche

Jetzt soll aber etwas mit den Daten passieren. Zum Beispiel soll bei einer Passwortabfrage die eingegebenen Daten mit dem richtigen Passwort verglichen werden. Darüf benötigen wir Kontrollstukturen. In diesem Fall eine bedingte Verzweigung, die das Programm verzweigt, also je nach Situation (Passwort richtig oder falsch) anders reagieren lässt.. Ist das Passwort richtig begrüße den Nutzer, ist es falsch gib eine Fehlermeldung aus.

Um überhaupt verzweigen zu können müssen wir erst einmal vergleichen können. Folgendes

$passwort = "geheim";

war ja eine Wertzuweisung und kein Vergleich oder gar Gleichung. Ein Vergleich in PHP wäre:

$passwort == "geheim"

Folgede Vergleichsoperatoren kennt PHP:

== ist gleich
!= ist ungleich
< ist kleiner als
> ist größer als
<= ist kleiner oder gleich
=> ist größer oder gleich

Das Ergebnis von Vergleichen ist immer ein boolscher Wert, kann also nur true oder false sein.

Die Vergleiche können auch aus mehreren Komponenten zusammengesetzt werden. Auch dann ist das Ergebnis jedoch immer ein boolscher Wert.

$nutzername == "meyer" && $passwort == "geheim"

Das Beispiel würde nur dann true werden, wenn Nutzername und (&&) Passwort übereinstimmen. Wenn auch nur eines nicht übereinstimmt, ergibt der Vergleich false. Die Vergleiche können also mit sogenannten logischen Opperatoren zusammengesetzt werden.

Folgede logische Opperatoren kennt PHP (nach ihrer Rangfolge):

&& und
|| oder
xor entweder oder
! nicht

|| ergibt bereits true wenn einer der beiden Verleiche stimmt. Hingegen verlangt xor, dass nur eines der beiden zustimmen darf.

Beispiel. Was ist das Ergebnis? (Auflösung am Ende der Seite)
$Beitrag1 = 501;
$Beitrag2 = 799;
$Beitrag3 = 400;
($Beitrag1 > 500) || ($Beitrag2 < 800) && !(Beitrag3 = = 400)

Hier ist die Rangfolge der Operatoren zu beachten!
&& immer vor ||


Bedingte Verzweigungen

IF

Mit der if Bedingung, kann man die Ausführung eines Programmcodes von dem Ergebnis eines Vergleiches abhängig machen. Die Vergleiche stehen hinter dem Schlüsselwort if in runden Klamern. Gefolgt wird dies durch einen Anweisungsblock aus geschweiften Klammern. Dieser Block wird dann ausgeführt, wenn wenn der Vergleich insgesamt true ergibt.

if ($wert < 0) {
...
}

Diese Anweisung kann erweitert werden um einen Anweisungsteil, der ausgeführt wird, wenn der Vergleich false ergibt.

else {…}

oder für weitere Fälle:

else if (vergleich){…}

IF-Bedingungen können auch ineinander geschachtelt werden.

Für einfache If-bedigungen gibt es eine Kurzform:
$erg = ($var1 < $var2) ? true : false;

Passwortabfrage:
if (($kennung == ”Paul”) && ($passwort == ”xxx”)) {
   echo „Paul, bist Du es?“;
}

SWITCH

Die switch Anweisung kann eine ganze Reihe von if- und else if-Anweisungen recht komfortabel zusammenfassen. Switch funktioniert dabei wie ein Verteiler, der in Abhängigkeit einer Variablen einen von verschiedenen Anweisungsblöcken ausführt.
Nach dem Schlüsselwort switch wird zunächst in runden Klammern die Variable genannt, die Zahlen, Zeichen oder auch Strings enthalten kann. Darauf folgt mit dem Schlüsselwort case der Wert mit dem die Variable verglichen werden soll und ein Doppelpunkt. Bis zum nächsten case Befehl folgen dann die Anweisungen, die mit einer Anweisungszeile break; abgeschlossen werden. Switch kann mit einem default Block beendet werden, der jedesmal aufgerufen wird, wenn kein case Vergleich zutrifft.

switch (variable) {
   case wert1:
      anweisungen;
      
break;
   case wert1:
      anweisungen;
      break;
   case wert1:
      anweisungen;
      break;

   default:
      anweisungen;
      
break;
}


Seiten zusammensetzen

INCLUDE

Mit Hilfe des include Befehls können Codebausteine in eine Seite eingesetzt werden. Der URL benennt den Verzeichnispfad der Ressource. Dies kann HTML oder PHP-Code sein. Bei include wird die Seite erst zusammengesetzt und dann vollständig interpretiert. Daher funktioniert include auch innehalb von Schleifen.

include(„URL“);

REQUIRE

require ist eine Alternative zu include. Der require Block wird jedoch im Unterschied dazu erst interpretiert und dann eingesetzt. require kann daher in Schleifen nicht verwendet werden.

require(„URL“);


Funktionen

Funktionen sind Bündelungen von Anweisungen, die unter einem Namen definiert und dann mehrfach aufgerufen werden können. Sie beginnen mit dem Schlüsselwort function gefolgt von dem frei vergebenen Namen (mit den üblichen Einschränkungen). Danach folgt ein Block mit Anweisungen in geschweiften Klammern, die abgearbeitet werden sollen, wenn die Funktion mit ihrem Namen an irgend einer Stelle des Programms aufgerufen wird.

Definition der Funktion Aufruf der Funktion
function name() {
      Anweisungen...
}
name();

Beim Aufruf einer Funktion können ihr Werte in den runden Klammern übergeben werden.

Definition der Funktion Aufruf der Funktion
function name($x) {
      Anweisungen...
}
name($x);

Funktionen in PHP können ein Ergebnis (nur eines) an die aufrufende Stelle zurückliefern. Dazu muß am Ende einer Funktion das Schlüsselwort return einen Wert (üblicher Weise mit einer Variablen) zurückliefern. return bewirkt, das die Funktion an dieser Stelle abbricht und zurückkehrt.

Definition der Funktion Aufruf der Funktion
function name() {
      Anweisungen...
      return $ergebnis
}
$ergebnis = name();

Call by Value

Bei der call-by-value Methode verändert die Funktion die Variablen des Hauptprogramms nicht. Das x-Inkrement ist nur innerhalb der Funktion gültig.

Definition der Funktion Aufruf der Funktion Ausgabe
function quadrat($x) {
$x++;
return $x*$x;
}

$a = 5;
$erg = quadrat($a);
echo $erg; 36
echo $a; 5

Call by Reference

Hier werden nicht die Werte (value), sondern die Speicheradressen der Variablen übergeben. Änderungen an den Variablen in der Funktion sind so auch im Hauptprogramm wirksam.

Definition der Funktion Aufruf der Funktion Ausgabe
function quadrat($x) {
$x++;
return $x*$x;
}

$a = 5;
$erg = quadrat(&$a);
echo $erg; 36
echo $a; 6

Auflösung:
Das Ergebnis ist: true ( 500) || ($Beitrag2 < 800) && !(Beitrag3 == 400); ?>)