Wert der sich automatisch erhöht..

Ich habe eine Zahl die später in der HP angezeigt wird. Diese Zahl soll sich nun nach einer (von mir bestimmten) Zeit um eins erhöhen. Die alte Zahl soll dabei überschrieben werden. Also dass es z.B. wenn ich auf die HP komme 1 anzeigt und wenn ich die HP "10" sekunden später aktualisiere soll es "2" anzeigen

Zuerst hab ichs mal so probiert:
PHP:
<?php 
for ($i=1; $i<=10; $i++) 
{ 
echo "Wert: $i"; 
sleep(5); 
} 
?>
War mir aber eigentlich schon fast vorher klar, dass das nich funktionieren würde... es wird dann nach längerer Zeit ausgegeben: Wert: 1Wert: 2 (...)Wert: 10

Ich hab mir dann überlegt, dass es irgendwie evtl. mit ner Datenbank funktionieren könnte... Ich dachte an sowas:
PHP:
mysql_query
	(UPDATE
    users
	SET
    geld = geld + 1;)
Aber dann weiss ich nich (geht das irgendwie?) wie ich aus der Tabelle "users" von einem Datensatz nur das feld "geld" ausgeben kann. Bin in MySQL noch neu und weiss nur wie ganze Datensätze ausgeben, aber ein einzelnes Feld? Geht das auch? Ich denke mal dann wäre das Problem gelöst? Dann könnt ich einfach das Feld ausgeben, welches sich dauernd ändert...
Wenn jemand das Problem mit dem Wert erhöhen auf eine ganz andere Art lösen kann ist mir das auch Recht...
Kann mir jemand helfen?

mfg frankenstein
 
Zuletzt bearbeitet:
Hallo!

Natürlich kann man den Inhalt von nur einem Feld ausgeben.
Z.b. so:
PHP:
$result = mysql_query("SELECT `geld` FROM `users`");
$row = mysql_fetch_array($result);
echo $row["geld"];
Wenn es mehrere Datensätze gibt, setzt Du halt eine entsprechende WHERE-Klausel mit ein.....
PHP:
$result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='name'");
Gruss Dr Dau
 
das Grundprinzip funktioniert, aber leider noch nich so ganz wie ich mir das vorstelle...
erstmal mein Script:
PHP:
<?php
		mysql_connect(localhost, *xxx*, *xxx*);
		mysql_select_db("dbname");
		$sqlab = "update users set geld = geld + 1";
	mysql_query($sqlab);
   	$result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='*name*'");
	$row = mysql_fetch_array($result);
	echo $row["geld"];
	sleep(5); 
    ?>
Logischerweise, wird das Script immer durchgearbeitet wenn ich die Seite aktualisiere. Ich hätte gerne, dass der Wert von selbst alle 5 sekunden um 1 steigt. Also wenn ich zum beispiel nach 50 Sekunden aktualisiere, dass dann der Wert um 10 höher ist. Bei dem Script hier wird einfach immer der Wert um eins erhöht, wenn ich die Seite aktualisiere, auch wenn ich dazwischen 1 minute gewartet habe... Hat da jemand ne Idee wie ich dieses Problem lösen könnte?

Ach ja, wer die Ausgabe sehen will, ich habs mal hochgeladen: Link
 
Zuletzt bearbeitet:
Dann würde ich den jeweils letzten Timestamp in der Datenbank speichern.
Diesen ziehst Du bei der nächsten Seitenaktuallisierung vom aktuellen Timestamp ab.
Das Ergebnis teilst Du durch 5 und rundest es ab.
Z.b. 63/5=12,6 (abgerundet 12).
Du musst also das Feld "geld" um 12 erhöhen.
Anschliessend speicherst Du noch den aktuellen Timestamp.
Nun noch den aktuallisierten Wert aus "geld" abfragen und ausgeben.

Ich vermute aber dass Du dann mit ob_start() und ob_end_flush() arbeiten musst.
 
Der einfachste Weg so etwas zu realisieren ist wohl ein "Cronjob", wenn du versuchst da ein Spiel umzusetzen oder sonst etwas wird man kaum darumkommen ohne komplizierte Herumprogrammierungen.

Die meisten Webhoster bieten so etwas an, ansonsten gibts auch ein paar anbieter wo man extern soetwas einrichten kann. Der Cronjob ruft dann alle 5 minuten (egal ob die leute eingeloggt sind oder nicht) das Geldupdate auf, und rechnet allen den Verdienst von allen drauf.
 
Erstmal danke für den Tipp... Gibt dann aber zwei probleme:
1. Wenn ich die Seite selbst aktualisiere (also ohne Cronjob) steigt der Wert auch --> evtl. mit Dr Dau's Vorschlag kombinieren?
2. Ich arbeite mit Sessions, ein Cronjob ruft meines Wissens einfach die URL auf. Wenn nun die Seite aufgerufen wird und keine Session an ist (= User nicht eingeloggt ist) dann nützt die URL nix... jemand nen vorschlag?
Ich hab mich übrigens hier registriert: http://www.cron-job.org

mfg T.B.S.
 
Ich gehe mal davon aus dass der Geldwert nur erhöht werden soll, wenn der User eingelogt ist.
Dann kannst Du einen Cronjob vergessen, denn woher sollte der Cronjob wissen wann und welcher User eingelogt ist.
Es würde aber die Möglichkeit geben dass die Seite, wenn der User eingelogt ist und die Seite geöffnet hat, sich selbst aktuallisiert.
Z.b. per <meta>-Tag.
 
doch, eigentlich sollte der Wert auch erhöht werden wenn der User nicht eingeloggt ist... Aber mit einem Cronjob kann ich's mir nich vorstellen, weil das script denk ich mal von Grund auf falsch ist. Das Problem ist ja auch, dass der User einfach die Seite 1000-mal aktualisieren kann und dann 1000 geld mehr hat. Das möcht ich aber nicht. Sonst hat ja einfach der am meisten Geld, der den schnellsten Klickfinger hat.... Der Wert soll also im Hintergrund erhöht werden, und der User kann das Geld nicht selber durch aktualisieren den Wert erhöhen.

Ich mach kein Browsergame, aber ich hab gesehen, dass bei BG's genau das auch gemacht wird...Hat jemand ne Ahnung wie die das dort jeweils machen? Vielleicht könnt ich mir da was abgucken....
 
Wenn auch noch ohne Sessions, hab ich doch endlich geschafft was ich wollte. Der Wert steigt abhängig davon, wann die Seite das letzte mal aufgerufen wurde, bzw. der letzte Timestamp gesetzt wurde. Falls jemand mal was ähnliches braucht, hier mein script:
PHP:
<?php
		mysql_connect(localhost, name, pass);
		mysql_select_db("frankenstein007");
		$result = mysql_query("SELECT `geld` FROM `users` WHERE `username`='frankenstein'");
		$row = mysql_fetch_array($result);
		$vortstamp = mysql_query("SELECT `tstamp` FROM `users` WHERE `username`='frankenstein'");
		$vstamp = mysql_fetch_array($vortstamp);
		$stufe = mysql_query("SELECT `stufeg1` FROM `users` WHERE `username`='frankenstein'");
		$stufeg1 = mysql_fetch_array($stufe);
		$menge = $stufeg1["stufeg1"] * $stufeg1["stufeg1"] * 0.3;
		$vermögen = $row["geld"] + ((time() - $vstamp["tstamp"]) * $menge);
		$sqlab = "update users set geld = $vermögen";
		mysql_query($sqlab);
		echo "aktuelles Vermögen: ".$row["geld"]." $";
		?>
(...)

<?php
    $time = time();
    $timestamp = "update users set tstamp = $time";
    mysql_query($timestamp);
    ?>

Dort wo das (...) steht hab ich noch nen HTML-Teil, den aber niemanden interessieren dürfte. Das grundlegende Script ist das hier. Falls ich was vergessen haben sollte bitte melden (Ist nur ein Aussschnitt aus einem grösseren Script). Aber die Funktion mit dem erhöhen (mit der richtigen DB natürlich für den Timestamp) sollte mit diesem Script funktionieren.
Herzlichen Dank an Dr Dau für den Timestamp-Tipp und an engelb für den Tipp mit Cronjobs zu arbeiten. Die Cronjobs werde ich nun aber wahrscheinlich nicht mehr brauchen, da ich mit timestamps arbeite und dann ja der Wert mehr steigt wenn man die Seite längere zeit nicht mehr aufgerufen hat.
Also nochmal thx an alle die mir geholfen haben, ihr seid echt super.

mfg frankenstein007
 
Zuletzt bearbeitet:
Wenn du schon aus einer Tabelle mehrere Einträge ausliest wieso machst du dann nicht einfach Select * . Das verschafft mehr übersicht
 
Zurück