Skip to content

Anhang: PHP Kernwissen Zusammenfassung

1. Syntax-Spickzettel (Kurzreferenz)

Grundlegende Syntax

php
<?php
    // 1. PHP-Tags
    // Empfohlen: <?php ... ?>
    
    // 2. Kommentare
    // Einzeiliger Kommentar
    # Auch möglich (Shell-Style)
    /*
       Mehrzeiliger Kommentar
    */
    
    // 3. Variablen (immer mit $ beginnen)
    $name = "Max";
    $alter = 25;
    $ist_aktiv = true;
    
    // 4. Konstanten
    define("SITE_NAME", "Meine Webseite");
    const VERSION = "1.0.0";
    
    // 5. Ausgabe
    echo "Hallo Welt!";
    print "Hallo!";  // Gibt immer 1 zurück
    var_dump($variable);  // Typ und Wert anzeigen (Debug)
    print_r($array);       // Array lesbar ausgeben
?>

Datentypen

DatentypBeschreibungBeispiel
StringZeichenkette"Hallo", 'Welt'
IntegerGanzzahl42, -10
FloatGleitkommazahl3.14, -2.5
BooleanWahrheitswerttrue, false
ArrayArray (Liste)[1, 2, 3], array("a", "b")
ObjectObjekt (Klasseninstanz)new stdClass()
NULLKein Wertnull

Operatoren

OperatorBeschreibungBeispiel
+ - * / %Arithmetisch$a + $b
++ --Inkrement/Dekrement$i++
= += -= .=Zuweisung$a = 5
== === != !==Vergleich$a == $b
> < >= <=Vergleich$a > $b
**&& `!`**
? :Ternär$ergebnis = ($a > $b) ? "größer" : "kleiner"

Kontrollstrukturen

php
<?php
    // 1. if/elseif/else
    if ($alter >= 18) {
        echo "Volljährig";
    } elseif ($alter >= 16) {
        echo "Fast volljährig";
    } else {
        echo "Minderjährig";
    }
    
    // 2. switch/case
    switch ($tag) {
        case 1:
            echo "Montag";
            break;
        case 2:
            echo "Dienstag";
            break;
        default:
            echo "Ungültiger Tag";
    }
    
    // 3. while-Schleife
    $i = 1;
    while ($i <= 10) {
        echo $i . " ";
        $i++;
    }
    
    // 4. do-while-Schleife
    do {
        echo $i . " ";
        $i++;
    } while ($i <= 10);
    
    // 5. for-Schleife
    for ($i = 1; $i <= 10; $i++) {
        echo $i . " ";
    }
    
    // 6. foreach-Schleife (für Arrays)
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    foreach ($fruechte as $frucht) {
        echo $frucht . " ";
    }
    
    // 7. break/continue
    for ($i = 1; $i <= 10; $i++) {
        if ($i == 5) {
            continue;  // Springt zur nächsten Iteration
        }
        if ($i == 8) {
            break;     // Beendet die Schleife
        }
        echo $i . " ";  // Ausgabe: 1 2 3 4 6 7
    }
?>

Funktionen

php
<?php
    // 1. Funktion definieren
    function begruesse($name) {
        return "Hallo " . $name . "!";
    }
    
    // 2. Funktion aufrufen
    echo begruesse("Max");  // Ausgabe: Hallo Max!
    
    // 3. Funktion mit Standardparameter
    function begruessePerson($name, $alter = 25) {
        echo "Name: $name, Alter: $alter";
    }
    
    begruessePerson("Max");      // Name: Max, Alter: 25
    begruessePerson("Max", 30);  // Name: Max, Alter: 30
    
    // 4. Rückgabetyp deklarieren (PHP 7+)
    function addiere(int $a, int $b): int {
        return $a + $b;
    }
?>

Arrays

php
<?php
    // 1. Index-Array
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    echo $fruechte[0];  // Apfel
    
    // 2. Assoziatives Array
    $person = [
        "name" => "Max",
        "alter" => 25,
        "stadt" => "Berlin"
    ];
    echo $person["name"];  // Max
    
    // 3. Mehrdimensionale Arrays
    $schueler = [
        ["name" => "Max", "note" => 1.0],
        ["name" => "Anna", "note" => 1.3]
    ];
    echo $schueler[0]["name"];  // Max
    
    // 4. Array-Funktionen
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    array_push($fruechte, "Orange");  // Element hinzufügen
    $letztes = array_pop($fruechte);      // Letztes Element entfernen
    count($fruechte);                      // Anzahl Elemente
    sort($fruechte);                       // Aufsteigend sortieren
    rsort($fruechte);                       // Absteigend sortieren
?>

Formulare und Benutzerinteraktion

php
<?php
    // 1. GET-Methode
    // URL: verarbeite.php?name=Max&alter=25
    $name = $_GET['name'];
    $alter = $_GET['alter'];
    
    // 2. POST-Methode
    $name = $_POST['name'];
    $alter = $_POST['alter'];
    
    // 3. Superglobal $_REQUEST (GET + POST + COOKIE - nicht empfohlen!)
    $name = $_REQUEST['name'];
    
    // 4. Formulardaten validieren
    $name = trim($_POST['name'] ?? '');
    if (empty($name)) {
        $fehler[] = "Name darf nicht leer sein.";
    }
    
    // 5. XSS-Schutz (htmlspecialchars)
    echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
?>

Sessions und Cookies

php
<?php
    // 1. Session starten
    session_start();
    
    // 2. Session-Variable setzen
    $_SESSION['benutzer'] = "Max";
    $_SESSION['eingeloggt'] = true;
    
    // 3. Session-Variable auslesen
    $benutzer = $_SESSION['benutzer'];
    
    // 4. Session zerstören (Logout)
    session_destroy();
    
    // 5. Cookie setzen
    setcookie("benutzer", "Max", time() + 3600);  // 1 Stunde gültig
    
    // 6. Cookie auslesen
    $benutzer = $_COOKIE['benutzer'];
    
    // 7. Cookie löschen
    setcookie("benutzer", "", time() - 3600);
?>

Datenbank (MySQL) mit mysqli

php
<?php
    // 1. Verbindung herstellen
    $conn = new mysqli("localhost", "root", "", "meine_datenbank");
    if ($conn->connect_error) {
        die("Verbindungsfehler: " . $conn->connect_error);
    }
    $conn->set_charset("utf8mb4");
    
    // 2. INSERT (Prepared Statement - sicher!)
    $sql = "INSERT INTO benutzer (name, email) VALUES (?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", $name, $email);
    $stmt->execute();
    
    // 3. SELECT (Prepared Statement - sicher!)
    $sql = "SELECT * FROM benutzer WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        echo $row['name'];
    }
    
    // 4. UPDATE (Prepared Statement)
    $sql = "UPDATE benutzer SET email = ? WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("si", $neue_email, $id);
    $stmt->execute();
    
    // 5. DELETE (Prepared Statement)
    $sql = "DELETE FROM benutzer WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
    
    // 6. Verbindung schließen
    $conn->close();
?>

Datei-Upload

php
<?php
    // 1. Formular (HTML)
    // <form method="post" action="upload.php" enctype="multipart/form-data">
    //     <input type="file" name="datei">
    // </form>
    
    // 2. Datei-Upload verarbeiten (PHP)
    if ($_FILES['datei']['error'] === 0) {
        $dateiname = $_FILES['datei']['name'];
        $dateigroesse = $_FILES['datei']['size'];
        $tmp_name = $_FILES['datei']['tmp_name'];
        
        // Datei validieren (Größe, Typ, etc.)
        $max_groesse = 5 * 1024 * 1024;  // 5MB
        if ($dateigroesse > $max_groesse) {
            die("Datei ist zu groß!");
        }
        
        $erlaubte_typen = ['image/jpeg', 'image/png', 'image/gif'];
        if (!in_array($_FILES['datei']['type'], $erlaubte_typen)) {
            die("Ungültiger Dateityp!");
        }
        
        // Datei verschieben
        $ziel_pfad = "uploads/" . uniqid() . "_" . $dateiname;
        move_uploaded_file($tmp_name, $ziel_pfad);
        echo "Datei erfolgreich hochgeladen!";
    }
