php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-07-2007, 20:47
steff2006
 Newbie
Links : Onlinestatus : steff2006 ist offline
Registriert seit: Jun 2007
Beiträge: 28
steff2006 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Browsergame Tag beginnen -> Rohstoffe

Hallo ich hab folgendes Problem:
In einem Browsergame muss man auf Tag Beginnen klicken, damit ein Tag startet und man seine Rohstoffe nach Ende des Tages bekommt (1 Tag = 10 min)

jetzt möcht ich aber gern dass der Tag automatisch läuft, also der User aller 10 min seine Rohstoffe bekommt.

läuft kein Tag steht in der SQL Tabelle Tag 0
läuft ein tag steht das datum der Variable $tagtag drin

der Code sieht so aus:

PHP-Code:
$min date(i);
$stund date(H);
$monate date("m");
$tagimmonat date(d);
$jahr date(Y);
$jahr $jahr 2000;

$tagtag $jahr.$monate.$tagimmonat.$stund.$min;


mysql_query("update browser_user SET tag = '$tagtag' WHERE user = '".$_SESSION['user']."'");
header("location:view.php");

jetzt hab ich versucht mit:

if tag = 0 > update tag = tagtag aba leider klappt das nicht so ganz.
Kann mir einer dabei helfen?
Mit Zitat antworten
  #2 (permalink)  
Alt 06-07-2007, 03:30
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://www.php-resource.de/forum/sho...threadid=50454

automatisch alle zehn minuten bedeutet, dass irgendwo ein timer laufen soll. serverseitig? cronjobs (ist aber mit kanonen auf spatzen). clientseitig? billig, aber manipulierbar.

so ein spiel erfordert mehr als irgendwelche tutorials aus dem netz.


besser: du speicherst einmalig in der db, wann "der tag" begonnen hat, und bei der nächsten abfrage ermittelst du erst, ob dieser vorbei ist ("+10 minuten") und vergibst "resourcen".
Mit Zitat antworten
  #3 (permalink)  
Alt 06-07-2007, 07:42
jens76
 Member
Links : Onlinestatus : jens76 ist offline
Registriert seit: Dec 2004
Beiträge: 328
jens76 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja und wenn 3 tage vorbei sind halt + 3 x resourcen!

hat aber den nachteil das alle aktionen die sich auf die resourcen beziehen immer wieder die resis aktualisieren müssen..

also bauen, tag rum, ausrauben, handeln usw
Mit Zitat antworten
  #4 (permalink)  
Alt 06-07-2007, 08:23
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
besser: du speicherst einmalig in der db, wann "der tag" begonnen hat, und bei der nächsten abfrage ermittelst du erst, ob dieser vorbei ist ("+10 minuten") und vergibst "resourcen".
quasi ein virtueller cronjob. ich würde bei jedem aktualisieren der seite schauen ob der user schon wieder 10 min rum hat.

allerdings finde ich einen cronjob doch die bessere wahl. wieso meinst du sei es mit kanonen auf spatzen geschossen?

mfg
bugbuster
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #5 (permalink)  
Alt 06-07-2007, 08:37
steff2006
 Newbie
Links : Onlinestatus : steff2006 ist offline
Registriert seit: Jun 2007
Beiträge: 28
steff2006 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja das hab ich mir auch gedacht mit den einmaligen speichern in der DB und der überprüfung ob die 10 min schon um sin,
nur wie stell ich die anfrage der überprüfung im zusammenhang mit der zeit an die DB
Mit Zitat antworten
  #6 (permalink)  
Alt 06-07-2007, 08:37
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Bugbuster
allerdings finde ich einen cronjob doch die bessere wahl. wieso meinst du sei es mit kanonen auf spatzen geschossen?
Wenn ich 10.000(e) User hab, kann ich natürlich alle 10 Minuten mit 'nem Cronjob schauen lassen, ob schon wieder Zeitspanne X rum ist, und sie deshalb Y mehr Stücke von Stoff Z gutgeschrieben bekommen - also entsprechend viele Updates machen.

Oder aber ich frage, wenn der Nutzer das nächste Mal zugreift - das kann ja auch einen, zwei Tage oder eine Woche später sein - wann er das letzte Mal da war, teile diese Zeitspanne durch X, und gebe ihm dann so viel mal Y dazu. Das ist lediglich ein Update ...


Ein Update in vielleicht zwei Wochen, oder zwei Wochen lang alle zehn Minuten ein Update - macht schon einen kleinen Unterschied.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 06-07-2007, 09:26
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja okay da geb ich dir natürlich Recht. Das dies performancetechnisch nicht so empfehlenswert ist.

mal ganz wertfrei wäre mein ansatz dafür:

in der datenbanktabelle eine spalte mit timestamp anlegen dies benennen mit last_update oder so ... und dann eine einfache rechnung ob timestamp schon mehr als 10 minuten her ist (600 sekunden)

