Value aus MySQL mit PHP...
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
befehl
code
dank
datei
ergeben code
erreichen
frage
funktion
gleiche aktion
gold
hilfe
klausel
problem
sagen
sammeln
set
umsetzen
update
verhindern
wissensstand
-
Hi,
mal eine Frage...
Ich habe hier eine CronJob - PHP Datei, die bei den Usern bestimmte Felder der MySQL wieder auffüllt.
Jetzt ist aber das Problem da, dass wenn der User sagen wir mal 300 Turns hat immer mehr bekommt also unendlich viele Turns sammeln kann.
Das will ich jedoch verhindern...
Da habe ich mir folgendes gedacht:
Der CronJob prüft vorm Hochzählen, ob der Wert bereits 300 erreicht, wenn man 1 hinzufügt. Wenn ja, wird entsprechend weniger hinzugefügt an Turns, so dass der Wert niemals mehr als 300 erreichen kann.
Da ich das von meinem Wissensstand nicht umsetzen kann, bitte ich euch darum, mir zu helfen.
<? function defSort ($a, $b) { if ($a->DefenseAction == $b->DefenseAction) return 0; return ($a->DefenseAction > $b->DefenseAction) ? -1 : 1; } function atSort ($a, $b) { if ($a->StrikeAction == $b->StrikeAction) return 0; return ($a->StrikeAction > $b->StrikeAction) ? -1 : 1; } function covSort ($a, $b) { if ($a->CovertAction == $b->CovertAction) return 0; return ($a->CovertAction > $b->CovertAction) ? -1 : 1; } function rankFloat ($a, $b) { if ($a->RankFloat == $b->RankFloat) return 0; return ($a->RankFloat < $b->RankFloat) ? -1 : 1; } include "vsys.php"; deleteOldUsers(); $users=getActiveUsers("ID, race, fortificationLevel, siegeLevel, currentSpySkill, trainedAttackSold, trainedAttackMerc, trainedDefSold, trainedDefMerc, untrainedSold, untrainedMerc, spies "); for ($i=0; $i<count($users);$i++){ //print_r($users[$i]);print "<br>"; $users[$i]->StrikeAction=getStrikeAction($users[$i]); $users[$i]->DefenseAction=getDefenseAction($users[$i]); $users[$i]->CovertAction=getCovertAction($users[$i]); $money=getUserIncome($users[$i]); updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1, untrainedSold=untrainedSold+currentUnitProduction "); //echo getStrikeAction($users[$i])."<br>"; //echo getDefenseAction($users[$i])."<br>"; //echo getCovertAction($users[$i])."<br>"; } $users1=$users; usort($users1,"atSort"); //echo "--------------users1---<br>"; //print_r ($users1); $users2=$users; usort($users2,"defSort"); //echo "--------------users2---<br>"; //print_r ($users2); $users3=$users; usort($users3,"covSort"); //echo "--------------users3---<br>"; //print_r ($users3); for ($i=0;$i<count($users1);$i++){ $usersA[$users1[$i]->ID]->ID=$users1[$i]->ID; $usersA[$users1[$i]->ID]->StrikeAction=$i+1; } for ($i=0;$i<count($users2);$i++){ $usersA[$users2[$i]->ID]->DefenseAction=$i+1; } for ($i=0;$i<count($users3);$i++){ $usersA[$users3[$i]->ID]->CovertAction=$i+1; $usersA[$users3[$i]->ID]->RankFloat=($usersA[$users3[$i]->ID]->StrikeAction+$usersA[$users3[$i]->ID]->DefenseAction+$usersA[$users3[$i]->ID]->CovertAction)/3; } usort($usersA,"rankFloat"); for ($i=0;$i<count($usersA);$i++){ //echo $usersA[$i]->RankFloat.";;"; setUserRank($usersA[$i]->ID, $i+1, $usersA[$i]->StrikeAction, $usersA[$i]->DefenseAction , $usersA[$i]->CovertAction); } setLastTurnTime(time()); updateMercenary(" attackSpecCount=attackSpecCount+'{$conf['mercenaries_per_turn']}', defSpecCount =defSpecCount +'{$conf['mercenaries_per_turn']}', untrainedCount =untrainedCount +'{$conf['mercenaries_per_turn']}' "); ?>
Danke für eure Hilfe :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sorry, aber ich versteh das nicht :
cheapsms schrieb:
Der CronJob prüft vorm Hochzählen, ob der Wert bereits 300 erreicht, wenn man 1 hinzufügt. Wenn ja, wird entsprechend weniger hinzugefügt an Turns, so dass der Wert niemals mehr als 300 erreichen kann.
Wenn nie mehr als 300 erreicht werden sollen, warum dann entsprechend weniger drauf? Hä?
Theoretisch kannst du das alles mit einem SQL-Befehl machen, wenn ich dich richtig verstanden habe:
UPDATE table SET turns=turns+1 WHERE turns < 300
-
Der Wert soll nicht höher als 300 erreichen.
Das wollte ich in die Cron.php einbauen :)
Gruß -
Ich seh bei deinem Code irgendwie nicht durch. Die Informationen holst du doch aus einer Datenbank, oder? Wenn dem so ist, kannst du doch solche Befehle, wie den von mir eben verwendeten nutzen. Das macht auch das Ganze etwas kürzer und sicherlich auch performanter auch wenn dass bei einem Cron ja nicht so die Rolle spielt.
Sag einfach mal welche Werte du jetzt genau wie verändern willst. Also nur für die turns nimm halt den UPDATE Query von eben, aber ich denke mal, dass du noch viel mehr ändern willst. Lässt sich sicherlich einiges direkt vom Datenbank Server erledigen. -
Ich habe leider keinen plan, wie ich dein code in meinem integrieren kann, dass es auch funktioniert.
wenn ich es so mache:
updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1 < 300, untrainedSold=untrainedSold+currentUnitProduction ");
bleibt der wert in der mysql immer bei 1, ist ja klar.
er soll pro ausführung des cronjobs +1 bei attackturn hinzufügen, diesen wert aber nicht über 300 steigen lassen.
Danke!
Gruß
Beitrag zuletzt geändert: 21.5.2009 20:16:50 von cheapsms -
cheapsms schrieb:
updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1 < 300, untrainedSold=untrainedSold+currentUnitProduction ");
Ich kann mit dieser Funktion nichts anfangen... Rufst du jeden User ab und führst dann immer die gleiche Aktion durch, oder ändert sich der Wert $money? $money sollte integer sein also brauchst du ' nicht.
Was soll das bitte ergeben:attackTurns = attackTurns+1 < 300,
Wo ist deine WHERE Klausel?
Poste mal bitte die Funktion updateUser -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage