Web-Entwicklung mit PHP

Vordefinierte assoziative Arrays

  • $GLOBALS alle globalen Variablen
  • $_COOKIE alle Cookies für diesen Server
  • $_GET per GET übermittelten Formulardaten
  • $_POST per POST übermittelten Formulardaten
  • $_FILES Infos über mit POST hochgeladene Dateien
  • $_ENV Umgebungsvariablen des Systems
  • $_SERVER Umgebungsvariablen des Web-Server
  • $_REQUEST Daten vom Client ($_GET + $_POST)

Zugriff auf Formulardaten

Zugriff auf Formulardaten über Arrays

  • $_GET für per GET übertragene Parameter
  • $_POST für per POST übertragene Parameter
  • $_REQUEST für beide Arten
  • Query-String ist bereits von PHP dekodiert worden
  • Name des Formularelements dient als Index, z. B.
    $_POST["vorname"]
  • Daten sind immer Strings, müssen nach Bedarf umgewandelt werden

Beispiel: Formularelemente

<!DOCTYPE html>
<html>
<head><title>Formular</title></head>
<body>
<form action="#" method="POST">
  <input type="text" name="vorname"/><input type="submit" name="Absenden"/>
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
    $params = $_GET;
}
else if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $params = $_POST;
}
if (isset( $params["vorname"])) {
    echo "Hallo ", $params["vorname"];
}
?>
</body></html>
<!DOCTYPE html>
<html>
<head><title>Formular</title></head>
<body>
<form action="#" method="POST">
  <input type="text" name="vorname"/><input type="submit" name="Absenden"/>
</form>
<?php
echo "Hallo ", $_REQUEST["vorname"];
?>
</body></html>

Mehrfachauswahl

Manche Formularfelder erlauben eine Mehrfachauswahl

Im $_POST-, $_GET-Array steht dann aber nur der letzte Wert

Ausweg: Feldnamen mit [] enden lassen

  • Browser und Web-Server ignorieren die Klammer
  • PHP weiß, dass eine Mehrfachauswahl möglich ist
  • Daten werden als Array in $_REQUEST bzw. $_POST oder $_GET gespeichert

Beispiel: Einfachauswahl

<!DOCTYPE html>
<html><head><title>Formular</title></head><body>
<form action="#" method="POST">
  <input type="checkbox" name="obst" value="orange"> Orange
  <input type="checkbox" name="obst" value="apfel"> Apfel
  <input type="checkbox" name="obst" value="birne"> Birne
  <input type="submit" name="Absenden"/>
</form>

<?php
$obst = $_POST["obst"];
print_r($obst); // -> birne
?>

</body></html>

Beispiel: Mehrfachauswahl

<!DOCTYPE html>
<html><head><title>Formular</title></head><body>
<form action="#" method="POST">
  <input type="checkbox" name="obst[]" value="orange"> Orange
  <input type="checkbox" name="obst[]" value="apfel"> Apfel
  <input type="checkbox" name="obst[]" value="birne"> Birne
  <input type="submit" name="Absenden"/>
</form>

<?php
$obst = $_POST["obst"];
print_r($obst);
// -> Array ( [0] => orange [1] => apfel [2] => birne )
?>

</body></html>

Formulare und Sicherheit

Man kann sich nicht sicher sein, welche Daten übermittelt werden

  • deshalb nie die übermittelten Parameter auswerten,
  • sondern immer die erwarteten Parameter
// Pfui!
foreach ($_POST as $key => $value) {
    $datensatz[$key] = $value;
}

// Besser
if (isset ($_POST["feld1"]) && is_numeric($_POST["feld1"])) {
    $datensatz["feld1"] = $_POST["feld1"];
}

Überprüfung auf unerwünschte Zeichen

Daten vom Browser sollten überprüft werden

  • Unerwünschte Zeichen ausfiltern
  • Wiederholung client-seitiger Überprüfungen
  • Am einfachsten über Reguläre Ausdrücke
    bool preg_match ($pattern, $subject);

$_SERVER-Array

Enthält Informationen zur Server- und Ablaufumgebung

  • Aufgerufene URL
  • Header aus dem HTTP-Request
  • Informationen zum Server
  • Informationen zum Client

Beispiel: $_SERVER

http://jonathan.sv.hs-mannheim.de/~t.smits/test.php?obst=orange&name=Franz

[HTTP_HOST] => jonathan.sv.hs-mannheim.de
[HTTP_USER_AGENT] => Mozilla/5.0 Safari/534.57.2
[HTTP_ACCEPT] => text/html,application/xhtml+xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => de-de
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_CONNECTION] => keep-alive
[PATH] => /sbin:/usr/sbin:/bin:/usr/bin
[SERVER_SIGNATURE] => Server at jonathan.sv.hs-mannheim.de Port 80
[SERVER_SOFTWARE] => Apache/2.2.8 (Fedora)
[SERVER_NAME] => jonathan.sv.hs-mannheim.de
[SERVER_ADDR] => 141.19.141.151
[SERVER_PORT] => 80
[REMOTE_ADDR] => 158.23.13.33
http://jonathan.sv.hs-mannheim.de/~t.smits/test.php?obst=orange&name=Franz

[DOCUMENT_ROOT] => /var/www/html
[SERVER_ADMIN] => m.plugge@hs-mannheim.de
[SCRIPT_FILENAME] => /home/t.smits/public_html/test.php
[REMOTE_PORT] => 51698
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => obst=orange&name=Franz
[REQUEST_URI] => /~t.smits/test.php?obst=orange&name=Franz
[SCRIPT_NAME] => /~t.smits/test.php
[PHP_SELF] => /~t.smits/test.php
[REQUEST_TIME] => 1342605376

Erzeugung einer URL-Parameterliste

Regeln für GET-Parameter

  • Werden mit ? an die URL angehängt
  • Jeder Parameter hat das Format name=wert
  • Parameter werden durch & getrennt
  • Sonderzeichen müssen escaped werden

Erzeugung wird erleichtert durch die Funktion
http_build_query($parameterArray);

Beispiel: http_build_query

$query = http_build_query(
        array ("obst" => "Apfel",
               "name" => "Franz",
                "spruch" => "Ehrlich währt am längsten"));

echo $query;
obst=Apfel&name=Franz&spruch=Ehrlich+w%C3%A4hrt+am+l%C3%A4ngsten

Zerlegen eines Query-Strings

Empfangener Query-String kann wieder zerlegt werden
parse_str($query, $output);

$query = "obst=Apfel&name=Franz" .
     "&spruch=Ehrlich+w%C3%A4hrt+am+l%C3%A4ngsten";
parse_str($query, $output);

print_r($output);
Array
(
    [obst] => Apfel
    [name] => Franz
    [spruch] => Ehrlich währt am längsten
)

Parsen einer URL

Eine empfangene URL kann wieder zerlegt werden
$ergebnis = parse_url($url);

$url = "http://www.web.de/index.html?obst=Apfel&name=Franz" .
       "&spruch=Ehrlich+w%C3%A4hrt+am+l%C3%A4ngsten";
$a = parse_url($url);
print_r($a);
Array
(
    [scheme] => http
    [host] => www.web.de
    [path] => /index.html
    [query] => obst=Apfel&name=Franz&spruch=Ehrlich+w%C3%A4hrt+am+l%C3%A4ngsten
)

Copyright © 2025 Thomas Smits