PHP pro Minute MySql Wert updaten

Seppi123

Erfahrenes Mitglied
Hallo ihr Lieben ;)

Ich erstelle derzeit ein Browsergame und kam zum neuen Fehler:

Ich will, weil man sich auf der Karte frei bewegen kann, Ausdauer (stamina) Punkte pro Minute +1 auffüllen lassen.
Leider geht dies nicht so wie ich es wollte hier einmal mein Code:

(Datenbank Tabelle endstamina => Wert: Timestamp)

PHP:
	/*
			Funktions Variablen
			*/
			$timestamp = time();
			$endstamina = time()+(1*60);
			/* Ersteinmal für den User die Stamina und das letzte aktualisieren ausgeben */
			$ergebnis = mysql_query("SELECT * FROM phaos_characters WHERE id= '".$this->id."'");
			while($row = mysql_fetch_object($ergebnis))
			{
			$endstamina2 = $row->endstamina;
			$stamina = $row->stamina;
			}
			/* Prüfen ob Last Update leer ist oder nicht */
			if ($endstamina2 == 0 Or $endstamina2 == "0000-00-00 00:00:00" Or $endstamina2 == "") {
			// Leer, updaten und endstamina auf jetzt setzen
			$stamina = $stamina + 1;
			$update = "UPDATE phaos_characters Set endstamina = '$endstamina' WHERE username = '".$this->id."'";
			mysql_query($update);
			$update = "UPDATE phaos_characters Set stamina = '$stamina' WHERE username = '".$this->id."'";
			mysql_query($update);
			}
			else {
			// Nicht leer, nun prüfen wann geupdatet wurde und ggf. updaten
			$stamina = $stamina + 1;
			if ($timestamp >= $endstamina2){
			$update = "UPDATE phaos_characters Set endstamina = '$endstamina' WHERE username = '".$this->id."'";
			mysql_query($update);
			$update = "UPDATE phaos_characters Set stamina = '$stamina' WHERE username = '".$this->id."' AND endstamina='".$endstamina2."'";
			mysql_query($update);
			}
			}

Leider ändert sich nichts in der Datenbank:

endstamina = 0000-00-00 00:00:00 (Also der Standartwert von der Timestamp)
 
Zuletzt bearbeitet:
Hallo.
Korrigiert mich wenn ich falsch liegen sollte.
Meines Wissens müstte dazu das Script jede Minute neu geladen werden.
Gruß
jochberger
 
Wird es auch via Ajax ;) bzw. es wird jede Sekunde neu geladen :)

Es war nur die Funktion (ja ich hab function auto_stamina(){} vergessen) , die mir sorgen bereitet
 
Du hast scheinbar das Feld als Typ DATETIME gesetzt. Zumindest vergleichst du auf das Datumsformat. Ein timestamp ist aber einfach nur ein Integer. Da scheint dein Denkfehler zu liegen.

Und nochwas: Wenn du nur einen Datensatz holst, brauchst du keine Whileschleife (bei IDs mit eindeutiger Zuordnung ist das z.B. der Fall).

Wenn du das Feld als Integer(12) deklarierst, sollte es eigentlich so gehen:

(Dabei setze ich voraus, das stamina auch vom Typ INT ist, oder von einem anderen numerischen Typ).

PHP:
// Code Optimiert
$timestamp = time();
$endstamina = time()+(1*60);
/* Ersteinmal für den User die Stamina und das letzte aktualisieren ausgeben */
$ergebnis = mysql_query("SELECT endstamina FROM phaos_characters WHERE id= '".$this->id."'");
$row = mysql_fetch_object($ergebnis);
            $endstamina2 = $row->endstamina;
            $stamina = $row->stamina;
/* Prüfen ob Last Update leer ist oder nicht */
if ($row->endstamina == 0) {
  // Leer, updaten und endstamina auf jetzt setzen
  $update = "UPDATE phaos_characters Set endstamina = '$endstamina' WHERE username = '".$this->id."'";
  mysql_query($update);
            $update = "UPDATE phaos_characters Set stamina = stamina+1 WHERE username = '".$this->id."'";
  mysql_query($update);
}
else {
  // Nicht leer, nun prüfen wann geupdatet wurde und ggf. updaten            
  if ($timestamp >= $row->endstamina){
    $update = "UPDATE phaos_characters Set endstamina = '$endstamina' WHERE username = '".$this->id."'";
  mysql_query($update);
  $update = "UPDATE phaos_characters Set stamina = stamina+1 WHERE username = '".$this->id."'";
  mysql_query($update);
}

Was mir noch auffällt:
Du vergleichst mal die id mit $this->id, dann wieder den usernamen. Da scheint bei Dir was durcheinander zu geraten. Immer nach IDs gehen, nie nach Nutzernamen, da eine ID während des gesamten Spielprozesses eindeutig bleibt, ein Name sich jedoch ggf. ändern kann, und du dann alle Tabellen updaten musst, was zu fiesen Fehlern führt, sobald du eine vergisst.
 
Ich bin voll der Idiot ja ich habs bemerkt habe die ID bei den 4 letzen Abfragen mit dem Username verglichen >.<

Danke dir ;)
 

Neue Beiträge

Zurück