WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 14.11.2004, 18:07   #1
hurt
Veteran
 
Registriert seit: 02.12.2000
Alter: 43
Beiträge: 298


hurt eine Nachricht über ICQ schicken
Standard 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
____________________________________
...::: www.nineinchnails.at - Perfect Little Dream :::...
hurt ist offline   Mit Zitat antworten
Alt 14.11.2004, 18:24   #2
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 14.11.2004, 18:35   #3
hurt
Veteran
 
Registriert seit: 02.12.2000
Alter: 43
Beiträge: 298


hurt eine Nachricht über ICQ schicken
Standard

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 =)
____________________________________
...::: www.nineinchnails.at - Perfect Little Dream :::...
hurt ist offline   Mit Zitat antworten
Alt 14.11.2004, 19:41   #4
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 14.11.2004, 23:22   #5
hurt
Veteran
 
Registriert seit: 02.12.2000
Alter: 43
Beiträge: 298


hurt eine Nachricht über ICQ schicken
Standard

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 =)
____________________________________
...::: www.nineinchnails.at - Perfect Little Dream :::...
hurt ist offline   Mit Zitat antworten
Antwort


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

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.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:32 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag