anpera.net https://anpera.dyndns.org/phpbb3/ |
|
Die Funktion : $session [user] https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=1175 |
Seite 1 von 1 |
Autor: | Fury [ Fr 25 Mär, 2005 14:51 ] |
Betreff des Beitrags: | Die Funktion : $session [user] |
Hallo, ich wollte fragen , wo die Die Funktion : $session [user] [] denn implementiert ist. Ich hab edas nirgend gefunden. Wenn ich z.b. das gold von einem user um eins hochzählen will, dann schreibe ich einfach : $session [user] [gold]++ Woher weiss das Skript, dass es damit dem angemeldetet unser 1 gold mehr geben soll?? Mit welcher Datenbank es sich verbinden soll das steht ind er dbconnect.php ... aber den rest verstehe ich nicht. Ich wollte eben mal wissen , wenn ich ein eigenes Testscript mache und einen belieben wert in meiner Datenbank um 1 hochzählen lassen will , wie ich das dann mache. Vorallem komisch finde ich, dass die tabelle ja nicht user heisst, sondern accounts. ... wäre doch logischer $session [accounts] [gold] Ist denn diese Funktion $session von PHP vordefiniert? Hoffentlich kann mir ein PHP kundiger helfen^^. MfG Fury |
Autor: | Arîzto [ Fr 25 Mär, 2005 15:09 ] |
Betreff des Beitrags: | |
Von PHP habe ich zwar auch nicht wirklich Ahnung, aber ich sehe das so: 'user' bezieht sich nicht auf die Tabelle 'accounts', sondern auf diesen einen User. 'gold' heisst ein Feld in der Tabelle 'accounts', somit braucht der nur eins bei 'gold' bei diesem User in der DB zuzählen... Ob $session schon vordefiniert ist weiss ich nicht, aber wenn man sowas nicht in den Dateien findet gehe ich mal davon aus. |
Autor: | Eliwood [ Fr 25 Mär, 2005 15:14 ] |
Betreff des Beitrags: | |
Mit $session ist deine "Sitzung" festgelegt. Beim einloggen werden mit $session deine Daten definiert und über $session auf/abgerufen $session ist eine Variable (Hoffe das so richtig wiedergeben zu haben) |
Autor: | anpera [ Fr 25 Mär, 2005 16:19 ] |
Betreff des Beitrags: | |
Jup, $session ist nichts weiter als eine Variable, die eine Tabelle enthält. Genauer ist es ein Array, noch genauer ein Feld oder eine Matrix oder wie man dazu sagt. $session enthält in LoGD sämtliche Sessiondaten des "gerade aktiven" Users und ist durch die common.php global im gesamten Script als Sessionvariable definiert. In $session['user'] wird bei jedem Klick der Inhalt der accounts table des jeweiligen Spielers gespeichert und am Ende des Scripts von dort wieder in die Datenbank geschrieben. Dass die Variable geade "session" heißt und die Spielerdaten mit "user" gekennzeichnet sind, ist durch die LoGD-Programmierer willkürlich festgelegt worden. Eine Variable, die Sessiondaten enthält, sollte man eben nicht "$hans" nennen und warum es "user" und nicht "accounts" heißt, weiß ich nicht. Vielleicht war "user" einfach kürzer und im Script logischer? $session kann (in LoGD) auch dazu verwendet werden, um bestimmte Werte unsichtbar zu übertragen, ohne $_GET[] oder irgendwelche hidden values in Formularen ($_POST[]) bemühen zu müssen. Was mit $session['meinwert']=5; definiert wurde, kann an beliebiger Stelle später wieder als 5 abgerufen werden. Trotzdem sollte das nur im Notfall gemacht werden, da Sessions irgendwann ablaufen und standardmäßig nur $session['user'][] permanent in der Datenbank gespeichert wird. Sinnvoll ist das, wenn ein Script bei der Ausführung mehrere Dateien einbindet, die alle Zugriff auf diesen Wert haben sollen. Damit spart man sich das Hantieren mit globals und Funktionsparametern. Wenn du irgendwo $session['user']['gold']++; schreibst, zählt PHP den Wert, der in $session['user']['gold'] steht, um 1 nach oben. Die common.php schreibt den neuen Wert in die Session und kümmert sich darum, dass der neue Wert an der richtigen Stelle in der Datenbank landet. (function saveuser) Schreibst du $session['user']['meinwert']++; zählt PHP meinwert um 1 nach oben, aber die common.php wird einen Fehler ausgeben, wenn meinwert nicht in der Datenbank existiert. Schreibst du $session['meinwert']++; wird PHP meinwert um 1 erhöhen und der Wert wird in der Session des aktiven Spielers, aber nicht in der Datenbank gespeichert. Wenn du einen beliebigen Wert in der Datenbank hochzählen willst, machst du das mit einem SQL-Befehl: UPDATE tabellenname SET feldname=feldname+1 WHERE bedingungen Das Gold eines Spielers namens "Halbgott Blubb" in LoGD hochzählen, könnte z.B. so aussehen: db_query("UPDATE accounts SET gold=gold+1 WHERE login='Blubb'"); |
Autor: | Kevz [ Fr 25 Mär, 2005 16:31 ] |
Betreff des Beitrags: | |
Noch Anzumerken ist: Dieser Befehlt geht nur wenn der jenige du selbst nicht bist und wenn du es sein solltes das du Off sein musst... Habs selbst schon oft vertauscht, dadurch rufst du nämlich einen Bug hervor bzw versuchst es. Hoff das is richtig so ![]() |
Autor: | bibir [ Fr 25 Mär, 2005 22:19 ] |
Betreff des Beitrags: | |
Kevz hat geschrieben: Noch Anzumerken ist:
Dieser Befehlt geht nur wenn der jenige du selbst nicht bist und wenn du es sein solltes das du Off sein musst... Habs selbst schon oft vertauscht, dadurch rufst du nämlich einen Bug hervor bzw versuchst es. Hoff das is richtig so ![]() tja, das ist eine boese sache, die nicht nur passiert, wenn man das bei sich selbst macht, sondern, wenn der andere gerade on ist und im falschen moment klickt... es passiert naemlich folgendes: szenario: user1 will an user2 gold schicken (koennte auch etwas anderes sein) $this->bbcode_second_pass_code('', 'user1 ruft script auf->daten werden in session geschrieben user2 ruft script auf->daten werden in session geschrieben user1 kommt an stelle mit ueberweisung ->daten von user2 werden in db geaendert user1 verlaesst script->sessiondaten werden in db geschrieben user2 verlaesst script->sessiondaten werden in db geschrieben->ueberschreiben dort vorhandene daten + aenderung') |
Autor: | Kevz [ Fr 25 Mär, 2005 22:51 ] |
Betreff des Beitrags: | |
ohoh...das is nit so gut also nit unbedingt...aber ich glaub das hat dann ziemliche folgen für den Char laut deines Bsp.. |
Autor: | Fury [ Sa 26 Mär, 2005 11:20 ] |
Betreff des Beitrags: | |
WOW!! Vielen dank für die Erklärungen vor allem an die von Anpera! Jetzt is mir das endlich klargeworden wo das her kommt! 1000 DANK |
Autor: | Fury [ Mo 04 Apr, 2005 13:00 ] |
Betreff des Beitrags: | |
Nach ner Zeit nochmal ne Frage dazu^^: Wenn ich $session [user] [gold]++ mache, dann wir das gold um eins hochgezählt. In der Variable $session[user] steht ja der inhalt der tabelle accounts als array. mir wäre klar, wenn man z.B: mit echo"$session [user] [gold]" den aktuellen Gold wert bekommt. Aber wenn ich ++ dahinterschreibe wird ja nicht nur dieser array verändert sondert ind der wird ein query asgeführt ( UPDATE accounts SET gold=5 WHERE gold=4 z.B.) Wo ist das deklariert, dass diese änderung in die db übernommen wird... ich finde das einfach nicht in der common^^ bitte gib mir mal die zeile an^^ mich intesssiert das.. Und dann noch ne Frage : wurde in lotgd mit classen gearbeitet? Wenn ja wo^ MfG Fury *auf Antworten wart^^* |
Autor: | anpera [ Mo 04 Apr, 2005 13:41 ] |
Betreff des Beitrags: | |
Fury hat geschrieben: Aber wenn ich ++ dahinterschreibe wird ja nicht nur dieser array verändert sondert ind der wird ein query asgeführt ( UPDATE accounts SET gold=5 WHERE gold=4 z.B.) Wo ist das deklariert, dass diese änderung in die db übernommen wird... ich finde das einfach nicht in der common^^ bitte gib mir mal die zeile an^^ mich intesssiert das.. function saveuser() in der common.php. Fury hat geschrieben: Und dann noch ne Frage : wurde in lotgd mit classen gearbeitet? Wenn ja wo^
LoGD 0.9.7 ist im Großen und Ganzen Spaghetti-Code mit ein paar Functions. Objekte und Klassen hab ich in 0.9.7 bisher vergeblich gesucht. Und objektorientiertes Programmieren - so schön es auch sein mag - in einem sowieso schon leistungshungrigen Onlinespiel wie LoGD, das auf einer Scriptsprache basiert, die mit jedem Klick neu kompiliert werden muss... ich glaub, das würde die Anforderungen von LoGD bzw. die Wartezeiten beim Seitenaufbau enorm in die Höhe schrauben. (Bei Systemen mit PHP-Cache könnte das aber ganz gut funktionieren. *denk*) |
Autor: | Fury [ Mo 04 Apr, 2005 18:20 ] |
Betreff des Beitrags: | |
lol dann binnaber aber froh! DAs mit den Klassen habe ich nicht so recht kapiert! Aber was wird denn ohne Klassen gemacht, dass man z.B. wenn man oder http://www.dragonlegend.de/logd/village.php nirgens hinkommt? Ich dachte man muss das auf jeder seite schreiben so z.B.: session_start(); reqire ("class_db") // in der klasse ham wir die db connect daten^^ requrire("class_user.php") // damit kann man die user verwalten.... require ("class_zugriff.php")// das is ne klasse zum sich auf der seite //anmelden. Naja ganz durchschauen werde ich lotgd nie^^ Doch wegegn deinen Antworten versteh ich für meine Verhältnisse schon ziemlich viel^^ Danke MFG ^^ |
Autor: | Kevz [ Mo 04 Apr, 2005 18:59 ] |
Betreff des Beitrags: | |
1. Es sind alle Wichtigen Funktion auf die common.php ausgelegt! 2. Guck dir das mal hier an: [php]//if ($SCRIPT_NAME!="index.php" && $SCRIPT_NAME!="login.php" && $SCRIPT_NAME!="create.php" && $SCRIPT_NAME!="about.php"){ if (!$allowanonymous[$SCRIPT_NAME]){ $session['message']="Du bist nicht eingeloggt. Wahrscheinlich ist deine Sessionzeit abgelaufen."; redirect("index.php?op=timeout","Not logged in: $REQUEST_URI"); } }[/php] ist nur ein teil des codes, dadrüber ist der rest... ist aber einfach zu verstehn |
Autor: | Montekar [ Fr 02 Jun, 2006 09:55 ] |
Betreff des Beitrags: | |
SChön das hat mich auch schon immer interessiert danke an Eliwood, Anpera und alle anderen ![]() |
Autor: | Kevz [ Fr 02 Jun, 2006 11:13 ] |
Betreff des Beitrags: | |
Ned die alten Threads rauskramen! Zum 3'589'256x mal.... |
Autor: | Eliwood [ Fr 02 Jun, 2006 15:47 ] |
Betreff des Beitrags: | |
Er soll also lieber ein neues Thema aufmachen und dann auf die Suche verwiesen werden? ![]() Er hat dieses Thema mit der Suche gefunden und hat seine Meinung dazu geschrieben. Das Thema ist nicht zu, also darf er das und soll er auch. Egal wie alt das Thema ist, vielleicht gibts noch was zum sagen? ![]() @ Montekar: Editier mal meinen Namen da raus, ich hab nix viel gesagt dazu ![]() |
Autor: | Kevz [ Fr 02 Jun, 2006 16:18 ] |
Betreff des Beitrags: | |
Ok, dann such ich jetzt auch alle Posts vom ältesten bis zum aktuellsten und schreibe dort meine Meinung, dann wäre es also gleich berechtigung für alle ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |