![]() |
PHP Problem
Hallo
Ich hab mal wieder ein PHP Problem Dieses mal mit der umsetzung eines scripts... also, ich hab registrierte benutzer in einer datenbank. diese koennen sich auf der seite mit dem gueltigen benutzer/passwort anmelden. erst nachdem sich der user angemeldet hat kann er eine seite aufrufen (sonst kommt eine fehlermeldung dass kein user angemeldet ist). das ganze ist mit PHP Sessions gemacht. auf dieser seite soll der user jetzt ein spiel eroeffnen koennen. einfach auf einen link "create new game" klicken, dann seine einheiten zamstellen, map aussuchen und auf OK. nach dem OK wird das ganze mal in eine datenbank gespeichert als offenes spiel wo ein anderer user noch joinen kann. so, jetzt meine frage: wenn der benutzer der das spiel erstellt hat einfach das browserfenster schließt kann ich das ja noch mit javascript abfangen (window.close oder so aehnlich) - dann wird der eintrag einfach in der datenbank wieder geloescht. aber was ist wenn der pc abstuerzt, wenn das fenster mitm task manager zugemacht wird oder wenn stromausfall etc. ist? dann kann ich ja kein script mehr ausfuehren das mir den eintrag in der datenbank loescht. weiß wer eine loesung dafuer? danke michi |
Wenn das Spiel gespeichert wird, wird ein timestamp mit der aktuellen Zeit (time()) in die DB geschrieben. Bei jedem Aufruf überprüft das Skript, ob es in der DB Werte gibt, die älter als der timeout sind (angenommen du hast in der Tabelle spiele die spiele, und createtime ist der timestamp: $now=time;
$query="DELETE * from spiele where $now-$timeout<createtime"; ) und löscht diese. Du kannst auch nur offene (z.B. AND offen=1) löschen lassen. Jak |
jo, das mit der zeit ist mir auch schon eingefallen. nur wenn der user der ein spiel erstellt hat einen stromausfall hat und diese zeit ist zB auf 24h gesetzt wird er pech haben wenn er wieder eins aufmachen will (man kann nur eins aufmachen) aber da koennt man eine abfrage einbauen ob er das alte spiel loeschen will.
dann gibts noch 2 probleme ... wenn einer bei einem offenen spiel auf join klickt wird halt in der datenbank festgehalten dass das spiel nicht mehr offen ist. dann muss sich der user der gejoined hat noch eine armee zusammenstellen, dann gehts los. 1.) wenn der spieler der das spiel joined jetzt abdreht ist das spiel gesperrt, aber nur in der datenbank, der user ist ja weg. der andere weg waere dass der user der das spiel joined erst beim OK klicken nach der armee zusammenstellen den eintrag in der datenbank macht dass das spiel zu ist. dann werden aber mehr auf "join" klicken, eine armee zusammenstellen und dann nicht mehr auf OK klicken koennen weil das schon ein anderer 5 sekunden vorher gemacht hat. 2.) wie kriegt der andere benutzer der das spiel erstellt hat das mit dass es los gehn kann (also dass ein spieler gejoined und die armee erstellt hat)? da muesst ich irgendwo in einem kleinen frame ein script laufen haben dass alle 5 sec. reloadet (alle 5 sec. ein datenbankzugriff) und schaut ob der user der das spiel gejoined hat schon fertig ist. dann koennte ja das spiele-fenster aufgehn oder so. oder faellt dir da auch eine andere loesung ein? ich weiß, mit einem java-applett waer das alles viel einfacher (siehe stargames.at), aber ich kann nun mal kein java =) |
Wenn eh alle 5 Sek. reloaded wird, kannst du ja den timeout-Wert auf z.B. 20 sek. stellen. dann ist die Wahrscheinlichkeit, daß ein User in der Zwischenzeit joined gering.
Du kannst ja dem Ersteller ermöglichen seine Spiele zu löschen (ev. müssen die User die Joinen bestätigen bzw. der zuerst gejointe User wird der neue Eigentümer). Find ich eine gute Idee. Join vor Armee zusammenstellen halte ich für klüger, sonst ist der Frustfaktor recht hoch (weiß zwar nicht was das für ein Spiel ist, mich würd's aber ärgern wenn ich eine Armme zusammengestellt ahb und dann kommt mir wer zuvor). ad 2.) seh' ich genauso. Ich würd dein Skript nur mit verschiedenen Popup-Blockern testen (IE, Firefox/Mozilla). Sicherheitshalber auch einen Link vorsehen (<a href="PFAD" tarket="_blank">) Jak |
danke
ich werd mal alle probleme aufschreiben dann loesen und mich wieder melden wenns probleme gibt bei der loesung oder wenn das spiel fertig ist =) |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag