Seite 2 von 5

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 18:34
von IMC
chris1278 hat geschrieben: 19.02.2024 07:06 Das könnte man auch so schreiben:
Das ändert aber nichts an der Rangfolge. Ich meinte diesen Sachverhalt
Mike-on-Tour hat geschrieben: 19.02.2024 16:26Der Gast hat den user_type == 2, damit ist er bei der Abfrage nach USER_NORMAL und USER_FOUNDER automatisch draußen
Bots haben auch den Usertype 2, USER_IGNORE. Die wären damit auch wie gewünscht raus.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 19:13
von LukeWCS
Du warst schneller Thorsten. :D

Daher nur ein kleiner Zusatz:

Chris, beim Abarbeiten der Bedingung eines if Blocks, geht der Interpreter nach strikten Regeln vor und dabei ist die Rangfolge der Operatoren wichtig. Diese Rangfolge musst du als Coder zwingend kennen, weil du sonst eventuell Code schreibst, der nicht das macht was du willst. Darum gehts dann auch bei Thorstens Link. Wenn du von dieser strikten Rangfolge abweichen musst, dann musst du auch zwingend, wie Thorsten schrieb, Klammern nutzen.

Das nur am Rande, für deine endgültige Abfrage ist das nicht mehr relevant, weil die zusätzliche Abfrage auf ANONYMOUS in dem Fall ohnehin sinnfrei ist, wie Bruno bereits erwähnte.

Bau mal an der Stelle wo du diese Abfrage brauchst folgende Debug Anzeige ein, am besten vor deiner Abfrage, je nachdem wie weit du da schon bist.

Code: Alles auswählen

echo '<pre style="font-size: medium; background-color: powderblue; color: black;">';
echo 'user_type: ' . $this->user->data['user_type'] . ' (' . (['USER_NORMAL', 'USER_INACTIVE', 'USER_IGNORE', 'USER_FOUNDER'][$this->user->data['user_type']] ?? 'UNDEFINED') . ')<br>';
echo 'user_id  : ' . $this->user->data['user_id'] . '<br>';
echo '</b></pre>';
Dann ruf dein TB auf als Gast, als Bot, als Benutzer und als Gründer und beobachte in der hellblauen Box oben wie phpBB jeweils darauf reagiert. Ich denke dann müsste es klar werden.

Der Vorschlag von Mike ist am präzisesten. Speziell für deinen Fall würde aber auch schon Udos Vorschlag reichen, weil in dem Kontext wo du das brauchst, inaktive Benutzer eher keine Rolle spielen. Wenn ein inaktiver Benutzer sich anmelden will, wird das ohnehin unterbunden und ich schätze mal, du musst keine inaktiven Benutzer behandeln.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 20:25
von chris1278
Ok. Ich dann lag ich falsch.

@edit

Luke ja das ist mir schon bewusst das kommt aus der constant.php

Code: Alles auswählen

define('USER_NORMAL', 0);
define('USER_INACTIVE', 1);
define('USER_IGNORE', 2);
define('USER_FOUNDER', 3);

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 20:42
von LukeWCS
Hmja, das war mir bewusst, das dir das bewusst ist. ^^ Bei der Debug Anzeige gehts jedoch darum, dass du live sehen kannst, wie phpBB reagiert und bei welchem Besucher-Typ welche Konstante und ID gesetzt wird.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 20:45
von chris1278
Das ist schon klar. Aber da man mit ignore ja alles ausser normale und gründer ausschliessen kann könnte man ja so machen:

Code: Alles auswählen

if (empty($this->user->data['csstamp']) && $this->user->data['user_type'] == USER_NORMAL || $this->user->data['user_type'] == USER_FOUNDER && $this->user->data['user_type'] != USER_IGNORE)
Die erste Variable die vor dem && steht mus in jedemfall geprüft werden ob die leer ist oder nicht. und anschliessend die prüfung auf die drei sahcen. Das müsste dochc so passen.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 21:44
von LukeWCS
Um diese Bedingung vollständig beurteilen zu können, müssten wir hier erstmal wissen, was genau $this->user->data['csstamp'] ist und in welcher Situation es leer ist und in welcher Situation es bestückt ist.

Du hast dich an dem && festgebissen, du willst das irgendwie unbedingt drin haben. :D
chris1278 hat geschrieben: 19.02.2024 20:45

Code: Alles auswählen

&& $this->user->data['user_type'] != USER_IGNORE)
Wenn du user->data['user_type'] bereits auf USER_NORMAL und USER_FOUNDER prüfst, ist es doch gar nicht mehr notwendig, noch zusätzlich auf etwas anderes zu prüfen. Wenn eines dieser beiden zutrifft, dann ist die Bedingung $this->user->data['user_type'] != USER_IGNORE sowieso immer true und damit doppelt unnötig. ;) Und wenn keines der beiden zutrifft, interessiert deine && Bedingung sowieso nicht mehr, weil die Prüfung der Bedingung da schon längst mit false abgebrochen wurde.

Irgendwie scheint das immer noch nicht klar geworden zu sein, was Mike und Udo versucht haben dir zu vermitteln. Hast du denn jetzt mal meine Debug Anzeige ausprobiert?

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 19.02.2024 22:24
von chris1278
Ok dann lassen wir das mit demignor.

Ja da ist der cssstamp also es ist folgendes.

Wenn ein neuer benutzer sich regestriert wird geprüft ob in seiner Spalte bei dem csstamp ein wert enthalten ist. Ist der leer wird einer generiert und in diese Spalte eingetragen.

Den generiere ich dann mit

Code: Alles auswählen

$cs_timestamp	= time();
Danach wird in einer anderen Tabelle die extra für die extension geschrieben ist ein eintrag gemacht wo dann dieser wert aus der benutzertabelle ausgelsen wird und dort eingetragen wird. Ich verknüpfe im Grunde die eintragungen meiner rufzeichentabelle mit der beutzertabele nur mittels des einen wertes.

Heist im Grunde der wert soll nur in die datenbank geschrieben werden wenn der cssatmp des Users auch leer ist und dann auch nur wenn der user regestrierter aktiver user ist. ist ein wert enthalten soll nix in die spalte geschrieben werden.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 20.02.2024 19:33
von LukeWCS
chris1278 hat geschrieben: 19.02.2024 22:24 Ok dann lassen wir das mit demignor.
Hattest du denn jetzt verstanden, was ich dir geschrieben habe?
Ja da ist der cssstamp also es ist folgendes.
Okay, dann sind die Infos jetzt komplett, damit man die Bedingung auch beurteilen kann. Mit dem was dir hier geschrieben wurde, solltest du jetzt deine Bedingung von 19.02.2024 20:45 überarbeiten und das Ergebnis nochmal hier posten bitte.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 20.02.2024 19:36
von chris1278
Ok das ignor raus und das ganze so:

Code: Alles auswählen

if (empty($this->user->data['csstamp']) && $this->user->data['user_type'] == USER_NORMAL || $this->user->data['user_type'] == USER_FOUNDER)
demzufolge sollte das jetzt heissen ist x leer und ist y normaler user oder gründer dann ausführen.

Re: benutzerstatus abfragen bzw. vergleichen

Verfasst: 20.02.2024 19:48
von LukeWCS
Mühsam ernährt sich das Eichhörnchen, wir nähern uns der Lösung. Da fehlt aber noch was. Es hat den Anschein, dass du Thorstens verlinkten Artikel nicht gelesen oder nicht verstanden hast. Bitte ehrlich, was davon trifft zu?

Ein weiterer Tipp von mir, ich beschreibe dir jetzt mal was der Interpreter da bei deinem Code "liest":

Code: Alles auswählen

if (empty($this->user->data['csstamp']) && $this->user->data['user_type'] == USER_NORMAL || $this->user->data['user_type'] == USER_FOUNDER)

Wenn empty($this->user->data['csstamp']) zutrifft und ausserdem $this->user->data['user_type'] == USER_NORMAL zutrifft, dann Block ausführen. ODER wenn $this->user->data['user_type'] == USER_FOUNDER zutrifft, dann Block ausführen.

War es das was du wolltest?