From 93b38cfc4725d9279117db20e680d45bccfabc33 Mon Sep 17 00:00:00 2001 From: foin137 <62767760+foin137@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:44:24 +0100 Subject: [PATCH] Handle mysqli errors - Handle mysql errors that are no longer silenced per default for new php versions - Handled error when log file cannot be created --- Werwolf.php | 32 +++++++++++---- includes/functions.php | 92 ++++++++++++++++++++++++------------------ 2 files changed, 78 insertions(+), 46 deletions(-) diff --git a/Werwolf.php b/Werwolf.php index 8c9771c..f7541d1 100644 --- a/Werwolf.php +++ b/Werwolf.php @@ -143,8 +143,14 @@ p#liste { else { //Schauen, ob es auch einen Eintrag zu diesem Spiel in der Datenbank gibt... - $alleres = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - if(isset($alleres->num_rows)) + $spiel_existiert = True; + try{ + $alleres = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + } + catch (Exception $e) { + $spiel_existiert = False; + } + if($spiel_existiert && isset($alleres->num_rows)) { //Schauen, ob es auch mich als Spieler gibt und meine verifizierungsnr stimmt $spielerResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND verifizierungsnr = ".(int)$_COOKIE['verifizierungsnr']); @@ -1513,8 +1519,14 @@ p#liste { } $spielID = rand(10000,99999); //nachschauen, ob ein Spiel mit dieser Nummer bereits existiert - $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - if(isset($res->num_rows)){ + $existiert = False; + try { + $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + } + catch (mysqli_sql_exception $e){ + $existiert = True; + } + if(!$existiert && isset($res->num_rows)){ //Tabelle existiert }else{ @@ -1635,8 +1647,14 @@ p#liste { if ($_POST['ihrName'] != "" && strpos($_POST['ihrName'],"$")===false && strpos($_POST['ihrName'],";")===false && strpos($_POST['ihrName'],'"')===false && strpos($_POST['ihrName'],"'")===false && strpos($_POST['ihrName'],"=")===false) { //Name wurde eingegeben. Existiert auch ein Spiel dieser Nummer? - $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - if(isset($res->num_rows)) + $existiert = False; + try{ + $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + } + catch(mysqli_sql_exception $e){ + $existiert = True; + } + if(!$existiert && isset($res->num_rows)) { //Ein Spiel dieser Nummer existiert! $verboteneNamen = array("niemanden","niemand","keinen","keiner","dorfbewohner","werwolf","seher","seherin","hexe","hexer","jäger","amor","beschützer","paranormaler ermittler","lykantroph","lykantrophin","spion","spionin","mordlustiger","mordlustige","pazifist","pazifistin","alter mann","alter","alte","alte frau","die alten","alten"); @@ -1645,6 +1663,7 @@ p#liste { $stmt->bind_param('s',$_POST['ihrName']); $stmt->execute(); $nameRes = $stmt->get_result(); + $stmt->close(); if ($nameRes->num_rows <= 0 && !in_array(strtolower($_POST['ihrName']),$verboteneNamen)) { //Name gültig @@ -1696,7 +1715,6 @@ p#liste { { echo "

Der angegebene Name ist bereits vorhanden oder ungültig

