Mysql Script: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Dynamische Webseiten mit PHP und MySQL – Prinzip = == Einführung == * Dynamische Webseiten generieren Inhalte zur Laufzeit, abhängig von Benutzereingabe…“)
(kein Unterschied)

Version vom 15. März 2025, 10:20 Uhr

Dynamische Webseiten mit PHP und MySQL – Prinzip

Einführung

  • Dynamische Webseiten generieren Inhalte zur Laufzeit, abhängig von Benutzereingaben oder Datenbankinformationen.
  • PHP als serverseitige Skriptsprache verarbeitet Anfragen und interagiert mit einer MySQL/MariaDB-Datenbank.
  • Im Gegensatz zu statischen HTML-Seiten können Inhalte aktualisiert, gefiltert und personalisiert werden.

Architektur einer dynamischen Webseite

  • Ein typischer Aufbau besteht aus drei Hauptkomponenten:
    • Client – Webbrowser sendet Anfragen an den Server.
    • Webserver – Nginx oder Apache verarbeitet PHP-Skripte.
    • Datenbank – MySQL/MariaDB speichert und liefert Inhalte.
  • Ablauf einer Anfrage:
    • Nutzer ruft eine URL auf → Anfrage wird an den Webserver gesendet.
    • Webserver führt das PHP-Skript aus → PHP verarbeitet Eingaben.
    • PHP stellt eine Verbindung zur MySQL-Datenbank her und holt Daten.
    • PHP generiert HTML-Code basierend auf den Datenbankinhalten.
    • Der HTML-Code wird an den Browser gesendet und angezeigt.

PHP mit MySQL verbinden

  • Verbindung zur Datenbank herstellen:
<?php
$servername = "localhost";
$username = "root";
$password = "passwort";
$dbname = "meinedatenbank";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
echo "Erfolgreich verbunden";
?>

Datenbankabfragen mit PHP

  • Daten in die Datenbank einfügen:
<?php
$sql = "INSERT INTO nutzer (name, email) VALUES ('Max', 'max@example.com')";
if ($conn->query($sql) === TRUE) {
    echo "Neuer Datensatz erfolgreich hinzugefügt";
} else {
    echo "Fehler: " . $conn->error;
}
?>
  • Daten aus der Datenbank abrufen:
<?php
$sql = "SELECT id, name, email FROM nutzer";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"] . "<br>";
    }
} else {
    echo "Keine Ergebnisse";
}
?>

Formulare und Benutzereingaben

  • PHP ermöglicht Interaktion durch Formulare.
<form method="post" action="verarbeitung.php">
    Name: <input type="text" name="name"><br>
    Email: <input type="email" name="email"><br>
    <input type="submit" value="Absenden">
</form>
  • Verarbeiten der Eingaben in PHP:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST["name"];
    $email = $_POST["email"];
    
    $sql = "INSERT INTO nutzer (name, email) VALUES ('$name', '$email')";
    if ($conn->query($sql) === TRUE) {
        echo "Daten erfolgreich gespeichert";
    } else {
        echo "Fehler: " . $conn->error;
    }
}
?>

Sicherheitsaspekte

  • SQL-Injections verhindern:
<?php
$stmt = $conn->prepare("INSERT INTO nutzer (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
?>
  • Cross-Site Scripting (XSS) vermeiden:
<?php
echo htmlspecialchars($row["name"]);
?>

Erweiterte Abfragen und Performance-Optimierung

  • Indexierung für schnellere Abfragen:
  • create index idx_kw on my_table(kw);
  • explain select * from my_table where kw=15;
  • View für häufig genutzte Abfragen:
  • create view kw_statistik as select kw, sum(tests) as gesamt_tests from my_table group by kw;

Mehr Datensicherheit und Transaktionen

  • Sperren und Transaktionen für Datenintegrität:
  • start transaction;
  • update my_table set labor=200 where kw=15;
  • commit; *(statt commit auch rollback möglich)*

Fortgeschrittene Benutzerverwaltung

  • Benutzer mit eingeschränkten Rechten:
  • create user 'statuser'@'localhost' identified by 'safe123';
  • grant select on my_db.* to 'statuser'@'localhost';

Dynamische Berechnungen in SQL

  • SUM(), AVG() und andere Aggregatfunktionen:
  • select avg(prozent) from my_table where tests > 500000;
  • CASE-Anweisungen für bedingte Berechnungen:
  • select kw, case when prozent > 5 then 'hoch' else 'niedrig' end as risiko from my_table;

Triggers und Events für Automatisierungen

  • Automatische Protokollierung bei INSERT:
  • create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());
  • Zeitgesteuerte Events:
  • create event cleanup_old_entries on schedule every 1 day do delete from my_table where kw < 10;

JSON-Unterstützung in MySQL 5.7+ und MariaDB

  • Speichern von JSON-Daten:
  • create table json_test (id int auto_increment primary key, daten json);
  • Abfragen innerhalb von JSON-Feldern:
  • select json_extract(daten, '$.name') from json_test;

Fazit

  • Dynamische Webseiten ermöglichen interaktive und datenbankgestützte Anwendungen.
  • PHP verarbeitet Benutzeranfragen und stellt Daten aus MySQL bereit.
  • Sicherheitsmaßnahmen wie Prepared Statements und Validierungen sind essenziell.
  • Durch Kombination mit CSS und JavaScript können erweiterte Funktionen umgesetzt werden.