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("