Bei Wert x soll etwas passieren

Indialasca

Grünschnabel
Hiho ihrz xD

Sorry für das blöde Topic aber mir fiel nichts passenderes ein ^^
Ich habe angefangen PHP zu lernen und da ich allgemein durch pure Theorie nichts begreife, übe ich anhand von Versuch und Irrtum. Deswegen brauche ich für alles natürlich länger, aber egal ^^

Folgendes Problem:
Ich möchte ein kleines Spiel schreiben (wirklich nichts weltbewegendes) in dem man Pferde halten und züchten kann usw. Das Spiel basiert auf einer Art Counter, der alle 3h mit einem Cronjob aufgerufen wird und brav addiert bzw subtrahiert.

Code:
$sql = ("SELECT * FROM gestuet");
$result = db_query($sql);
$gestuet = db_fetch_assoc($result);

Trächtigkeit sieht zB so aus:
Code:
if ($gestuet['traechtig1']>1){
$sql = "UPDATE gestuet SET traechtig1=traechtig1-1 WHERE box1>10 AND box1<19 AND traechtig1>0";
db_query($sql) or die(db_error(LINK));}

Alterungsprozess so:
Code:
if ($gestuet['alter6']<=5475){
$sql = "UPDATE gestuet SET alter6=alter6+1 WHERE box6>1 AND alter6<5476";
db_query($sql) or die(db_error(LINK));}

Theoretisch funktioniert beides, zumindest wird alle 3h global abgezogen und hinzugezählt.

Jetzt kommt das eigentliche Problem:
Code:
if ($gestuet['traechtig1']==1){
$sql = ("SELECT * FROM gestuet WHERE traechtig1='1'");
$result = db_query($sql);
$geburt = db_fetch_assoc($result);
...
Es wird zwar brav bis 1 abgezogen, aber passieren tut an dieser Stelle nichts O_o.
Was soll passieren?
Sobald traechtigx den Wert 1 hat, soll der folgende Code loslegen (ich füge ihn jetzt aber nicht ein, da unwichtig). Was genau ist daran falsch?
Ich habe den Code jetzt ein paar Monate am laufen, um ihn bugfrei zu machen und ich schätze, ich habe alles bis auf dieses Problem allmählich selbst gelöst. Ich habe absolut keinen Schimmer, woran es liegen könnte, aber ich habe den Verdacht, dass es etwas total lächerliches sein muss xD Vielleicht sieht es ja jemand auf Anhieb und verrät mir die Lösung.

LG
 
Ein paar MONATE? x__X

Schreibe vor dem if mal "echo $gestuet['traechtig1'];" und rufe dem Skript per Hand auf, um auszulesen ob der Wert wirklich 1 ist. Ansonst würde ich den Inhalt der HashMap in eine einfache Variable laden, die spinnen bei PHP manchmal rum.

Und vergiss nicht die Funktion um reife Pferde zu Leberkäse weiterzuverarbeiten, irgendwo muss ja das Geld für die Zucht herkommen.
 
Japp ^^ Monate xD
Das passiert halt, wenn man nur im Urlaub wirklich Zeit hat zum lernen.
Hinzu kommt die Laufzeit des Codes:
3h (1 Spieltag) * 5475 (15 Spieljahre) für das Maximalalter Bzw. den Zeitpunkt, wann das Hotte stirbt
3h (1 Spieltag) * 330 (11 Spielmonate) für den Zeitpunkt, wann die Stute fohlt
usw.
Nein, das bedeutet nicht, dass ich zu doof bin um den Code mit kürzeren Laufzeiten zu testen xD das habe ich gemacht, allerdings kommt man so auch nicht immer zu einer Lösung. In meinem Fall bleibt die Geburtsroutine bei 1 stehen und es passiert nichts weiter.

Zu deinen Vorschlägen:
Ja, so kontrolliere ich meine Gehversuche sonst auch ^^ also mit einer Ausgabe, allerdings wird das hier nicht allzuviel bringen, denke ich.
Warum?
Weil der Code global angewendet wird, d.h. auf alle Benutzer, die sich die Tabelle gestuet freigeschaltet haben. Zumindest sollte er das. Vielleicht hätte ich das noch dazuschreiben sollen, sorry, mein Fehler. Dennoch danke für diesen Vorschlag.

Was das andere betrifft, so meinst du also ~ folgendes:
$geburtstag = 1;
if ($gestuet['traechtig1']==$geburtstag){...}?
Klingt interessant ^^ Ich merke, Faulheit blockiert lol ich werde es mal ausprobieren, danke und was den Leberkäse betrifft: Also wenn, dann bitte Bouletten :P
 
Nein, ich meinte es umgekehrt:

$geburtstag = $gestuet['traechtig1'];
if (1 == $geburtstag){...}

Verkürzt meiner Meinung nach auch den Source und macht ihm übersichtlicher.
Bist du sicher das die if nicht abgearbeitet wird? Vielleicht ist ja auch der Fehler darin, bei Cronjobs hast du ja eigendlich keine richtige Debugmöglichkeit.
Füge mal in die erste Zeile "die();" ein und führe ihm aus. Wenn er die if betritt bricht er so den Skript ab und du merkst dass er doch reinkommt.
 
Nein, ich meinte es umgekehrt:

$geburtstag = $gestuet['traechtig1'];
if (1 == $geburtstag){...}
Habs mal umgeschrieben

Bist du sicher das die if nicht abgearbeitet wird?
Sicher nicht.
Ich begründe meinen Eindruck einfach damit, dass mein Code so aussieht:
Code:
$da1=$gestuet['traechtig1'];
//Bei Trächtigkeit täglich 1 Tag runterzählen
if (1<$da1){
$sql = "UPDATE gestuet SET traechtig1=traechtig1-1 WHERE box1>10 AND box1<19 AND traechtig1>'1'";
db_query($sql) or die(db_error(LINK));}

//Fohlen wird geboren 
if (1==$da1){
$sql = ("SELECT * FROM gestuet WHERE traechtig1='1'");
$result = db_query($sql);
$geburt = db_fetch_assoc($result);
...}
Ist jetzt zwar umgeschrieben, aber der 1. Teil mit der Trächtigkeit funktioniert ja und der 2. eben nicht. Daher kann ich es mir nicht anders erklären, als dass beim Teil mit der Geburt nix ausgelöst wird/passiert. Es könnte an der If liegen oder aber auch an der SQL, kein Peil ^^
 
Zurück