?>

2. Häufig verwendete Funktionen (Spickzettel)

String-Funktionen

FunktionBeschreibungBeispiel
strlen($str)Länge des Stringsstrlen("Hallo")5
strtolower($str)In Kleinbuchstabenstrtolower("Hallo")"hallo"
strtoupper($str)In Großbuchstabenstrtoupper("hallo")"HALLO"
ucfirst($str)Ersten Buchstaben großucfirst("hallo")"Hallo"
ucwords($str)Jeden Wortanfang großucwords("hallo welt")"Hallo Welt"
trim($str)Leerzeichen entfernentrim(" Hallo ")"Hallo"
ltrim($str)Leerzeichen links entfernenltrim(" Hallo")"Hallo"
rtrim($str)Leerzeichen rechts entfernenrtrim("Hallo ")"Hallo"
substr($str, $start, $laenge)Teilstring extrahierensubstr("Hallo", 0, 3)"Hal"
strpos($str, $suche)Position suchenstrpos("Hallo", "l")2
str_replace($suche, $ersatz, $str)Ersetzenstr_replace("Hallo", "Welt", "Hallo")"Welt"
explode($trenner, $str)String in Array aufteilenexplode(",", "a,b,c")['a', 'b', 'c']
implode($trenner, $arr)Array in String zusammenfügenimplode(",", ['a', 'b', 'c'])"a,b,c"

Array-Funktionen

FunktionBeschreibungBeispiel
count($arr)Anzahl Elementecount([1, 2, 3])3
array_push($arr, $element)Element hinzufügenarray_push($arr, 4)
array_pop($arr)Letztes Element entfernenarray_pop($arr)
array_shift($arr)Erstes Element entfernenarray_shift($arr)
array_unshift($arr, $element)Element am Anfang hinzufügenarray_unshift($arr, 0)
sort($arr)Aufsteigend sortierensort($arr)
rsort($arr)Absteigend sortierenrsort($arr)
asort($arr)Assoziatives Array nach Werten sortierenasort($arr)
ksort($arr)Assoziatives Array nach Schlüsseln sortierenksort($arr)
array_merge($arr1, $arr2)Arrays zusammenfügenarray_merge([1, 2], [3, 4])[1, 2, 3, 4]
array_reverse($arr)Array umkehrenarray_reverse([1, 2, 3])[3, 2, 1]
in_array($element, $arr)Prüfen, ob Element existiertin_array(2, [1, 2, 3])true
array_search($element, $arr)Schlüssel suchenarray_search(2, [1, 2, 3])1

Datum/Zeit-Funktionen

FunktionBeschreibungBeispiel
time()Aktueller Unix-Timestamptime()1653567890
date($format)Datum/Zeit formatierendate("d.m.Y H:i:s")"26.05.2024 14:30:00"
strtotime($datum_string)String in Timestamp umwandelnstrtotime("2024-05-26 14:30:00")1653568200
mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr)Timestamp erstellenmktime(14, 30, 0, 5, 26, 2024)1653568200

Datenbank-Funktionen (mysqli)

FunktionBeschreibung
$conn->query($sql)SQL-Abfrage ausführen (nicht sicher!)
$conn->prepare($sql)Prepared Statement vorbereiten (sicher!)
$stmt->bind_param(...)Parameter an Prepared Statement binden
$stmt->execute()Prepared Statement ausführen
$stmt->get_result()Ergebnis abrufen (bei SELECT)
$result->fetch_assoc()Nächsten Datensatz als assoziatives Array abrufen
$result->num_rowsAnzahl Datensätze
$stmt->affected_rowsBetroffene Zeilen (bei UPDATE/DELETE)
$stmt->insert_idID des neu eingefügten Datensatzes (bei INSERT)
$conn->close()Verbindung schließen

3. Fehlerbehebung (Troubleshooting)

Häufige Fehler und Lösungen

