From 699781d1306f45ef83038a408a6ea40ecd303819 Mon Sep 17 00:00:00 2001 From: Martin Ambrus Date: Sun, 19 Nov 2017 15:17:24 +0100 Subject: [PATCH] refactor: for loops optimized #313 --- GameEngine/Automation.php | 25 +++++++- GameEngine/Database.php | 124 ++++++++++++++++++++++++++------------ GameEngine/Message.php | 59 +++++++++++++++--- GameEngine/Village.php | 4 +- create_account.php | 7 +-- sysmsg.php | 16 +---- 6 files changed, 166 insertions(+), 69 deletions(-) diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index ba350b3b..94fa095e 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -3260,9 +3260,17 @@ class Automation { $end = ($database->getUserField($to['owner'],'tribe',0)*10); $j='1'; + $units = []; + $amounts = []; + $modes = []; + for($i=$start;$i<=$end;$i++){ - $database->modifyEnforce($post['ckey'],$i,$post['t'.$j.''],0); $j++; + $units[] = $i; + $amounts[] = $post['t'.$j.'']; + $modes[] = 0; + $j++; } + $database->modifyEnforce($post['ckey'], $units, $amounts, $modes); //get cord $from = $database->getVillage($enforce['from']); @@ -5635,8 +5643,13 @@ class Automation { //Put all true dens to 0 $query="SELECT id FROM ".TB_PREFIX."users ORDER BY id+0 DESC"; $result=mysqli_query($GLOBALS['link'],$query); + $userIDs = []; for ($i=0; $row=mysqli_fetch_row($result); $i++){ - mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ap=0, dp=0,Rc=0,clp=0, RR=0 WHERE id = ".(int) $row[0]); + $userIDs[] = (int) $row[0]; + } + + if (count($userIDs)) { + mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ap=0, dp=0,Rc=0,clp=0, RR=0 WHERE id IN(".implode(', ', $userIDs).")"); } //Start alliance Medals wooot @@ -5708,8 +5721,14 @@ class Automation { $query="SELECT id FROM ".TB_PREFIX."alidata ORDER BY id+0 DESC"; $result=mysqli_query($GLOBALS['link'],$query); + + $aliIDs = []; for ($i=0; $row=mysqli_fetch_row($result); $i++){ - mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."alidata SET ap=0, dp=0, RR=0, clp=0 WHERE id = ".(int) $row[0]); + $aliIDs[] = (int) $row[0]; + } + + if (count($aliIDs)) { + mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."alidata SET ap=0, dp=0,RR=0,clp=0 WHERE id IN(".implode(', ', $aliIDs).")"); } $q = "UPDATE ".TB_PREFIX."config SET lastgavemedal=".$time; diff --git a/GameEngine/Database.php b/GameEngine/Database.php index 83d4a936..3cd8f0e5 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -3594,12 +3594,15 @@ class MYSQLi_DB implements IDbConnection { } function clearExpansionSlot($id) { - list($id) = $this->escape_input((int) $id); + $id = (int) $id; + $pairs = []; for($i = 1; $i <= 3; $i++) { - $q = "UPDATE " . TB_PREFIX . "vdata SET exp" . $i . "=0 WHERE exp" . $i . "=" . $id; - mysqli_query($this->dblink,$q); + $pairs[] = 'exp'.$i.' = 0'; } + + $q = "UPDATE " . TB_PREFIX . "vdata SET ".implode(',', $pairs)." WHERE wref = " . $id; + mysqli_query($this->dblink,$q); } // no need to cache this method @@ -3691,16 +3694,28 @@ class MYSQLi_DB implements IDbConnection { } function setArchived($id) { - list($id) = $this->escape_input((int) $id); + if (!is_array($id)) { + $id = [$id]; - $q = "UPDATE " . TB_PREFIX . "mdata set archived = 1 where id = $id"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + + $q = "UPDATE " . TB_PREFIX . "mdata set archived = 1 where id IN(".implode(', ', $id).")"; return mysqli_query($this->dblink,$q); } function setNorm($id) { - list($id) = $this->escape_input((int) $id); + if (!is_array($id)) { + $id = [$id]; - $q = "UPDATE " . TB_PREFIX . "mdata set archived = 0 where id = $id"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + + $q = "UPDATE " . TB_PREFIX . "mdata set archived = 0 where id IN(".implode(',', $id).")"; return mysqli_query($this->dblink,$q); } @@ -3718,8 +3733,7 @@ class MYSQLi_DB implements IDbConnection { function getMessage($id, $mode) { global $session; - list($id, $mode) = $this->escape_input((int) $id, $mode); - + $mode = (int) $mode; // update $id if we should show Support messages for Admins and we are an admin if ( ($session->access == MULTIHUNTER || $session->access == ADMIN) @@ -3729,6 +3743,18 @@ class MYSQLi_DB implements IDbConnection { $id = $id . ', 1'; } + if (in_array($mode, [5,7,8])) { + if (!is_array($id)) { + $id = [$id]; + + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + } else { + $id = (int) $id; + } + global $session; switch($mode) { case 1: @@ -3744,16 +3770,16 @@ class MYSQLi_DB implements IDbConnection { $q = "UPDATE " . TB_PREFIX . "mdata set viewed = 1 where id = $id AND target IN(".((($session->access == MULTIHUNTER || $session->access == ADMIN) && ADMIN_RECEIVE_SUPPORT_MESSAGES) ? $session->uid.',1' : $session->uid).")"; break; case 5: - $q = "UPDATE " . TB_PREFIX . "mdata set deltarget = 1,viewed = 1 where id = $id"; + $q = "UPDATE " . TB_PREFIX . "mdata set deltarget = 1,viewed = 1 where id IN(".implode(', ', $id).")"; break; case 6: $q = "SELECT * FROM " . TB_PREFIX . "mdata where target IN($id) and send = 0 and archived = 1"; break; case 7: - $q = "UPDATE " . TB_PREFIX . "mdata set delowner = 1 where id = $id"; + $q = "UPDATE " . TB_PREFIX . "mdata set delowner = 1 where id IN(".implode(', ', $id).")"; break; case 8: - $q = "UPDATE " . TB_PREFIX . "mdata set deltarget = 1,delowner = 1,viewed = 1 where id = $id"; + $q = "UPDATE " . TB_PREFIX . "mdata set deltarget = 1,delowner = 1,viewed = 1 where IN(".implode(', ', $id).")"; break; case 9: $q = "SELECT * FROM " . TB_PREFIX . "mdata WHERE target IN($id) and send = 0 and archived = 0 and deltarget = 0 ORDER BY time DESC"; @@ -3774,23 +3800,41 @@ class MYSQLi_DB implements IDbConnection { } function unarchiveNotice($id) { - list($id) = $this->escape_input((int) $id); + if (!is_array($id)) { + $id = [$id]; - $q = "UPDATE " . TB_PREFIX . "ndata set ntype = archive, archive = 0 where id = $id"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + + $q = "UPDATE " . TB_PREFIX . "ndata set ntype = archive, archive = 0 where id IN(".implode(',', $id).")"; return mysqli_query($this->dblink,$q); } function archiveNotice($id) { - list($id) = $this->escape_input((int) $id); + if (!is_array($id)) { + $id = [$id]; - $q = "update " . TB_PREFIX . "ndata set archive = ntype, ntype = 9 where id = $id"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + + $q = "update " . TB_PREFIX . "ndata set archive = ntype, ntype = 9 where id IN(".implode(',', $id).")"; return mysqli_query($this->dblink,$q); } function removeNotice($id) { - list($id) = $this->escape_input((int) $id); + if (!is_array($id)) { + $id = [$id]; - $q = "UPDATE " . TB_PREFIX . "ndata set del = 1,viewed = 1 where id = $id"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + } + + $q = "UPDATE " . TB_PREFIX . "ndata set del = 1,viewed = 1 where id IN(".implode(',', $id).")"; return mysqli_query($this->dblink,$q); } @@ -5194,27 +5238,31 @@ class MYSQLi_DB implements IDbConnection { // no need to cache this method function getUnitsNumber($vid, $use_cache = false) { - list($vid) = $this->escape_input((int) $vid); + list( $vid ) = $this->escape_input( (int) $vid ); + + $dbarray = $this->getUnit( $vid ); + $totalunits = 0; + $movingunits = $this->getVillageMovement( $vid ); + for ( $i = 1; $i <= 50; $i ++ ) { + $totalunits += $dbarray[ 'u' . $i ]; + } + + $totalunits += $dbarray['hero']; + $movingunits = $this->getVillageMovement( $vid ); + $reinforcingunits = $this->getEnforceArray( $vid, 1 ); + $owner = $this->getVillageField( $vid, "owner" ); + $ownertribe = $this->getUserField( $owner, "tribe", 0 ); + $start = ( $ownertribe - 1 ) * 10 + 1; + $end = ( $ownertribe * 10 ); + + for ( $i = $start; $i <= $end; $i ++ ) { + $totalunits += $movingunits[ 'u' . $i ]; + $totalunits += $reinforcingunits[ 'u' . $i ]; + } + + $totalunits += $movingunits['hero']; + $totalunits += $reinforcingunits['hero']; - $dbarray = $this->getUnit($vid); - $totalunits = 0; - $movingunits = $this->getVillageMovement($vid); - for($i=1;$i<=50;$i++){ - $totalunits += $dbarray['u'.$i]; - } - $totalunits += $dbarray['hero']; - $movingunits = $this->getVillageMovement($vid); - $reinforcingunits = $this->getEnforceArray($vid,1); - $owner = $this->getVillageField($vid,"owner"); - $ownertribe = $this->getUserField($owner,"tribe",0); - $start = ($ownertribe-1)*10+1; - $end = ($ownertribe*10); - for($i=$start;$i<=$end;$i++){ - $totalunits += $movingunits['u'.$i]; - $totalunits += $reinforcingunits['u'.$i]; - } - $totalunits += $movingunits['hero']; - $totalunits += $reinforcingunits['hero']; return $totalunits; } diff --git a/GameEngine/Message.php b/GameEngine/Message.php index 55ea1b10..6c34592e 100755 --- a/GameEngine/Message.php +++ b/GameEngine/Message.php @@ -236,75 +236,118 @@ class Message { private function removeMessage($post) { global $database,$session; $post = $database->escape($post); + + $mode5updates = []; + $mode7updates = []; + $mode8updates = []; + for($i = 1; $i <= 10; $i++) { if ( isset( $post[ 'n' . $i ] ) ) { $message1 = mysqli_query( $GLOBALS['link'], "SELECT target, owner FROM " . TB_PREFIX . "mdata where id = " . (int) $post[ 'n' . $i ] . "" ); $message = mysqli_fetch_array( $message1 ); if ( $message['target'] == $session->uid && $message['owner'] == $session->uid ) { - $database->getMessage( $post[ 'n' . $i ], 8 ); + $mode8updates[] = $post[ 'n' . $i ]; } else if ( $message['target'] == $session->uid ) { - $database->getMessage( $post[ 'n' . $i ], 5 ); + $mode5updates[] = $post[ 'n' . $i ]; } else if ( $message['owner'] == $session->uid ) { - $database->getMessage( $post[ 'n' . $i ], 7 ); + $mode7updates[] = $post[ 'n' . $i ]; } } } + + if (count($mode5updates)) { + $database->getMessage( $mode5updates, 5 ); + } + + if (count($mode7updates)) { + $database->getMessage( $mode7updates, 7 ); + } + + if (count($mode8updates)) { + $database->getMessage( $mode8updates, 8 ); + } + header("Location: nachrichten.php"); exit; } private function archiveMessage($post) { global $database; + + $archIDs = []; for($i = 1; $i <= 10; $i++) { if(isset($post['n' . $i])) { - $database->setArchived($post['n' . $i]); + $archIDs[] = $post['n' . $i]; } } + + $database->setArchived($archIDs); + header("Location: nachrichten.php"); exit; } private function unarchiveMessage($post) { global $database; + + $normIDs = []; + for($i = 1; $i <= 10; $i++) { if(isset($post['n' . $i])) { - $database->setNorm($post['n' . $i]); + $normIDs[] = $post['n' . $i]; } } + $database->setNorm($normIDs); + header("Location: nachrichten.php"); exit; } private function removeNotice($post) { global $database; + + $removeIDs = []; + for($i = 1; $i <= 10; $i++) { if(isset($post['n' . $i])) { - $database->removeNotice($post['n' . $i], 5); + $removeIDs[] = $post['n' . $i]; } } + $database->removeNotice($removeIDs); + header("Location: berichte.php"); exit; } private function archiveNotice($post) { global $database; + + $archiveIDs = []; + for($i = 1; $i <= 10; $i++) { if(isset($post['n' . $i])) { - $database->archiveNotice($post['n' . $i]); + $archiveIDs[] = $post['n' . $i]; } } + $database->archiveNotice($archiveIDs); + header("Location: berichte.php"); exit; } private function unarchiveNotice($post) { global $database; + + $unarchIDs = []; + for($i = 1; $i <= 10; $i++) { if(isset($post['n' . $i])) { - $database->unarchiveNotice($post['n' . $i]); + $unarchIDs[] = $post['n' . $i]; } } + $database->unarchiveNotice($unarchIDs); + header("Location: berichte.php"); exit; } diff --git a/GameEngine/Village.php b/GameEngine/Village.php index 871c9d91..9994d224 100755 --- a/GameEngine/Village.php +++ b/GameEngine/Village.php @@ -235,7 +235,9 @@ class Village { $bakery = $this->resarray['f'.$i]; } } - for($i=0;$i<=count($cropholder)-1;$i++) { $basecrop+= $bid4[$this->resarray[$cropholder[$i]]]['prod']; } + for ( $i = 0; $i <= count( $cropholder ) - 1; $i ++ ) { + $basecrop += $bid4[ $this->resarray[ $cropholder[ $i ] ] ]['prod']; + } $crop = $basecrop + $basecrop * 0.25 * $this->ocounter[3]; if($grainmill >= 1 || $bakery >= 1) { $crop += $basecrop /100 * (isset($bid8[$grainmill]['attri']) ? $bid8[$grainmill]['attri'] : 0) + (isset($bid9[$bakery]['attri']) ? $bid9[$bakery]['attri'] : 0); diff --git a/create_account.php b/create_account.php index c86e2c3e..a3e24728 100644 --- a/create_account.php +++ b/create_account.php @@ -542,12 +542,7 @@ if(isset($_POST['password']) && $_POST['password'] != ""){ $text = preg_replace("'%TEKST%'",ARTEFACT ,$text); fwrite($fh, $text); - $query="SELECT * FROM ".TB_PREFIX."users ORDER BY id DESC"; - $result=mysqli_query($GLOBALS['link'],$query) or die (mysqli_error($database->dblink)); - for ($i=0; $row=mysqli_fetch_row($result); $i++) { - $updateattquery = mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ok = '1' WHERE id = '".$row[0]."'") - or die(mysqli_error($database->dblink)); - } + $query="UPDATE ".TB_PREFIX."users SET ok = 1"; echo "Done"; }elseif(User::exists($database,'Natars')) { diff --git a/sysmsg.php b/sysmsg.php index b20e4c95..2bc84ed8 100644 --- a/sysmsg.php +++ b/sysmsg.php @@ -18,12 +18,7 @@ $max_per_pass = 1000; if (mysqli_num_rows(mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users WHERE access = 9 AND id = ".$session->uid)) != '1') die("Hacking attempt!"); if(isset($_GET['del'])){ - $query="SELECT * FROM ".TB_PREFIX."users ORDER BY id DESC"; - $result=mysqli_query($GLOBALS['link'],$query) or die (mysqli_error($database->dblink)); - for ($i=0; $row=mysqli_fetch_row($result); $i++) { - $updateattquery = mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ok = '0' WHERE id = '".$row[0]."'") - or die(mysqli_error($database->dblink)); - } + mysqli_query($GLOBALS['link'], "UPDATE ".TB_PREFIX."users SET ok = 0"); } if (@$_POST['submit'] == "Send") @@ -33,7 +28,6 @@ if (@$_POST['submit'] == "Send") $NextStep = true; } - if (@isset($_POST['confirm'])) { if ($_POST['confirm'] == 'No' ) $Interupt = true; @@ -50,12 +44,8 @@ if (@isset($_POST['confirm'])) // $text = utf8_encode($text); fwrite($fh, $text); - $query="SELECT * FROM ".TB_PREFIX."users ORDER BY id DESC"; - $result=mysqli_query($GLOBALS['link'],$query) or die (mysqli_error($database->dblink)); - for ($i=0; $row=mysqli_fetch_row($result); $i++) { - $updateattquery = mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ok = '1' WHERE id = '".$row[0]."'") - or die(mysqli_error($database->dblink)); - } + mysqli_query($GLOBALS['link'], "UPDATE ".TB_PREFIX."users SET ok = 1"); + $done = true; } else { die("


wrong"); } }}