"; } - $stmt->close(); } else { diff --git a/includes/functions.php b/includes/functions.php index 8206284..ea2e954 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -30,8 +30,14 @@ function loescheAlteSpiele($mysqli) for ($i = 10000; $i<= 99999; $i++) { - $alleres = $mysqli ->Query("SELECT * FROM $i"."_game"); - if(isset($alleres->num_rows)) + $existiert = True; + try{ + $alleres = $mysqli ->Query("SELECT * FROM $i"."_game"); + } + catch (mysqli_sql_exception $e){ + $existiert = False; + } + if($existiert && isset($alleres->num_rows)) { $temp = $alleres->fetch_assoc(); if ($temp['letzterAufruf'] < $zeitpunkt) @@ -1658,41 +1664,45 @@ function writeGameToLog($mysqli) $spielID = $_COOKIE['SpielID']; $fileName = "log/Werwolf_log_".date("Y_m").".log"; $myfile = fopen($fileName, "a"); - fwrite($myfile,"\n--- SPIEL BEENDET --- \n"); - fwrite($myfile,"SpielID: $spielID \n"); - fwrite($myfile,"SpielEnde: ".date("d.m.Y, H:i:s")."\n"); - //Alle Spieler hineinschreiben: - fwrite($myfile,"Spieler:\n"); - $playerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - while ($temp = $playerQ->fetch_assoc()) - { - fwrite($myfile,$temp['name']."\n"); - } - fwrite($myfile,"Spielverlauf:\n"); - $gameAssoc = gameAssoc($mysqli); - $mitUmbruch = str_replace("
","\n",$gameAssoc['log']); - fwrite($myfile,$mitUmbruch); + if ($myfile){ + fwrite($myfile,"\n--- SPIEL BEENDET --- \n"); + fwrite($myfile,"SpielID: $spielID \n"); + fwrite($myfile,"SpielEnde: ".date("d.m.Y, H:i:s")."\n"); + //Alle Spieler hineinschreiben: + fwrite($myfile,"Spieler:\n"); + $playerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + while ($temp = $playerQ->fetch_assoc()) + { + fwrite($myfile,$temp['name']."\n"); + } + fwrite($myfile,"Spielverlauf:\n"); + $gameAssoc = gameAssoc($mysqli); + $mitUmbruch = str_replace("
","\n",$gameAssoc['log']); + fwrite($myfile,$mitUmbruch); - //Schreibe noch die Überlebenden - fwrite($myfile,"Die Überlebenden:\n"); - $lebendQuery = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); - while ($temp = $lebendQuery->fetch_assoc()) - { - fwrite($myfile,$temp['name']."(".nachtidentitaetAlsString($temp['nachtIdentitaet'],$mysqli).")\n"); + //Schreibe noch die Überlebenden + fwrite($myfile,"Die Überlebenden:\n"); + $lebendQuery = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); + while ($temp = $lebendQuery->fetch_assoc()) + { + fwrite($myfile,$temp['name']."(".nachtidentitaetAlsString($temp['nachtIdentitaet'],$mysqli).")\n"); + } + fwrite($myfile,"--- ENDE DES SPIELLOGS ---\n"); + fclose($myfile); } - fwrite($myfile,"--- ENDE DES SPIELLOGS ---\n"); - fclose($myfile); } function writeGameToLogSpielErstellen($mysqli, $spielID, $name) { $fileName = "log/Werwolf_log_".date("Y_m").".log"; $myfile = fopen($fileName, "a"); - fwrite($myfile,"\n--- NEUES SPIEL ERSTELLT --- \n"); - fwrite($myfile,"SpielID: $spielID \n"); - fwrite($myfile,"Zeit: ".date("d.m.Y, H:i:s")."\n"); - fwrite($myfile,"Name des Erstellers: $name \n"); - fclose($myfile); + if ($myfile){ + fwrite($myfile,"\n--- NEUES SPIEL ERSTELLT --- \n"); + fwrite($myfile,"SpielID: $spielID \n"); + fwrite($myfile,"Zeit: ".date("d.m.Y, H:i:s")."\n"); + fwrite($myfile,"Name des Erstellers: $name \n"); + fclose($myfile); + } } function checkeSiegbedingungen($mysqli) @@ -1813,11 +1823,13 @@ function setBereit($mysqli,$spielerID,$bereit) function gameAssoc($mysqli) { $spielID = $_COOKIE['SpielID']; - if ($gameRes = $mysqli->Query("SELECT * FROM $spielID"."_game")) - { - $gameA = $gameRes->fetch_assoc(); - return $gameA; - } + try{ + if ($gameRes = $mysqli->Query("SELECT * FROM $spielID"."_game")) + { + $gameA = $gameRes->fetch_assoc(); + return $gameA; + } + }catch(mysqli_sql_exception $e) {} return false; } @@ -1835,11 +1847,13 @@ function getName($mysqli, $spielerID) //Gibt den Namen des Spielers mit der $spielerID zurück $spielID = $_COOKIE['SpielID']; $spielerID = (int)$spielerID; - if ($res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $spielerID")) - { - $temp = $res->fetch_assoc(); - return $temp['name']; - } + try{ + if ($res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $spielerID")) + { + $temp = $res->fetch_assoc(); + return $temp['name']; + } + } catch(mysqli_sql_exception $e) {} return "Unknown"; }