FehlerUrsacheLösung
Leere Seite (White Screen of Death)PHP-Fehler werden nicht angezeigterror_reporting(E_ALL); ini_set('display_errors', 1); (in Entwicklungsumgebung)
500 Internal Server ErrorSyntaxfehler, ServerkonfigurationsfehlerFehlerprotokoll (Error Log) prüfen
"Connection failed" (Datenbank)Falsche Zugangsdaten, MySQL läuft nichtZugangsdaten prüfen, MySQL starten
Formulardaten nicht empfangenFalsche Methode ($_GET vs. $_POST), enctype bei Datei-Upload vergessenMethode prüfen, enctype="multipart/form-data" hinzufügen
Zeichenkaos (Umlaute falsch)Zeichenkodierung nicht auf UTF-8header('Content-Type: text/html; charset=utf-8');, <meta charset="UTF-8">, mysqli_set_charset($conn, "utf8mb4")
Upload fehlgeschlagenupload_max_filesize oder post_max_size zu klein, falsche Berechtigungenphp.ini anpassen, Berechtigungen prüfen (chmod 755)
Session-Probleme (Login-Status verloren)session_start() vergessen, Session-Cookie wird nicht übertragensession_start() ganz oben hinzufügen, Cookie-Einstellungen prüfen

Fehlerprotokollierung (Logging)

php
<?php
    // Fehler in Datei protokollieren
    error_log("Dies ist eine Fehlermeldung.", 3, "/pfad/zu/error.log");
    
    // Fehler per E-Mail senden
    error_log("Dies ist eine Fehlermeldung.", 1, "admin@example.com");
    
    // Benutzerdefiniertes Logging
    function logMessage(string $message, string $level = 'INFO'): void {
        $datum = date('Y-m-d H:i:s');
        $logMessage = "[$datum] [$level] $message" . PHP_EOL;
        file_put_contents('/pfad/zu/app.log', $logMessage, FILE_APPEND);
    }
    
    logMessage("Benutzer eingeloggt: " . $benutzername);
    logMessage("Fehler beim Speichern!", "ERROR");
?>

4. Lernpfad (Nächste Schritte)

Sie haben die PHP-Grundlagen gemeistert! Was nun?

  1. Praxis, Praxis, Praxis!

    • Bauen Sie eigene Projekte (To-Do-Liste, Blog, kleines Shop-System).
    • Versuchen Sie, Probleme zu lösen, die Sie interessieren.
  2. Lernen Sie ein PHP-Framework.

    • Laravel (sehr beliebt, modern, MVC-Architektur).
    • Symfony (wiederum sehr beliebt, komponentenbasiert).
    • CodeIgniter (leichter, einfacher zu lernen).
  3. Lernen Sie fortgeschrittene PHP-Konzepte.

    • Objektorientierte Programmierung (OOP) in PHP (Klassen, Vererbung, Polymorphismus, Abstraktion).
    • Namespaces.
    • Traits.
    • Interfaces und Abstrakte Klassen.
    • Ausnahmebehandlung (Try-Catch).
    • Autoloading (PSR-4, Composer).
  4. Lernen Sie über Web-Sicherheit.

    • OWASP Top 10 (die 10 kritischsten Sicherheitsrisiken für Webanwendungen).
    • SQL-Injection, XSS, CSRF, etc.
  5. Lernen Sie Frontend-Technologien.

    • HTML, CSS (Bootstrap oder Tailwind CSS für schnelles Design).
    • JavaScript (und beliebte Frameworks wie React, Vue.js oder Angular).
  6. Lernen Sie Versionskontrolle (Git).

    • Git ist unverzichtbar für moderne Softwareentwicklung.
  7. Tragen Sie zu Open-Source bei!

    • Suchen Sie auf GitHub nach PHP-Projekten, die Sie interessieren.
    • Versuchen Sie, Fehler zu beheben oder Funktionen hinzuzufügen.

Zusammenfassung

Dieser Anhang dient als:

  • Syntax-Spickzettel (Kurzreferenz)
  • Funktions-Referenz (häufig verwendete Funktionen)
  • Fehlerbehebungs-Guide (häufige Fehler und Lösungen)
  • Lernpfad (nächste Schritte für Ihre PHP-Reise)

Viel Erfolg und viel Spaß beim weiteren Lernen von PHP! 🚀

Frei für alle Anfänger