anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 16 Jun, 2025 20:21

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Die Funktion : $session [user]
BeitragVerfasst: Fr 25 Mär, 2005 14:51 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: So 12 Sep, 2004 09:55
Beiträge: 97
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 15:09 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 05 Feb, 2005 22:59
Beiträge: 699
Wohnort: OL
LoGD: http://aristo.w039.white.fastwebserver. ... source.php
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 15:14 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 16:19 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
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'");

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 16:31 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
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 :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 22:19 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: Di 06 Apr, 2004 08:03
Beiträge: 73
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 :D


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')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 25 Mär, 2005 22:51 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
ohoh...das is nit so gut also nit unbedingt...aber ich glaub das hat dann ziemliche folgen für den Char laut deines Bsp..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 26 Mär, 2005 11:20 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: So 12 Sep, 2004 09:55
Beiträge: 97
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 04 Apr, 2005 13:00 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: So 12 Sep, 2004 09:55
Beiträge: 97
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^^*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 04 Apr, 2005 13:41 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
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*)

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 04 Apr, 2005 18:20 
Offline
Eingeweihter
Eingeweihter
Benutzeravatar

Registriert: So 12 Sep, 2004 09:55
Beiträge: 97
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
^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 04 Apr, 2005 18:59 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 02 Jun, 2006 09:55 
Offline
Großmeister
Großmeister
Benutzeravatar

Registriert: Mo 24 Apr, 2006 18:21
Beiträge: 408
Geschlecht: Männlich
LoGD: http://localhost
SChön das hat mich auch schon immer interessiert danke an Eliwood, Anpera und alle anderen :D

_________________
Mal wieder da...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 02 Jun, 2006 11:13 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Ned die alten Threads rauskramen! Zum 3'589'256x mal....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 02 Jun, 2006 15:47 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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?

:P

@ Montekar: Editier mal meinen Namen da raus, ich hab nix viel gesagt dazu ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 02 Jun, 2006 16:18 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
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 :P


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum