From 210a6c47a8ed8eba67a4a390ffab0571ef928b8f Mon Sep 17 00:00:00 2001 From: Moirtz Wagner Date: Thu, 17 Sep 2026 09:42:52 +0200 Subject: [PATCH] Zentrale DB-Verbindung und Helfer fuer Prepared Statements - incs/db.php: db_verbinden() setzt utf8mb4, strikten sql_mode und schaltet die mysqli-Exceptions von PHP 8.1+ ab, damit die bestehenden "or error(mysqli_error())"-Pruefungen weiter greifen. - db_abfrage/db_zeilen/db_zeile/db_wert mit ?-Platzhaltern (mysqli_execute_query, PHP 8.2). - Alle neun kopierten mysqli_connect/select_db-Stellen nutzen jetzt db_verbinden(). Nur zusammen mit der auf utf8mb4 migrierten Datenbank einsetzbar. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 2 + addKey.php | 6 +-- ajax/auto/connectmysql.php | 5 ++- authServer.php | 6 +-- clean_db.php | 5 ++- incs/authHelper.php | 6 +-- incs/connectmysql.php | 5 ++- incs/db.php | 79 +++++++++++++++++++++++++++++++++++++ incs/settings.php | 1 + index.php | 6 +-- stats.php | 3 +- update/rebuild-settings.php | 6 +-- 12 files changed, 102 insertions(+), 28 deletions(-) create mode 100644 incs/db.php diff --git a/CLAUDE.md b/CLAUDE.md index 5517e00..20c0b40 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -84,6 +84,8 @@ Eine Schemaänderung besteht also aus: neuer Eintrag **vorn** in `update/version ## Datenbankzugriff +**Umbau läuft (Branch `db-umbau`):** Verbindungen entstehen nur noch über `db_verbinden()` aus `incs/db.php`. Die Funktion setzt `utf8mb4`, den strikten `sql_mode` und schaltet die mysqli-Exceptions ab. Neue und umgebaute Abfragen nutzen `db_abfrage()`, `db_zeilen()`, `db_zeile()` und `db_wert()` mit `?`-Platzhaltern statt String-Verkettung. Ziel-Schema ist das der Instanz `kunden` in `utf8mb4`; die Altdaten sind teils doppelt kodiert und werden per Migration repariert. Dieser Stand darf nur zusammen mit der migrierten Datenbank live gehen. + Prozedurales `mysqli`. `$dbconn` wird zusätzlich in `$_SESSION["dbconn"]` abgelegt, damit `incs/mysql_ecape_wrapper.php` eine globale Funktion `mysql_escape_string()` als Shim über diese Verbindung bereitstellen kann — ein Überbleibsel der `mysql_*`-Ära, das in altem Code noch aufgerufen wird. SQL wird durchgehend per String-Verkettung gebaut. Escaping ist Handarbeit über `mysqli_real_escape_string($dbconn, …)` und muss bei jeder Änderung mitgedacht werden. diff --git a/addKey.php b/addKey.php index 24c0bcd..ce1a1ff 100644 --- a/addKey.php +++ b/addKey.php @@ -11,10 +11,8 @@ if($settings != "valid") if($settings == "valid") { - if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw)) - $err = error("Verbindung zur Datenbank fehlgeschlagen!!"); - if(!@mysqli_select_db($dbconn,$mysql_db)) - $err = error("Datenbank nicht gefunden!! ($mysql_db)"); + if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db)) + $err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error())); } if($_SESSION["login"] == "valid" && isset($_GET["id"])){ if(!mysqli_query($dbconn,"DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE);")){ diff --git a/ajax/auto/connectmysql.php b/ajax/auto/connectmysql.php index 31db3dd..6b19ad1 100644 --- a/ajax/auto/connectmysql.php +++ b/ajax/auto/connectmysql.php @@ -7,8 +7,9 @@ $settings=readsettings(); if($settings == "valid") { - $dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw); - mysqli_select_db($dbconn,$mysql_db); + $dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db); + if(!$dbconn) + $err = 1; } else $err = 1; diff --git a/authServer.php b/authServer.php index 7bf3b01..11fc2ad 100644 --- a/authServer.php +++ b/authServer.php @@ -50,10 +50,8 @@ try { if($settings == "valid") { - if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw)) - $err = error("Verbindung zur Datenbank fehlgeschlagen!!"); - if(!@mysqli_select_db($dbconn,$mysql_db)) - $err = error("Datenbank nicht gefunden!! ($mysql_db)"); + if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db)) + $err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error())); } // read get argument and post body $fn = filter_input(INPUT_GET, 'fn'); diff --git a/clean_db.php b/clean_db.php index 26365ca..dc1bafe 100644 --- a/clean_db.php +++ b/clean_db.php @@ -7,8 +7,9 @@ $settings=readsettings(); if($settings == "valid") { - $dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw); - mysqli_select_db($dbconn,$mysql_db); + $dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db); + if(!$dbconn) + $err = 1; } else $err = 1; diff --git a/incs/authHelper.php b/incs/authHelper.php index cefef93..cfeb1ec 100644 --- a/incs/authHelper.php +++ b/incs/authHelper.php @@ -8,10 +8,8 @@ if($settings != "valid") if($settings == "valid") { - if(!$mysql = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw)) - $err = error("Verbindung zur Datenbank fehlgeschlagen!!"); - if(!@mysqli_select_db($mysql,$mysql_db)) - $err = error("Datenbank nicht gefunden!! ($mysql_db)"); + if(!$mysql = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db)) + $err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error())); } $_SESSION["local"] =false; diff --git a/incs/connectmysql.php b/incs/connectmysql.php index 0a38885..17b6729 100644 --- a/incs/connectmysql.php +++ b/incs/connectmysql.php @@ -7,8 +7,9 @@ $settings=readsettings(); if($settings == "valid") { - $dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw); - mysqli_select_db($dbconn,$mysql_db); + $dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db); + if(!$dbconn) + $err = 1; } else $err = 1; diff --git a/incs/db.php b/incs/db.php new file mode 100644 index 0000000..f4eaa8e --- /dev/null +++ b/incs/db.php @@ -0,0 +1,79 @@ + DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn)); // Dataset definition diff --git a/update/rebuild-settings.php b/update/rebuild-settings.php index 6d54c97..dfc37ff 100644 --- a/update/rebuild-settings.php +++ b/update/rebuild-settings.php @@ -69,10 +69,8 @@ else $settings=readsettings(); if($settings == "valid") { - if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw)) - $err = error("Verbindung zur Datenbank fehlgeschlagen!!"); - if(!@mysqli_select_db($dbconn,$mysql_db)) - $err = error("Datenbank nicht gefunden!!"); + if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db)) + $err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error())); if(!$err)