Date in eine Variable speichern

rame

Grünschnabel
Moin liebe tutorials community^^

Ich habe ein Problem.
Ich bin ja grade dabei ein kleines Schulprojekt Browsergame zu entwickeln. Es ist ein Hacking Spiel (Virtual).


Nun hänge ich ein wenig fest.
Hier ein Teil..:
PHP:
if($select_ram_final == 0 && $credits_ausgabe_abzug >= 500) {
					$time_old = date('i');
					$time_ram512 = $time_old + 5;
					$time_old2 = date('i');
							
			echo 'Vielen Dank f&uuml;r deinen Einkauf.<br>
			Dir wurden gerade 500 Credits abgezogen<br>';
			echo 'Du hast jetz nur mehr noch '.$credits_ausgabe_abzug.' Credits<br>';
			echo 'Der Ram ist um '.date('h:'.$time_ram512.':s').' fertig';
							
						// 5 Minuten brauchen
					if($time_ram512 == $time_old) {
					
					$sql_cr_update_make = mysql_query($sql_cr_update) or die('Credits konnten nicht geladen werden.');

					
			$buy_ram512_abfrage = mysql_query($buy_ram512_sql);

So, um einen Ram zu kaufen, braucht man eben 500 Credits die aus einer DB gelesen werden.
Wenn man soviele Credits hat, dann schaltet sich eben diese If Abfrage hier oben ein.
Nun, ich möchte das 5 Minuten vergehen. Erst danach soll in die DB eingetragen werden, dass man einen Ram gekauft hat. (512MB)

Wenn ich dies wie oben mache, gehe ich davon aus, dass sich date stetig ändert und so es nie zur 2. Abfrage kommt.

Wie kann ich nun das date in einen String speichern, der sich NICHT verändert, und sich dann abfragen lasst. Komme nicht weiter

Bitte um Hilfe

Vielen Dank :)
 
Hmmm...so muss sich derjenige ja 5 Minuten auf der Seite rum tummeln. Viel zu anstrengend finde ich. Mach doch in der DB eine spalte rein mit timestamp. Da trägst du den timestamp ein, wenn jemand etwas kauft und dadurch kannst du immer abfragen, ob das Item bereits verfügbar ist. Oder soll sich der 5 Min. lang die Seite ansehen?

Naja, falls das nix ist, dann speichere die Zeit einfach als Variable
PHP:
$zeit = date('H:i:s');
oder wenn sich der User auf deiner Seite bewegen darf als $_SESSION. Wobei ich wie gesagt die erste Variante mit der Datenbank bevorzugen würde. Sonst hast ja X-Hundert Sessions am laufen. Außerdem wird es dann schon wider komplizierter, wenn der Spieler weitere Items kauft.

EDIT: Außerdem kann ich mir nicht vorstellen, dass man in der Schule ein ganzes Browser-Game programmieren soll! Dennoch willkommen bei tutorials.de
 
Zuletzt bearbeitet:
$time_old = date('i');
$time_ram512 = $time_old + 5;
$time_old2 = date('i');

Komme nicht 100% draus was du willst...
Also ich denke damit könnte es Probleme geben, weil du nur die Minuten prüfst.
Mit der Funktion mktime() kannst du einen Timestamp ausgeben (glaube ist in Sekunden). Wenn du also orüfen willst, ob 5 Minuten rum sind, prüfe einfach den vorherig in Variable gespeicherten Timestamp mit dem aktuellen, also: mktime()<=($oldtimestamp+(60*5))
 
Würde das auch so ähnlich machen wie von QUEST08 vorgeschlagen.
Den Timestamp in eine Datenbanktabelle Aktionen oder Ereignisse schreiben.
In dieser Tabelle wären dann alle IDs der Gegenstände oder Gebäude oder Kämpfe usw., Der TimestampAnfang und TimestampEnde.

Ein Script was auf der Login oder jeder Seite(include) stehen könnte prüft dann jedes mal ob ein Ereigniss fertig ist also TimestampEnde erreicht ist, löscht das Ereigniss aus der Ereignissdatenbank und aktualisiert dann die betroffenen Datenbanken.

Um zu verhindern das ein User eine riesige Erreignisskette abarbeiten muss, weil 100e User über Nacht Off gegangen sind und man frühs der erste wäre. könnte man mit Hilfe von Cronjob.de alle 5min das Script aufrufen lassen.

So oder so ähnlich habe ich das bei mir vor zu implementieren.
Der Nachteil bei dieser Methode ist allerdings das es recht verschachtelt und von der Logik sehr kompliziert einhergehen könnte.
Der Vorteil ist das die Datenbanken fast in Echtzeit aktualisiert wären auch wenn keiner ON ist. Auch werden bestimmte Zeitlich Szenarien besser abgefangen.
Zb: User1 macht einen Hackangriff auf User2 Dauer 1Stunde und loggt aus.
User 3 greift auch User 2 an aber etwas später. User1 loggt erst 2 Stunden später ein und hätte eigentlich einen erfolgreichen Hackangriff haben müssen.

Es reicht also nicht abzuwarten bis der User sich wieder einloggt und dann die erreignisse zu aktualisieren. Vielmehr müssen die Erreignisse entweder per Cronjob, Eventhandler oder eben mit dieser Methode ständig aktualisiert werden. Sonst kann das zu bösen Bugs kommen.


Da ichs selbst noch nicht bei mir implementiert habe würde ich gerne mal wissen was ihr denkt über diese Methode.
 
Ganz einfach. Verseh deine Tabelle mit einem Datumsfeld für die Gültigkeit. (zB: active_from).
Dieses füllst du beim INSERT mit SYSDATE+5Minuten ab. Beim Auslesen aus dieser Tabelle prüfst du immer auf SYSDATE()>active_from.
 
Zurück