Appearance
Kapitel 3: Web-Grundlagen und PHP-Funktionsweise
3.1 Webseiten-Ablauf (Browser → Server → PHP → Browser)
Wie eine PHP-Seite funktioniert:
[Browser (Client)]
↓ (Anfrage: http://localhost/index.php)
[Webserver (Apache)]
↓ (erkennt .php Datei)
[PHP-Parser]
↓ (führt PHP-Code aus)
[Datenbank (optional)]
↓ (gibt Ergebnis zurück)
[PHP-Parser] (generiert HTML)
↓ (sendet HTML an Browser)
[Browser (Client)]
↓ (zeigt Webseite an)Detaillierter Ablauf:
- Benutzer gibt URL ein:
http://localhost/index.php - Browser sendet Anfrage an den Webserver (Apache)
- Apache erkennt: Das ist eine PHP-Datei (Endung
.php) - Apache übergibt die Datei an den PHP-Parser
- PHP-Parser führt den PHP-Code aus:
- Datenbankabfragen werden ausgeführt
- Berechnungen durchgeführt
- HTML wird generiert
- PHP-Parser sendet das Ergebnis (meist HTML) zurück an Apache
- Apache sendet das HTML an den Browser
- Browser zeigt die Webseite an
Wichtig: Der Benutzer sieht niemals den PHP-Code! Nur das generierte HTML wird angezeigt.
3.2 PHP-Dateistruktur, Kommentarschreibweise
Grundstruktur einer PHP-Datei
php
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>PHP-Seite</title>
</head>
<body>
<h1>Überschrift</h1>
<?php
// Hier steht PHP-Code
echo "Dies wird vom PHP-Parser ausgeführt";
?>
<p>HTML-Code ausserhalb von PHP-Tags</p>
<?php
// Noch mehr PHP-Code
$name = "Welt";
echo "<p>Hallo $name!</p>";
?>
</body>
</html>PHP-Tags
| Tag | Beschreibung | Empfehlung |
|---|---|---|
<?php ... ?> | Standard-Tag | ✅ Immer verwenden |
<? ... ?> | Kurz-Tag (erfordert Konfiguration) | ❌ Nicht empfohlen |
<% ... %> | ASP-Style (veraltet) | ❌ Nicht verwenden |
<script language="php"> ... </script> | Script-Tag (veraltet) | ❌ Nicht verwenden |
Kommentare in PHP
php
<?php
// Das ist ein einzeiliger Kommentar (bevorzugt)
# Auch möglich (Shell-Style), aber seltener
/*
Das ist ein mehrzeiliger Kommentar
Er kann sich über mehrere Zeilen erstrecken
*/
/**
* Das ist ein Dokumentations-Kommentar (PHPDoc)
* Wird für automatische Dokumentation verwendet
*
* @param string $name Der Name
* @return string Die Begrüssung
*/
function begruessung($name) {
return "Hallo " . $name;
}
?>3.3 Ausgabeanweisungen: echo / print / var_dump
echo (am häufigsten verwendet)
php
<?php
// Einfache Ausgabe
echo "Hallo Welt!";
// Mehrere Parameter (durch Kommas getrennt)
echo "Hallo ", "Welt", "!";
// Ausgabe von Variablen
$name = "PHP";
echo "Willkommen bei " . $name;
// Ausgabe von HTML
echo "<h1>Überschrift</h1>";
echo "<p>Absatz</p>";
// Kein Rückgabewert (kein echo in Zuweisungen)
?>print (ähnlich wie echo, aber mit Rückgabewert)
php
<?php
// Einfache Ausgabe
print "Hallo Welt!";
// Rückgabewert: immer 1
$ergebnis = print "Hallo"; // $ergebnis wird 1 sein
// Nur ein Parameter erlaubt (keine Kommas)
print "Hallo " . "Welt!"; // OK (Verknüpfung mit Punkt)
// print "Hallo ", "Welt!"; // FEHLER!
?>Unterschied zwischen echo und print
| Merkmal | echo | |
|---|---|---|
| Rückgabewert | Keiner | Immer 1 |
| Mehrere Parameter | Ja (Kommas) | Nein |
| Geschwindigkeit | Etwas schneller | Etwas langsamer |
| Empfehlung | ✅ Standard | ⚠️ Nur wenn Rückgabewert benötigt |
var_dump() (für Debugging)
php
<?php
$name = "PHP";
$alter = 25;
$ist_aktiv = true;
// var_dump gibt Typ und Wert aus (perfekt zum Debuggen)
var_dump($name); // string(3) "PHP"
var_dump($alter); // int(25)
var_dump($ist_aktiv); // bool(true)
// Auch für Arrays
$fruechte = array("Apfel", "Banane", "Kirsche");
var_dump($fruechte);
// array(3) { [0]=> string(5) "Apfel" ... }
// Ausgabe formatieren
echo "<pre>";
var_dump($fruechte);
echo "</pre>";
?>print_r() (für Arrays und Objekte)
php
<?php
$person = array(
"name" => "Max",
"alter" => 30,
"stadt" => "Berlin"
);
// print_r gibt lesbare Struktur aus
print_r($person);
/* Ausgabe:
Array
(
[name] => Max
[alter] => 30
[stadt] => Berlin
)
*/
// Auch für Objekte
$obj = new stdClass();
$obj->name = "Test";
print_r($obj);
?>3.4 Kodierungsprobleme (UTF-8 löst Zeichenchaos)
Das Problem: Zeichenchaos (乱码)
Symptome:
- Umlaute (ä, ö, ü, ß) werden falsch dargestellt
- Chinesische Zeichen werden zu Fragezeichen
- Sonderzeichen sehen seltsam aus
Ursache: Die Kodierung des PHP-Scripts stimmt nicht mit der vom Browser erwarteten Kodierung überein.
Lösung 1: PHP-Datei in UTF-8 speichern
In VS Code:
- Unten rechts auf "UTF-8" klicken
- "Save with Encoding" wählen
- "UTF-8" auswählen
Lösung 2: HTML-Header setzen
php
<?php
// Ganz oben in der PHP-Datei
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Kodierungsproblem gelöst</title>
</head>
<body>
<p>Ä Ö Ü ß werden jetzt richtig angezeigt!</p>
</body>
</html>Lösung 3: PHP-Standardkodierung setzen
In php.ini:
ini
; Kodierung für PHP-Skripte
default_charset = "UTF-8"
; Eingabe-Kodierung
input_encoding = UTF-8
; Interne Kodierung
internal_encoding = UTF-8
; Ausgabe-Kodierung
output_encoding = UTF-8Lösung 4: Datenbank-Verbindung auf UTF-8 setzen
php
<?php
$conn = mysqli_connect("localhost", "user", "password", "datenbank");
// Nach der Verbindung: UTF-8 setzen
mysqli_set_charset($conn, "utf8");
// Oder:
mysqli_query($conn, "SET NAMES 'utf8'");
?>Häufige Kodierungsprobleme und Lösungen
| Problem | Lösung |
|---|---|
| Umlaute falsch | <meta charset="UTF-8"> hinzufügen |
| Datenbank gibt falsche Zeichen zurück | mysqli_set_charset($conn, "utf8") |
| PHP-Datei selbst hat falsche Kodierung | Datei in UTF-8 speichern |
| Browser erzwingt falsche Kodierung | header('Content-Type: text/html; charset=utf-8') |
3.5 Praxis: Eine einfache Webseite schreiben
Aufgabe: Erstellen Sie eine einfache Begrüssungsseite mit PHP und HTML.
Schritt 1: Datei erstellen
- Erstellen Sie
begruessung.phpinC:\xampp\htdocs\php_kurs\
Schritt 2: Code schreiben
php
<?php
// Kodierung setzen
header('Content-Type: text/html; charset=utf-8');
// Variablen definieren
$name = "Besucher";
$uhrzeit = date("H");
// Begrüssung je nach Tageszeit
if ($uhrzeit < 12) {
$begruessung = "Guten Morgen";
} elseif ($uhrzeit < 18) {
$begruessung = "Guten Tag";
} else {
$begruessung = "Guten Abend";
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Begrüssungsseite</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 50px auto;
padding: 20px;
background-color: #f0f0f0;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
}
.info {
background: #e3f2fd;
padding: 15px;
border-radius: 5px;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1><?php echo $begruessung . ", " . $name . "!"; ?></h1>
<p>Dies ist eine einfache Webseite mit PHP und HTML.</p>
<div class="info">
<h3>Informationen:</h3>
<p>Aktuelle Uhrzeit: <?php echo date("H:i:s"); ?></p>
<p>Heutiges Datum: <?php echo date("d.m.Y"); ?></p>
<p>Server: <?php echo $_SERVER['SERVER_SOFTWARE']; ?></p>
<p>Ihr Browser: <?php echo $_SERVER['HTTP_USER_AGENT']; ?></p>
</div>
<hr>
<h3>PHP-Info:</h3>
<p>PHP-Version: <?php echo phpversion(); ?></p>
<p>Betriebssystem: <?php echo PHP_OS; ?></p>
</div>
</body>
</html>Schritt 3: Im Browser testen
- Öffnen Sie
http://localhost/php_kurs/begruessung.php - Sie sollten die Begrüssungsseite sehen ✅
Zusammenfassung
In diesem Kapitel haben Sie:
- ✅ Verstanden, wie PHP funktioniert (Browser → Server → PHP → Browser)
- ✅ Die Struktur einer PHP-Datei gelernt
- ✅ Kommentare und PHP-Tags kennengelernt
- ✅ Ausgabeanweisungen (echo, print, var_dump) verwendet
- ✅ Kodierungsprobleme (UTF-8) gelöst
- ✅ Eine einfache Webseite mit PHP erstellt
Nächstes Kapitel: Wir werden Variablen, Konstanten und Datentypen lernen.
Übungsaufgaben:
- Erstellen Sie eine PHP-Seite, die den Namen des Benutzers begrüsst
- Zeigen Sie das aktuelle Datum und die Uhrzeit an
- Verwenden Sie
var_dump(), um den Typ einer Variablen zu prüfen - Lösen Sie ein Kodierungsproblem (erzeugen Sie absichtlich falsche Kodierung und korrigieren Sie es)
Häufige Fehler:
- ❌ PHP-Code direkt im Browser öffnen → Immer über
http://localhost/...aufrufen - ❌
<? ... ?>Tags verwenden → Immer<?php ... ?>verwenden - ❌ Kodierung nicht setzen → Immer
<meta charset="UTF-8">oderheader('Content-Type: text/html; charset=utf-8')verwenden
