Rechnernetze / Kommunikationssysteme

Praktikumsversuch PHP

Dieses Praktikum dient der praktischen Erprobung von PHP.

Entwicklungsserver

Zum Testen der eigenen PHP-Programme kann ein lokaler Server verwendet werden (VSCode, XAMPP, php -S). Das fertige Programm kann über den Webserver der Fakultät Informatik/Mathematik genutzt werden.

Aufgabe 1: PHP-Datei erstellen

Erstellen Sie die Datei hallo.php mit folgendem Inhalt:

Aufgabe 2: Formularverarbeitung

Aufgabe 3: SQLite

// SQL-Befehl zur Erstellung der Tabelle
$sql = <<<SQL
CREATE TABLE IF NOT EXISTS aufgaben (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    aufgabe TEXT NOT NULL,
    erstellt DATETIME DEFAULT CURRENT_TIMESTAMP
);
SQL;

Datenbanknutzung

SQL-Aufgaben

  1. Auslesen von Daten: SELECT Vorname, Nachname FROM tbl_user
  2. Einfügen von Daten: INSERT
  3. Löschen von Daten: DELETE
  4. Ändern von Daten: UPDATE
// absoluter Pfad des aktuellen Arbeitsverzeichnisses
$dbFile = __DIR__ . '/scores.db';  
// Nutzung des PDP-Interfaces mit dem SQlite-Treiber
try {
  $pdo = new PDO('sqlite:' . $dbFile);
  // Options
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        // Exceptions on
  $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_ASSOC); // fetch mit asssoziativem Array
  } catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Datenbank‑Fehler: ' . $e->getMessage()]);
    exit;
}
  
// Tabelle anlegen
// Heredoc‑Syntax mit Kennung SQL
$createTableSQL = <<<SQL
CREATE TABLE IF NOT EXISTS scores (
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    name       TEXT NOT NULL UNIQUE,
    points     INTEGER NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
SQL;
$pdo->exec($createTableSQL);


// 1. Direktes Query (SELECT)
foreach ($pdo->query('SELECT id, name FROM users') as $row) {
    echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
}

// 2. Exec (INSERT/UPDATE/DELETE ohne Rückgabe)
$affected = $pdo->exec('DELETE FROM sessions WHERE expires < datetime(\'now\')');

// 3. Prepared Statement mit benannten Parametern
$stmt = $pdo->prepare('SELECT * FROM posts WHERE author = :author AND created > :date');
$stmt->execute([':author' => $author, ':date' => $date]);
$posts = $stmt->fetchAll();   // bereits assoziativ dank DEFAULT_FETCH_MODE

// 4. Transaktion
$pdo->beginTransaction();
try {
    $pdo->exec('INSERT INTO orders (user_id,total) VALUES (1,99.95)');
    $pdo->exec('UPDATE users SET balance = balance - 99.95 WHERE id = 1');
    $pdo->commit();
} catch (PDOException $e) {
    $pdo->rollBack();
    throw $e; // oder loggen
}

// 5. Letzte Insert‑ID
$newId = $pdo->lastInsertId();



Literatur

Fakultativ

Die aktuelle Version ist nicht sicher gegen SQL-Injection, weil wir direkt den Text in die SQL-Anweisung einfügen. 👉 Zukunftsaufgabe: Ersetze die INSERT-Anweisung durch PDO mit Prepared Statements.


Letzte Änderung: 11. March 2026 17:07