From ce05503978085a39889abe073c07208f34a0b6a5 Mon Sep 17 00:00:00 2001 From: Florian Pesth Date: Mon, 25 Dec 2023 19:55:21 +0100 Subject: [PATCH] Change SQL to PDO (WIP) --- html/SQL.php | 698 ++++++++++++++++++++++++----------------- html/Setup.php | 628 ++++++++++++++++++++++++++++++++++++ html/Setup.rst | 54 ++++ html/index.php | 9 +- html/konfiguration.php | 7 +- 5 files changed, 1092 insertions(+), 304 deletions(-) create mode 100644 html/Setup.php create mode 100644 html/Setup.rst diff --git a/html/SQL.php b/html/SQL.php index 44b7cde..eb4d0bd 100644 --- a/html/SQL.php +++ b/html/SQL.php @@ -5,107 +5,116 @@ require_once 'konfiguration.php'; function ConnectDB() { - $db_link = mysqli_connect( - MYSQL_HOST, + $datasourcename = "mysql:host=" . MYSQL_HOST . ";dbname=". MYSQL_DATENBANK . ";charset=utf8mb4"; + $pdo = new PDO( + $datasourcename, MYSQL_BENUTZER, - MYSQL_KENNWORT, - MYSQL_DATENBANK + MYSQL_KENNWORT ); - return $db_link; + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + return $pdo; } -function CreateHelfer($db_link, $HelferName, $HelferEmail, $HelferHandy, $HelferPasswort, $HelferLevel = 1) +function CreateHelfer($pdo, $HelferName, $HelferEmail, $HelferHandy, $HelferPasswort, $HelferLevel = 1) { - $HelferName = mysqli_real_escape_string($db_link, $HelferName); - $HelferEmail = mysqli_real_escape_string($db_link, $HelferEmail); - $HelferHandy = mysqli_real_escape_string($db_link, $HelferHandy); - // level: Teilnehmer/Dauerhelfer/(Teamleiter) - $HelferLevel = mysqli_real_escape_string($db_link, $HelferLevel); - - //$HelferName=mysqli_real_escape($db_link,$HelferName); - $HelferPasswort = "€" . $HelferPasswort . "ß"; - //echo "".$HelferPasswort.""; - $PasswortHash = password_hash($HelferPasswort, PASSWORD_DEFAULT); - - // Neuen Helfer anlegen - $sql = "INSERT INTO Helfer(Name,Email,Handy,Status,BildFile,DoReport,Passwort,HelferLevel) VALUES ('$HelferName','$HelferEmail','$HelferHandy',1,'',0,'$PasswortHash','$HelferLevel')"; - $db_erg = mysqli_query($db_link, $sql); + $HelferPasswort = "€" . $HelferPasswort . "ß"; + $PasswortHash = password_hash($HelferPasswort, PASSWORD_DEFAULT); + + static $sql = "INSERT INTO Helfer(Name,Email,Handy,Status,BildFile,DoReport,Passwort,HelferLevel)". + " VALUES (:name,:email,:handy,:status,:bildfile,:doreport,:passwort,:helferlevel)"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $db_erg = $stmt->execute([ + "name" => $HelferName, + "email" => $HelferEmail, + "handy" => $HelferHandy, + "status" => 1, + "bildfile" => '', + "doreport" => 0, + "passwort" => $PasswortHash, + "helferlevel" => $HelferLevel + ]); + + $stmt->fetch(); error_log(date('Y-m-d H:i') . " CreateHelfer: $HelferName angelegt mit Email $HelferEmail Handy $HelferHandy \n", 3, LOGFILE); return $db_erg; } // testet fuer urllogin, ob Helfer bereits existiert -function HelferIstVorhanden($db_link, $Email) +function HelferIstVorhanden($pdo, $Email) { - $Email = mysqli_real_escape_string($db_link, $Email); - $sql = "SELECT count(HelferID) as Anzahl FROM Helfer Where Email = '" . $Email . "'"; - $db_erg = mysqli_query($db_link, $sql); - $zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC); + static $sql = "SELECT count(HelferID) AS Anzahl FROM Helfer WHERE Email = :email"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $stmt->execute(["email" => $Email]); + // TODO Test, that this still works + $zeile = $stmt->fetchAll(); return $zeile['Anzahl']; } //TODO: pruefen, ob Helfer bereits eingeloggt -function HelferLogin($db_link, $HelferEmail, $HelferPasswort, $HelferStatus) +function HelferLogin($pdo, $HelferEmail, $HelferPasswort, $HelferStatus) { - $HelferEmail = mysqli_real_escape_string($db_link, $HelferEmail); - $HelferStatus = mysqli_real_escape_string($db_link, $HelferStatus); - //echo "Test
"; // Helfer Suchen - $sql = "Select HelferID,Admin,Name,Passwort,HelferLevel From Helfer Where Email='" . $HelferEmail . "'"; - //echo $sql; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $sql = "SELECT HelferID,Admin,Name,Passwort,HelferLevel FROM Helfer WHERE Email=:email"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $db_erg = $stmt->execute(["email" => $HelferEmail]); + if ($stmt->errorCode() != 1) { echo "Login ungueltige Abfrage"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } - while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) { + while ($zeile = $stmt->fetchAll()) { $HelferPasswort = "€" . $HelferPasswort . "ß"; //echo "".$HelferPasswort."
"; //echo "".$zeile['Passwort']."
"; if (password_verify($HelferPasswort, $zeile['Passwort'])) { $_SESSION["HelferID"] = $zeile['HelferID']; $_SESSION["HelferName"] = $zeile['Name']; - //TODO: das sollte nur gesetzt werden, wenn der Helfer Admin ist - $_SESSION["AdminID"] = $zeile['HelferID']; - $_SESSION["AdminStatus"] = $zeile['Admin']; - $_SESSION["HelferLevel"] = $zeile['HelferLevel']; - return 1; + //TODO: das sollte nur gesetzt werden, wenn der Helfer Admin ist + $_SESSION["AdminID"] = $zeile['HelferID']; + $_SESSION["AdminStatus"] = $zeile['Admin']; + $_SESSION["HelferLevel"] = $zeile['HelferLevel']; + return 1; } else { echo "Falsches Passwort
"; - return 0; + return 0; } } } // Liste der Helfer fuer Admin-Seite //TODO: HelferLevel -function HelferListe($db_link) +function HelferListe($pdo) { - $sql = "SELECT HelferID,Name FROM Helfer"; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $sql = "SELECT HelferID,Name FROM Helfer"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $db_erg = $stmt->execute(); + if ($stmt->errorCode() != 1) { echo "Helferliste ungueltige Abfrage"; - die('Unueltige Abfrage: ' . mysqli_error($db_link)); + die('Unueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } -function Helferdaten($db_link, $HelferID) +function Helferdaten($pdo, $HelferID) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); + static $sql = "SELECT * FROM Helfer Where HelferID = :helferid"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $db_erg = $stmt->execute(["helferid" => $HelferID]); - $sql = "SELECT * FROM Helfer Where HelferID =" . $HelferID; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + if ($stmt->errorCode() != 1) { echo "Helferdaten ungueltige Abfrage
\n"; echo "sql:$sql
\n"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; @@ -113,39 +122,65 @@ function Helferdaten($db_link, $HelferID) -function HelferdatenAendern($db_link, $HelferName, $HelferEmail, $HelferHandy, $HelferNewPasswort, $HelferID, $HelferIsAdmin = -1, $AdminID = 0) +function HelferdatenAendern($pdo, $HelferName, $HelferEmail, $HelferHandy, $HelferNewPasswort, $HelferID, $HelferIsAdmin = -1, $AdminID = 0) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); - $HelferName = mysqli_real_escape_string($db_link, $HelferName); - $HelferEmail = mysqli_real_escape_string($db_link, $HelferEmail); - $HelferHandy = mysqli_real_escape_string($db_link, $HelferHandy); + static $stmts_prepared = false; + static $stmts = array(); + if(!$stmts_prepared) { + $stmts['password_empty'] = $pdo->prepare("UPDATE Helfer SET Name=:name,Email=:email,Handy=:handy Where HelferId=:id"); + $stmts['password_empty_admin'] = $pdo->prepare("UPDATE Helfer SET Name=:name,Email=:email,Handy=:handy,Admin=:admin Where HelferId=:id"); + $stmts['password_given'] = $pdo->prepare("UPDATE Helfer SET Name=:name,Email=:email,Handy=:handy,Passwort=:passwort Where HelferId=:id"); + $stmts['password_given_admin'] = $pdo->prepare("UPDATE Helfer SET Name=:name,Email=:email,Handy=:handy,Passwort=:passwort,Admin=:admin Where HelferId=:id"); + $stmts_prepared = true; + } if ($HelferNewPasswort == "") { //$sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy' ".($HelferIsAdmin!=-1)?',Admin='$HelferIsAdmin.':'." Where HelferId=".$HelferID; if ($HelferIsAdmin == -1) { - $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy' Where HelferId=" . $HelferID; + $db_erg = $stmts['password_empty']->execute([ + "name" => $HelferName, + "email" => $HelferEmail, + "handy" => $HelferHandy, + "id" => $HelferID + ]); } else { - $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy',Admin=$HelferIsAdmin Where HelferId=" . $HelferID; + $db_erg = $stmts['password_empty_admin']->execute([ + "name" => $HelferName, + "email" => $HelferEmail, + "handy" => $HelferHandy, + "admin" => $HelferIsAdmin, + "id" => $HelferID + ]); } - echo $sql; - $db_erg = mysqli_query($db_link, $sql); echo "
  • Helferdaten geändert
  • "; if ($AdminID != 0) { - error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n", 3, LOGFILE); + error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n", 3, LOGFILE); } else { - error_log(date('Y-m-d H:i') . "Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n", 3, LOGFILE); + error_log(date('Y-m-d H:i') . "Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n", 3, LOGFILE); } } else { $HelferNewPasswort = "€" . $HelferNewPasswort . "ß"; $PasswortHash = password_hash($HelferNewPasswort, PASSWORD_DEFAULT); if ($HelferIsAdmin == -1) { - $sql = "UPDATE Helfer SET Name='" . $HelferName . "',Email='" . $HelferEmail . "',Handy='" . $HelferHandy . "',Passwort='" . $PasswortHash . "' Where HelferId=" . $HelferID; + $db_erg = $stmts['password_given']->execute([ + "name" => $HelferName, + "email" => $HelferEmail, + "handy" => $HelferHandy, + "passwort" => $PasswortHash, + "id" => $HelferID + ]); } else { - $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy',Passwort='$PasswortHash',Admin=$HelferIsAdmin Where HelferId=" . $HelferID; + $db_erg = $stmts['password_given_admin']->execute([ + "name" => $HelferName, + "email" => $HelferEmail, + "handy" => $HelferHandy, + "passwort" => $PasswortHash, + "admin" => $HelferIsAdmin, + "id" => $HelferID + ]); } //echo $sql; - $db_erg = mysqli_query($db_link, $sql); echo "
  • Passwort geändert
  • "; if ($AdminID != 0) { error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Passwort: neu gesetzt\n", 3, LOGFILE); @@ -154,39 +189,44 @@ function HelferdatenAendern($db_link, $HelferName, $HelferEmail, $HelferHandy, $ } } - if (! $db_erg) { - echo "HelferdatenAendern ungueltiges Statement"; - echo $sql; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + foreach ($stmts as $stmt) { + if (!is_null($stmt->errorCode()) && ($stmt->errorCode() != 1) ) { + echo "HelferdatenAendern ungueltiges Statement"; + echo $stmt->queryString; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } } - return $db_erg; } -function AlleSchichten($db_link, $Sort, $HelferLevel = 1) +function AlleSchichten($pdo, $Sort, $HelferLevel = 1) { - - $Sort = mysqli_real_escape_string($db_link, $Sort); + static $stmts_prepared = false; + static $stmts = array(); + if(!$stmts_prepared) { + $stmts['sort_by_von'] = $pdo->prepare("select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=:helferlevel order by Von"); + $stmts['sort_by_was_von'] = $pdo->prepare("select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=:helferlevel order by Was,Von"); + $stmts_prepared = true; + } if ($Sort == '1') { - $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=$HelferLevel order by Von"; + $db_erg = $stmts['sort_by_von']->execute(["helferlevel" => $HelferLevel]); } else { - $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=$HelferLevel order by Was,Von"; + $db_erg = $stmts['sort_by_was_von']->execute(["helferlevel" => $HelferLevel]); } - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { - echo "AlleSchichten ungueltige Abfrage"; - echo $Sort; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + foreach ($stmts as $stmt) { + if (!is_null($stmt->errorCode()) && ($stmt->errorCode() != 1) ) { + echo "AlleSchichten ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } } - return $db_erg; } @@ -194,18 +234,21 @@ function AlleSchichtenCount($db_link, $HelferLevel = 1) { //$sql = "select SUM(Soll) As Anzahl from SchichtUebersicht where HelferLevel=$HelferLevel"; - $sql = "select Sum(Soll) as Anzahl, HelferLevel from SchichtUebersicht,Dienst Where SchichtUebersicht.DienstID=Dienst.DienstID and HelferLevel=$HelferLevel"; - - - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { - echo "AlleSchichtenCount ungueltige Abfrage"; - echo $Sort; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select Sum(Soll) as Anzahl, HelferLevel from SchichtUebersicht,Dienst Where SchichtUebersicht.DienstID=Dienst.DienstID and HelferLevel=:helferlevel"); } - $zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC); + + $db_erg = $stmt->execute(["helferlevel" => $HelferLevel]); + + if ($stmt->errorCode() != 1){ + echo "AlleSchichtenCount ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } + + $zeile = $stmt->fetchAll(); return $zeile['Anzahl']; } @@ -213,61 +256,78 @@ function AlleSchichtenCount($db_link, $HelferLevel = 1) function AlleBelegteSchichtenCount($db_link, $HelferLevel = 1) { - $sql = "select Count(HelferID) As Anzahl from EinzelSchicht,Schicht,Dienst Where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID and HelferLevel=$HelferLevel"; - - - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { - echo "AlleSchichtenCount ungueltige Abfrage"; - echo $Sort; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select Count(HelferID) As Anzahl from EinzelSchicht,Schicht,Dienst Where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID and HelferLevel=:helferlevel"); } - $zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC); + + $db_erg = $stmt->execute(["helferlevel" => $Helferlevel]); + + if ($stmt->errorCode() != 1){ + echo "AlleSchichtenCount ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } + + $zeile = $stmt->fetchAll(); return $zeile['Anzahl']; } -function AlleSchichtenImZeitbereich($db_link, $Von, $Bis, $HelferLevel = 1) +function AlleSchichtenImZeitbereich($pdo, $Von, $Bis, $HelferLevel = 1) { // SchichtID, Was, Ab, Bis, Ist, Tag, Soll - Ist und Soll sind die HelferStunden - $Von = mysqli_real_escape_string($db_link, $Von); - $Bis = mysqli_real_escape_string($db_link, $Bis); - $HelferLevel = mysqli_real_escape_string($db_link, $HelferLevel); - $sql_helferlevel = "and Dienst.HelferLevel=$HelferLevel"; + + static $stmts_prepared = false; + static $stmts = array(); + if(!$stmts_prepared) { + $stmts['helferlevel_not_set'] = $pdo->prepare("select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Von >= :von and Von < :bis and Dienst.DienstID=SchichtUebersicht.DienstID order by Was,Von"); + $stmts['helferlevel_set'] = $pdo->prepare("select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Von >= :von and Von < :bis and Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.HelferLevel=:helferlevel order by Was,Von"); + $stmts_prepared = true; + } + if ($HelferLevel == -1) { - $sql_helferlevel = ""; + $db_erg = $stmts['helferlevel_not_set']->execute([ + "von" => $Von, + "bis" => $Bis + ]); + } + else { + $db_erg = $stmts['helferlevel_set']->execute([ + "von" => $Von, + "bis" => $Bis, + "helferlevel" => $HelferLevel + ]); } - $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Von >= '" . $Von . "' and Von <'" . $Bis . "' and Dienst.DienstID=SchichtUebersicht.DienstID $sql_helferlevel order by Was,Von"; - error_log($sql); - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { - echo "AlleSchichtenImZeitbereich ungueltige Abfrage
    "; - echo $sql; - die('
    Ungueltige Abfrage: ' . mysqli_error($db_link)); + foreach ($stmts as $stmt) { + if (!is_null($stmt->errorCode()) && ($stmt->errorCode() != 1) ) { + echo "AlleSchichtenImZeitbereich ungueltige Abfrage
    "; + echo $stmt->queryString; + die('
    Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } } - return $db_erg; } -function AlleSchichtenEinesHelfers($db_link, $HelferID) +function AlleSchichtenEinesHelfers($pdo, $HelferID) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:helferid order by Von"); + } - $sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=" . $HelferID . " order by Von"; - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmt->execute(["helferid" => $HelferID]); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "AlleSchichtenEinesHelfers ungueltige Abfrage"; echo $HelferID; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } @@ -313,7 +373,10 @@ function SchichtIdArrayEinesHelfers($db_link, $HelferID) $HelferID = mysqli_real_escape_string($db_link, $HelferID); // Array, um Zeilen mit von mir belegten Schichten in der Schichtuebersicht einfaerben zu koennenn - $sql = "SELECT SchichtID FROM EinzelSchicht WHERE HelferID = $HelferID"; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("SELECT SchichtID FROM EinzelSchicht WHERE HelferID = $HelferID"); + } //print_r($sql); $db_erg = mysqli_query($db_link, $sql); $schichtIDs = array(); @@ -326,40 +389,45 @@ function SchichtIdArrayEinesHelfers($db_link, $HelferID) function AlleSchichtenEinesHelfersVonJetzt($db_link, $HelferID) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); // TODO: fix GETDATE() array to string conversion - $sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=" . $HelferID . " and Bis>'" . GETDATE() . "' order by Von"; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:id and Bis>:bis order by Von"); + } //$sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." and Bis>'2023-05-20' order by Von"; //echo $sql; - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmt->execute([ + "id" => $HelferID, + "bis" => GETDATE() + ]); - if (! $db_erg) { + if($stmt->errorCode() != 1){ echo "AlleSchichtenEinesHelfers ungueltige Abfrage"; echo $HelferID; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } - return $db_erg; } function SchichtenSummeEinesHelfers($db_link, $HelferID) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); - //$sql = "select count Schicht.Dauer as Anzahl FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." order by Von"; - $sql = "select count(*) as Anzahl, SUM(TIME_TO_SEC(Schicht.Dauer)) as Dauer FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=" . $HelferID; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select count(*) as Anzahl, SUM(TIME_TO_SEC(Schicht.Dauer)) as Dauer FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:helferid"); + } //echo $sql; - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmt->execute(["helferid" => $HelferID]); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "SchichtenSummeEinesHelfers ungueltige Abfrage"; echo $HelferID; - echo $sql; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + echo $stmt->queryString; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } @@ -375,14 +443,17 @@ function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $A $Aktion = mysqli_real_escape_string($db_link, $Aktion); $AdminID = mysqli_real_escape_string($db_link, $AdminID); - $sql = "SELECT Schicht.Von, Schicht.Bis, Dienst.Was, Helfer.Name + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("SELECT Schicht.Von, Schicht.Bis, Dienst.Was, Helfer.Name FROM EinzelSchicht JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID JOIN Dienst ON Schicht.DienstID = Dienst.DienstID JOIN Helfer ON EinzelSchicht.HelferID = Helfer.HelferID WHERE EinzelSchicht.HelferID = $HelferID AND ( Schicht.SchichtID = $SchichtId OR EinzelSchicht.EinzelSchichtID = $EinzelSchichtId) - "; + "); + } //error_log(date('Y-m-d H:i') . " " . $sql ."\n",3,LOGFILE); $db_erg = mysqli_query($db_link, $sql); @@ -407,69 +478,76 @@ function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $A } } -function HelferSchichtZuweisen($db_link, $HelferID, $SchichtId, $AdminID = 0) +function HelferSchichtZuweisen($pdo, $HelferID, $SchichtId, $AdminID = 0) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); - $SchichtId = mysqli_real_escape_string($db_link, $SchichtId); + // Abfrage, ob bereits eine Einzelschicht in der selben Schicht vom Helfer existiert + static $stmts_prepared = false; + static $stmts = false; + if(!$stmts_prepared) { + $stmts['einzelschicht_exists'] = $pdo->prepare("SELECT EinzelSchichtID from EinzelSchicht WHERE SchichtID=:schichtid and HelferID=:helferid"); + $stmts['new_einzelschicht'] = $pdo->prepare("INSERT INTO EinzelSchicht(SchichtID,HelferID) VALUES (:schichtid,:helferid)"); + $stmts_prepared = true; + } - // Abfrage, ob bereits eine Einzelschicht in der selben Schicht vom Helfer existiert - $sql = "SELECT EinzelSchichtID from EinzelSchicht WHERE SchichtID='$SchichtId' and HelferID='$HelferID'"; + $db_erg = $stmts['einzelschicht_exists']->execute([ + "schichtid" => $SchichtId, + "helferid" => $HelferID + ]); - $db_erg = mysqli_query($db_link, $sql); - - if (mysqli_num_rows($db_erg) > 0) { + if($stmt['einzelschicht_exists']->fetch()){ echo "HelferSchichtZuweisen: Schicht existiert bereits!"; return false; } // Helfer Schicht zuweisen - $sql = 'INSERT INTO EinzelSchicht(SchichtID,HelferID) VALUES (\'' - . $SchichtId . '\',\'' - . $HelferID . '\')'; //echo ''; - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmts['new_einzelschicht']->execute([ + "schichtid" => $SchichtId, + "helferid" => $HelferID + ]); - if (! $db_erg) { + if ($stmts['new_einzelschicht']->errorCode() != 1){ echo "HelferSchichtZuweisen ungueltige Abfrage"; echo $HelferID; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmts['new_einzelschicht']->errorInfo()[2]); } - LogSchichtEingabe($db_link, $HelferID, $SchichtId, -1, "eingetragen", $AdminID); + LogSchichtEingabe($db_link, $HelferID, $SchichtId, -1, "eingetragen", $AdminID); return $db_erg; } -function HelferVonSchichtLoeschen($db_link, $HelferID, $EinzelSchichtID, $AdminID = 0) +function HelferVonSchichtLoeschen($pdo, $HelferID, $EinzelSchichtID, $AdminID = 0) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); - $SchichtId = mysqli_real_escape_string($db_link, $SchichtId); - - // Log vor Löschen, damit Einzelschicht abgefragt werden kann LogSchichtEingabe($db_link, $HelferID, -1, $EinzelSchichtID, "entfernt", $AdminID); // Lösche Einzelschicht - $sql = "Delete From EinzelSchicht Where EinzelSchichtID =" . $EinzelSchichtID; - //echo $sql; - $db_erg = mysqli_query($db_link, $sql); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("Delete From EinzelSchicht Where EinzelSchichtID = :id"); + } + //echo $sql; + $db_erg = $stmt->execute(["id" => $EinzelSchichtID]); return $db_erg; } -function HelferVonSchichtLoeschen_SchichtID($db_link, $HelferID, $SchichtID, $AdminID = 0) +function HelferVonSchichtLoeschen_SchichtID($pdo, $HelferID, $SchichtID, $AdminID = 0) { - $HelferID = mysqli_real_escape_string($db_link, $HelferID); - $SchichtId = mysqli_real_escape_string($db_link, $SchichtId); - - // Log vor Löschen, damit Einzelschicht abgefragt werden kann LogSchichtEingabe($db_link, $HelferID, $SchichtID, -1, "entfernt", $AdminID); // Lösche Einzelschicht - $sql = "Delete From EinzelSchicht Where SchichtID = $SchichtID and HelferID = $HelferID limit 1;"; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("Delete From EinzelSchicht Where SchichtID = :schichtid and HelferID = :helferid limit 1;"); + } //echo $sql; - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmt->execute([ + "schichtid" => $SchichtID, + "helferid" => $HelferID + ]); return $db_erg; } @@ -478,39 +556,40 @@ function HelferVonSchichtLoeschen_SchichtID($db_link, $HelferID, $SchichtID, $Ad -function DetailSchicht($db_link, $InfoSchichtID) +function DetailSchicht($pdo, $InfoSchichtID) { - $InfoSchichtID = mysqli_real_escape_string($db_link, $InfoSchichtID); - - - $sql = "select Was,Wo,Info,Name,Handy,Email,DATE_FORMAT(Dauer,'%H:%i') AS Dauer FROM Dienst,Schicht,Helfer where Dienst.DienstID=Schicht.DienstID AND Helfer.HelferID=Dienst.Leiter And SchichtID=" . $InfoSchichtID; - - //echo $sql; - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { - echo "Details ungueltige Abfrage "; - echo $InfoSchichtID; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select Was,Wo,Info,Name,Handy,Email,DATE_FORMAT(Dauer,'%H:%i') AS Dauer FROM Dienst,Schicht,Helfer where Dienst.DienstID=Schicht.DienstID AND Helfer.HelferID=Dienst.Leiter And SchichtID=:id"); } - $zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC); + //echo $sql; + $db_erg = $stmt->execute(["id" => $InfoSchichtID]); + + if ($stmt->errorCode() != 1){ + echo "Details ungueltige Abfrage "; + echo $InfoSchichtID; + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); + } + + $zeile = $stmt->fetchAll(); return $zeile; } -function BeteiligteHelfer($db_link, $InfoSchichtID) +function BeteiligteHelfer($pdo, $InfoSchichtID) { - $InfoSchichtID = mysqli_real_escape_string($db_link, $InfoSchichtID); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select Helfer.HelferID,Name,Handy FROM EinzelSchicht,Helfer where EinzelSchicht.HelferID=Helfer.HelferID And SchichtID=:id"); + } - $sql = "select Helfer.HelferID,Name,Handy FROM EinzelSchicht,Helfer where EinzelSchicht.HelferID=Helfer.HelferID And SchichtID=" . $InfoSchichtID; + $db_erg = $stmt->execute(["id" => $InfoSchichtID]); - $db_erg = mysqli_query($db_link, $sql); - - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "Details ungueltige Abfrage "; echo $InfoSchichtID; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; @@ -518,100 +597,114 @@ function BeteiligteHelfer($db_link, $InfoSchichtID) function GetDienste($db_link) { - $sql = "SELECT DienstID, Was, Wo, Info, Leiter, ElternDienstID, HelferLevel FROM Dienst order By Was"; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("SELECT DienstID, Was, Wo, Info, Leiter, ElternDienstID, HelferLevel FROM Dienst order By Was"); + } $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "GetDienste ungueltige Abfrage"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } -function GetDiensteChilds($db_link, $DienstID) +function GetDiensteChilds($pdo, $DienstID) { - $DienstID = mysqli_real_escape_string($db_link, $DienstID); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("SELECT DienstID, Was, Wo, Info, Leiter FROM Dienst where ElternDienstID=:id order by Was"); + } - $sql = "SELECT DienstID, Was, Wo, Info, Leiter FROM Dienst where ElternDienstID='" . $DienstID . "' order by Was"; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmt->execute(["id" => $DienstID]); + + if ($stmt->errorCode() != 1){ echo "GetDienste ungueltige Abfrage"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } -function ChangeDienst($db_link, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) +function ChangeDienst($pdo, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) { - $DienstID = mysqli_real_escape_string($db_link, $DienstID); - $Was = mysqli_real_escape_string($db_link, $Was); - $Wo = mysqli_real_escape_string($db_link, $Wo); - $Info = mysqli_real_escape_string($db_link, $Info); - $Leiter = mysqli_real_escape_string($db_link, $Leiter); - $Gruppe = mysqli_real_escape_string($db_link, $Gruppe); - $HelferLevel = mysqli_real_escape_string($db_link, $HelferLevel); // int (1,2) Teilnehmer oder Dauerhelfer + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("UPDATE Dienst SET Was=:was, Wo=:wo, Info=:info, Leiter=:leiter, ElternDienstID=:elterndienstid where DienstID=:dienstid"); + } - $sql = "UPDATE Dienst SET Was='" . $Was . "', Wo='" . $Wo . "', Info='" . $Info . "', Leiter=" . $Leiter . ", ElternDienstID=" . $Gruppe . " where DienstID=" . $DienstID; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmt->execute([ + "was" => $Was, + "wo" => $Wo, + "info" => $Info, + "leiter" => $Leiter, + "elterndienstid" => $Gruppe, + "dienstid" => $DienstID + ]); + + if ($stmt->errorCode() != 1){ echo "Fehler Change Dienst"; echo $sql; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } } -function NewDienst($db_link, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) +function NewDienst($pdo, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) { + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("INSERT INTO Dienst (Was, Wo, Info, Leiter, ElternDienstID, HelferLevel) values (:was,:wo,:info,:leiter,:elterndienstid,:helferlevel)"); + } - $DienstID = mysqli_real_escape_string($db_link, $DienstID); - $Was = mysqli_real_escape_string($db_link, $Was); //Name des Dienstes - $Wo = mysqli_real_escape_string($db_link, $Wo); //Ort - $Info = mysqli_real_escape_string($db_link, $Info); //vollstaendige Beschreibung - $Leiter = mysqli_real_escape_string($db_link, $Leiter); // int HelferID des Leiters - $Gruppe = mysqli_real_escape_string($db_link, $Gruppe); // ?? - $HelferLevel = mysqli_real_escape_string($db_link, $HelferLevel); // int (1,2) Teilnehmer oder Dauerhelfer - - - $sql = "INSERT INTO Dienst (Was, Wo, Info, Leiter, ElternDienstID, HelferLevel) values ('$Was','$Wo','$Info',$Leiter,$Gruppe,$HelferLevel)"; + $db_erg = $stmt->execute([ + "was" => $Was, + "wo" => $Wo, + "info" => $Info, + "leiter" => $Leiter, + "elterndienstid" => $Gruppe, + "helferlevel" => $HelferLevel + ]); $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "Fehler New Dienst"; // echo $sql; - $err = mysqli_error($db_link); + $err = $stmt->errorInfo()[2]; die('Ungueltige Abfrage: ' . $err); - error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit Anfrage $sql Grund: $err \n", 3, LOGFILE); + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit Anfrage $sql Grund: $err \n", 3, LOGFILE); } else { - error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName(ID:HelferID) hat Dienst angelegt mit Was: $WAS Wo: $Wo Info: $Info Leiter: $Leiter Gruppe $Gruppe, HelferLevel $HelferLevel \n", 3, LOGFILE); + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName(ID:HelferID) hat Dienst angelegt mit Was: $WAS Wo: $Wo Info: $Info Leiter: $Leiter Gruppe $Gruppe, HelferLevel $HelferLevel \n", 3, LOGFILE); } } function DeleteDienst($db_link, $DienstID, $Rekursiv) { - $DienstID = mysqli_real_escape_string($db_link, $DienstID); - - if ($Rekursiv) { return false; } else { // Pruefen ob noch Schichten eingetragen sind - $sql = "SELECT SchichtID FROM Schicht where DienstID=" . $DienstID; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $stmts_prepared = false; + static $stmts = array(); + if(!$stmts_prepared) { + $stmts['check_dienst'] = $pdo->prepare("SELECT SchichtID FROM Schicht where DienstID=:id"); + $stmts['delete_dienst'] = $pdo->prepare("DELETE FROM Dienst where DienstID=:id"); + $stmts_prepared = true; + } + + $db_erg = $stmts['check_dienst']->execute(['id' => $DienstID]); + + if ($stmts['check_dienst']->errorCode() != 1){ echo "Fehler DeleteDienst"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmts['check_dienst']->errorInfo()[2]); } - if (mysqli_num_rows($db_erg) == 0) { + if ($stmts['check_dienst']->fetch()) { // Eintrag löschen - $sql = "DELETE FROM Dienst where DienstID=" . $DienstID; - - echo $sql; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmts['delete_dienst']->execute(['id' => $DienstID]); + if ($stmts['delete_dienst']->errorCode() != 1){ echo "Fehler DeleteDienst"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmts['delete_dienst']->errorInfo()[2]); } return true; } else { @@ -622,46 +715,44 @@ function DeleteDienst($db_link, $DienstID, $Rekursiv) function GetSchichtenEinesDienstes($db_link, $DienstID) { - $DienstID = mysqli_real_escape_string($db_link, $DienstID); - //$sql = "SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon FROM Schicht where DienstID=".$DienstID; - $sql = "SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon, DATE_FORMAT(Von,'%H:%i') AS ZeitVon, DATE_FORMAT(Bis,'%H:%i') AS ZeitBis FROM Schicht where DienstID=" . $DienstID; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon, DATE_FORMAT(Von,'%H:%i') AS ZeitVon, DATE_FORMAT(Bis,'%H:%i') AS ZeitBis FROM Schicht where DienstID=:id"); + } + $db_erg = $stmt->execute(['id' => $DienstID]); + if ($stmt->errorCode() != 1){ echo "GetSchichtenEinesDienstes ungueltige Abfrage"; echo $sql; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } function ChangeSchicht($db_link, $SchichtID, $Von, $Bis, $Soll) { - $SchichtID = mysqli_real_escape_string($db_link, $SchichtID); - $Von = mysqli_real_escape_string($db_link, $Von); - $Bis = mysqli_real_escape_string($db_link, $Bis); - $Soll = mysqli_real_escape_string($db_link, $Soll); + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("UPDATE Schicht SET Von=:von, Bis=:bis, Soll=:soll where SchichtID=:id"); + } + $db_erg = $stmt->execute([ + 'von' => $Von, + 'bis' => $Bis, + 'soll' => $Soll, + 'id' => $SchichtID + ]); - $sql = "UPDATE Schicht SET Von='" . $Von . "', Bis='" . $Bis . "', Soll='" . $Soll . "' where SchichtID=" . $SchichtID; - - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "Fehler ChangeSchicht"; - echo $sql; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } } function NewSchicht($db_link, $DienstID, $Von, $Bis, $Soll) { - $DienstID = mysqli_real_escape_string($db_link, $DienstID); - $Von = mysqli_real_escape_string($db_link, $Von); - $Bis = mysqli_real_escape_string($db_link, $Bis); - $Soll = mysqli_real_escape_string($db_link, $Soll); - /* if(validateDate($Von)) { @@ -674,14 +765,23 @@ function NewSchicht($db_link, $DienstID, $Von, $Bis, $Soll) return Null; } */ - $sql = "INSERT INTO Schicht (DienstID, Von, Bis, Soll) values ('" . $DienstID . "','" . $Von . "','" . $Bis . "'," . $Soll . ")"; + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("INSERT INTO Schicht (DienstID, Von, Bis, Soll) values (:id,:von,:bis,:soll)"); + } - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmt->execute([ + 'id' => $DienstID, + 'von' => $Von, + 'bis' => $Bis, + 'soll' => $Soll + ]); + + if ($stmt->errorCode() != 1){ echo "Keine Schicht erstellt"; //echo $sql; error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit $sql \n", 3, LOGFILE); - $err = mysqli_error($db_link); + $err = $stmt->errorInfo()[2]; die('Ungueltige Abfrage: ' . $err); } else { //TODO: DienstID aufloesen @@ -689,30 +789,33 @@ function NewSchicht($db_link, $DienstID, $Von, $Bis, $Soll) } } -function DeleteSchicht($db_link, $SchichtID, $Rekursiv) +function DeleteSchicht($pdo, $SchichtID, $Rekursiv) { - $SchichtID = mysqli_real_escape_string($db_link, $SchichtID); + static $stmts_prepared = false; + static $stmts = false; + if(!$stmts_prepared) { + $stmts['check_einzelschicht'] = $pdo->prepare("SELECT Name FROM EinzelSchicht,Helfer where SchichtID=:id and Helfer.HelferID=EinzelSchicht.HelferID"); + $stmts['delete_einzelschicht'] = $pdo->prepare("DELETE FROM Schicht where SchichtID=:id"); + $stmts_prepared = true; + } if ($Rekursiv) { return false; } else { // Pruefen ob noch Helfer auf der Schicht eingetragen sind - $sql = "SELECT Name FROM EinzelSchicht,Helfer where SchichtID=" . $SchichtID . " and Helfer.HelferID=EinzelSchicht.HelferID"; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmts['check_einzelschicht']->execute(["id" => $SchichtID ]); + + if ($stmts['check_einzelschicht']->errorCode() != 1){ echo "Fehler Change Dienst"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmts['check_einzelschicht']->errorInfo()[2]); } - if (mysqli_num_rows($db_erg) == 0) { + if (!$stmts['check_einzelschicht']->fetch()) { // Eintrag löschen - $sql = "DELETE FROM Schicht where SchichtID=" . $SchichtID; - - echo $sql; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + $db_erg = $stmts['delete_einzelschicht']->execute(["id" => $SchichtID ]); + if ($stmts['delete_einzelschicht']->errorCode() != 1) { echo "Fehler Change Dienst"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmts['delete_einzelschicht']->errorInfo()[2]); } return true; } else { @@ -722,37 +825,46 @@ function DeleteSchicht($db_link, $SchichtID, $Rekursiv) } -function AlleHelferSchichtenUebersicht($db_link) +function AlleHelferSchichtenUebersicht($pdo) { - $sql = "select Helfer.HelferID as AliasHelferID,Name,Email,Handy,Was,SUM(Dauer)/10000 as Dauer from Helfer,EinzelSchicht INNER JOIN Schicht INNER JOIN Dienst where Helfer.HelferID=EinzelSchicht.HelferID and EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID group by Helfer.HelferID,Was"; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select Helfer.HelferID as AliasHelferID,Name,Email,Handy,Was,SUM(Dauer)/10000 as Dauer from Helfer,EinzelSchicht INNER JOIN Schicht INNER JOIN Dienst where Helfer.HelferID=EinzelSchicht.HelferID and EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID group by Helfer.HelferID,Was"); + } + $db_erg = $stmt->execute(); + + if ($stmt->errorCode() != 1){ echo "AlleHelferSchichtenUebersicht ungueltige Abfrage"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } -function DatenbankAufDeutsch($db_link) +function DatenbankAufDeutsch($pdo) { - $sql = "SET lc_time_names = 'de_DE'"; - $db_erg = mysqli_query($db_link, $sql); + static $sql = "SET lc_time_names = 'de_DE'"; + static $stmt = false; + if(!$stmt) $stmt = $pdo->prepare($sql); + $db_erg = $stmt->execute(); - if (! $db_erg) { + if ($stmt->errorCode() != 1){ echo "ungueltiges umstellen auf Deutsch"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } } function HelferLevel($db_link) { - $sql = "select HelferLevel,HelferLevelBeschreibung from HelferLevel"; - $db_erg = mysqli_query($db_link, $sql); - if (! $db_erg) { + static $stmt = false; + if(!$stmt) { + $stmt = $pdo->prepare("select HelferLevel,HelferLevelBeschreibung from HelferLevel"); + } + $db_erg = $stmt->execute(); + if($stmt->errorCode() != 1){ echo "Konnte HelferLevel nicht abfragen"; - die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + die('Ungueltige Abfrage: ' . $stmt->errorInfo()[2]); } return $db_erg; } diff --git a/html/Setup.php b/html/Setup.php new file mode 100644 index 0000000..b9ecfd0 --- /dev/null +++ b/html/Setup.php @@ -0,0 +1,628 @@ + + + + + +HelferDB Setup Wizard + + + + +
    +

    HelferDB Setup Wizard

    + +

    Diese Seite führt durch die Einrichtung der Helferdatenbank.

    +
    +

    Schritt 1: Logindaten für Datenbank eingeben

    +

    Bitte hier zunächst die Logindaten für die Datenbank eingeben. Es muss in der Regel nur ein Passwort vergeben werden und die anderen beiden Werte können unverändert bleiben.

    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    Schritt 2: Datenbank einrichten

    +

    Bitte zunächst mariadb einrichten (oder mysql) und dazu folgendes in der Shell (z.b. bash) eingeben:

    +
    sudo apt-get install mariadb
    +
    +
    + + diff --git a/html/Setup.rst b/html/Setup.rst new file mode 100644 index 0000000..7a7cdd5 --- /dev/null +++ b/html/Setup.rst @@ -0,0 +1,54 @@ + +HelferDB Setup Wizard +--------------------- + +Diese Seite führt durch die Einrichtung der Helferdatenbank. + +.. raw:: html + + + + +Schritt 1: Logindaten für Datenbank eingeben +............................................ + +Bitte hier zunächst die Logindaten für die Datenbank eingeben. Es muss in der Regel nur ein Passwort vergeben werden und die anderen beiden Werte können unverändert bleiben. + +.. raw:: html + +
    + +
    +
    +
    +
    +
    +
    + +
    + + + + +.. raw:: html + + + + +Schritt 2: Datenbank einrichten +............................... + +Bitte zunächst mariadb einrichten (oder mysql) und dazu folgendes in der Shell (z.b. bash) eingeben: + +.. code:: bash + + sudo apt-get install mariadb + + +.. raw:: html + + diff --git a/html/index.php b/html/index.php index 0c96efd..8981092 100644 --- a/html/index.php +++ b/html/index.php @@ -16,14 +16,9 @@ SESSION_START(); require_once 'konfiguration.php'; require 'SQL.php'; -$db_link = mysqli_connect( - MYSQL_HOST, - MYSQL_BENUTZER, - MYSQL_KENNWORT, - MYSQL_DATENBANK -); +$pdo = ConnectDB(); -DatenbankAufDeutsch($db_link); +DatenbankAufDeutsch($pdo); require '_login.php'; diff --git a/html/konfiguration.php b/html/konfiguration.php index 4c967da..fcb2ca4 100644 --- a/html/konfiguration.php +++ b/html/konfiguration.php @@ -1,8 +1,8 @@ "SET NAMES 'utf8'", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, );