PHP-Code:
if(($last_update 600) < $timestamp_now) {
//update ausfuehren und hierbei natürlich auch last_update aktualisieren

.. das kann mysql aber automatisch. current_timestamp.
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #8 (permalink)  
Alt 06-07-2007, 09:43
jens76
 Member
Links : Onlinestatus : jens76 ist offline
Registriert seit: Dec 2004
Beiträge: 328
jens76 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also bei 10000enden usern und einem cronjob hängt dein spiel dann immer bei der aktualisierung der gesamten resi tabelle!
Mit Zitat antworten
  #9 (permalink)  
Alt 06-07-2007, 09:53
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ach das kann man so pauschal sagen? bei normalen webspace okay. bei einer normalen mysql datenbank okay. ohne mehraufwand okay. aber dies ist keine allwetterformel! es soll durchaus vorkommen, dass ein cronjob mehrere 1000 user updatet ohne das der user groß was davon mitkriegt. wollte damit nur mitteilen, dass ich so allwetteraussagen nicht mag. so diskussion beendet. geht ja schließlich nicht darum. wir sind ja hier schon überein gekommen, dass man es nicht per cronjob macht.
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #10 (permalink)  
Alt 06-07-2007, 17:56
steff2006
 Newbie
Links : Onlinestatus : steff2006 ist offline
Registriert seit: Jun 2007
Beiträge: 28
steff2006 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ähm nunja zu Cronjob:
Ich hab mal gegoogelt, da Cronjob mir vorher nix sagte.
Aber wenn ich dass richtig erkannt habe updatet Cronjob ja alles bei jeden User? Dies soll ja nicht der Fall sein,
da der User sich in verschiedenen Verdienststufen befindet.
Umso mehr er baut um so mehr verdient er davon.
Also muss es ja ein Update für jeden User einzeln geben, wenn ich das richtig seh.

Aber wie gesagt > Ich hab mir Cronjob nur mal kurz angeschaut - kannte es vorher nich.
Mit Zitat antworten
  #11 (permalink)  
Alt 06-07-2007, 18:10
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Quatsch. Der Cronjob führt nur ein Skript regelmäßig zu bestimmten Zeiten aus - ähnlich den Taskplaner bei Windows. Was dein Skript macht bleibt dir überlassen.
Ich denke allerdings das wahsagas Vorschlag besser ist. Du speicherst den letzten Zugriff in einer Session / Datenbank und schaust dann wieviele Rohstoffe hinzugefügt werden. Dabei können dann mehrmals 10 min vergangen sein. So sparst du dir Updates für alle User die gerade inaktiv sind und deren Rohstoffe überhaupt nicht interessant sind.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #12 (permalink)  
Alt 08-07-2007, 16:36
steff2006
 Newbie
Links : Onlinestatus : steff2006 ist offline
Registriert seit: Jun 2007
Beiträge: 28
steff2006 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich habe jetzt mal eine Tabelle angelegt:

name: test
typ: timestamp
Attribute: ON UPDATE CURRENT_TIMESTAMP
Null: Nein
Standart: CURRENT_TIMESTAMP

dazu folgenden Code:
PHP-Code:

$timestamp_now 
time();


if((
$test) < $timestamp_now) {
mysql_query ("update browser_user SET test = '$timestamp_now' WHERE user = '".$_SESSION['user']."'");

über Echo zeigt er mir das: 1183905147 ?
das is doch kein datum oder eine Zeit?

Leider wird aber auch mit date() statt time() nix geupdatet
und ich bekomm bei date() nix über echo zurück?!
Mit Zitat antworten
  #13 (permalink)  
Alt 08-07-2007, 16:43
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://www.korrekturen.de/beliebte_fehler/standart.html

so ganz ohne grundlagen wirst du keinen erfolg haben. leihe dir in der bibliothek ein-zwei bücher zum thema php und mysql aus, bevor du drauflosprogrammierst.

weder kennst du die datentypen in mysql (die in der dokumentation ausführlich beschrieben sind), noch weißt du, was ein timestamp ist.
Mit Zitat antworten
  #14 (permalink)  
Alt 09-07-2007, 00:06
steff2006
 Newbie
Links : Onlinestatus : steff2006 ist offline
Registriert seit: Jun 2007
Beiträge: 28
steff2006 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

habs hinbekommen

allerdings stell ich mir die Frage wie ich das ganze berechne wenn sich der user erst am nächsten tag oder gar eine woche später wieder einloggt.

Muss ich dann die differenz berechnen?
timestamp_neu - timestamp_alt : 600 * die Rohstoffe aller 10 min?

bsp: bei 18 stunden des letzten zeitstempels steht dem user ein update von 10.8 mal die rohstoffe zu

is das machbar? müsste eigentlich....?!


Nachtrag:
Auch das klappt - allerdings überschreibt er immer die rohstoffe neu und rechnet den alten stand nicht dazu...

PHP-Code:

$energie 
$row2["energie"];
$timediff $timestamp_neu $timestamp_alt;
$rohstoff_diff $timediff 5;
$energieneu1 $rohstoff_diff 20 energie
NACHTRAG: Ups $ vergessen - so schnell gehts
sry

Geändert von steff2006 (09-07-2007 um 11:32 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:08 Uhr.