mmofacts.com

Logische Operatoren

gepostet vor 18 Jahre, 8 Monate von pl-online
Ich bin auf ein sehr unlogisches Problem gestossen. Nach all den Versuchen frage ich mich ob es ein Bug von php selbst ist. Eine andere Erklärung kann ich nicht finden.

Also, um gleich zur Sache zu kommen:

Beim Login werden verschiedene Sessionvariabeln erstellt darunter eine die darüber Auskunft gibt in welcher Runde sich der User gerade einloggte diese enthält den String beta3:

$_SESSION["game"] = "beta3";


Der Grund ist zu verhindern, dass wenn sich ein User in der beta3 einloggt, dann in der beta2, er zurückspringt in die beta3 und dann die Sessionsvariabeln der beta2 gesetzt sind (bspw. eine falsche UserId).
Die Prüfung ob sich der User in der "richtigen" Runde befindet wird in einer Methode checkUser der Klasse user geprüft die ihre Daten via setGame, setUserId, ...etc erhält. Das ganze sieht gekürzt so aus:

Das Script übergibt die Daten:

	$userObject=new user;

$userObject->setUserid($_SESSION["userId"]);
$userObject->setGame($_SESSION["game"]);
$userObject->checkUser();


Die set Methoden sehen wie folgt aus ($this->game ist private):

		function setGame( $tGame ){

$this->game = $tGame;
}

            if($this->game != "beta3" || !$this->userId){

header ("Location: ../sites/login.php");
}else{


Nun, er loggt mich aus. Soll heissen ich komme zurück auf die login.php.
Das Hauptproblem ist allerdings wenn ich den Code ändere in:

            if($this->game == "beta3" || !$this->userId){

header ("Location: ../sites/login.php");
}else{


Loggt er mich ebenfalls aus. Aber wenn ich mit die($this->game); aufrufe gibt er mir wie er sollte auch beta3 zurück. Achja, es liegt nicht an $this->userId diese ist gesetzt und macht auch keine Probleme. Ich hatte sie getrennt zum Testen und die UserId wurde immer gesetzt.

Momentan habe ich als Übergangslösung das gemacht:

            if( $_SESSION["game"] != "beta3" || !$this->userId){

header ("Location: ../sites/login.php");
}else{

Das funktioniert auch problemlos.

Meine Vermutung ist das php ein Problem mit den Konvertierungen hat, ich hatte schon mal davon gehört. Allerdings habe ich hier mal mit intval (natürlich mit Zahl als Wert) und strval versucht was beides nichts brachte.
gepostet vor 18 Jahre, 8 Monate von knalli
Gebe doch an Ort und Stelle alle 3 Variablen mal aus.. mittels die() das Script sofort abschießen.

Also, sowas wie:
 

die(print_r(array($this->game, $this->userId, $_SESSION['game']), true));
gepostet vor 18 Jahre, 8 Monate von pl-online
Hab ich schon, wie gesagt es sind alle gesetzt.
gepostet vor 18 Jahre, 8 Monate von TheUndeadable
if($this->game == "beta3" || !$this->userId){
if( $_SESSION["game"] != "beta3" || !$this->userId){

Sehe ich es richtig, oder sollte ich den Text mal richtig durchlesen?

EDIT: OK, shame on me.
gepostet vor 18 Jahre, 8 Monate von pl-online
Mal richtig durchlesen. :wink:
gepostet vor 18 Jahre, 8 Monate von knalli
Original von pl-online
Hab ich schon, wie gesagt es sind alle gesetzt.


Hast du es mal gemacht, wie sieht die Ausgabe aus? Ich schließe das erst aus, wenn ich es sehe
gepostet vor 18 Jahre, 7 Monate von TheUndeadable
Hast du das Problem gelöst oder hast du es jetzt einfach so hingenommen.
Falls ersteres: Die Lösung würde mich interessieren.
gepostet vor 18 Jahre, 7 Monate von pl-online
Ist noch in Arbeit, da ich im Moment kaum Zeit habe. Ich werde mich melden sobald ich etwas Neues weiss.
gepostet vor 18 Jahre, 7 Monate von gorgo
Off Topic
Original von TheUndeadable

if($this->game == "beta3" || !$this->userId){
if( $_SESSION["game"] != "beta3" || !$this->userId){
Sehe ich es richtig, oder sollte ich den Text mal richtig durchlesen?
EDIT: OK, shame on me.
Sag mal TheUndeadable hast du auch im codefeld nur Buchstabensalat ?
Und wenn du den code denn aber direkt postetst wirds richtig umgesetzt.
Also bei mir wird der quellcode komplett zerschossen und statt der klammern seh ich nur die codierte schreibweise.
Kanns ja net zeigen, denn es wird ja beim normalen texten ohne codeblock richtig dargestellt.
(Firefox unter Debian)
edit: doch ...kann es ja als Screenshot zeigen
gepostet vor 18 Jahre, 7 Monate von Drezil
ich denke, das kam durch den wechsel aufs neue forum ^^
gepostet vor 18 Jahre, 7 Monate von knalli
Original von Drezil
ich denke, das kam durch den wechsel aufs neue forum ^^

Dito.. kann ich mit meinem WinFox auch bestätigen.

Auf diese Diskussion antworten