benutzerstatus abfragen bzw. vergleichen

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
IMC
Mitglied
Beiträge: 545
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Gruß, Thorsten
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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);
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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?
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2130
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: benutzerstatus abfragen bzw. vergleichen

Beitrag 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?
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Verschoben von Coding & Technik nach Extension Bastelstube am 05.03.2024 17:57 durch LukeWCS

Antworten

Zurück zu „Extension Bastelstube“