$user->data['group_id'] für user_group_table ?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: $user->data['group_id'] für user_group_table ?

Beitrag von 4seven »

Hallo Helmut,
ein paar posts vorher 4seven hat geschrieben:Die Core-Funktion habe ich anfänglich für 3 meiner Mods benutzt, fand sie aber zu unflexibel für mutliple Gruppen-Abfragen, so das ich auf $user->data['group_id'] umschwenkte.
Die andere Variante bringt mE mehr Side-Effects. Die Hauptgruppe ist was festes, auf was man sich verlassen kann.Solange ich keine flexible Abfrage für mein Anliegen in diesem Thread habe, bleibe ich auch dabei. Solange, wie ich keine ähnlich flexible Syntax für die Abfragen der user_group_table wie für die user_table_habe (halt eben $user->data['group_id'])

Was ich brauche ist eine $user_group->data['group_id'] - Leider bin ich kein SQL-Genie und scheitere schon an einer echo-Ausgabe dieser Konstruktion.

Wie gesagt, ich bräuchte eine einfach Abfrage, ala:
In welche(r)/n Gruppe/n (nicht Hauptgruppe/n) ist das Mitglied, was gerade jetzt die Seite betrachtet?
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: $user->data['group_id'] für user_group_table ?

Beitrag von Helmut »

Hallo 4seven,

achso, du wolltest eine Liste aller group_id des Users haben und nicht ob der jeweilige gerade eingeloggte User in einer bestimmten Gruppe ist.

Hier mal eine einfache Abfrage der phpbb_user_group:

Code: Alles auswählen

// zu überprüfender User
$benutzer_id = $user->data['user_id'];

//Abfrage der Gruppen ID's
$sql = 'SELECT user_id, group_id
        FROM ' . USER_GROUP_TABLE . "
        WHERE user_id = $benutzer_id
        ORDER BY group_id ASC ";
$result = $db->sql_query($sql);
while ($g_data = $db->sql_fetchrow($result))
{    
        $g_select .= $g_data['group_id'] . ', ';        
}
 
Du hast dann alle group_id des eingeloggten Users in $g_select drinnen, welche durch ein Komma getrennt sind.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: $user->data['group_id'] für user_group_table ?

Beitrag von Miriam »

Das wäre so möglich:

Code: Alles auswählen

$sql = 'SELECT ug.group_id, g.group_name FROM ' . USER_GROUP_TABLE . ' ug
            LEFT JOIN ' . GROUPS_TABLE . ' g ON g.group_id = ug.group_id
            WHERE ug.user_id = ' . $user->data['user_id'] . '
            AND ug.group_id <> ' . $user->data['group_id'] . '
            AND ug.user_pending = 0';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
    $groups_row[$row['group_id']] = $row['group_name'];
}
$db->sql_freeresult($result); 
Der jeweilige Key des Arrays $groups_row ist die Gruppen-ID und der Value der Gruppenname der Gruppen (ausser Hauptgruppe), denen der betrachtende User angehört und in diesen Gruppen aktiviert wurde.

//Edit: Zu spät.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: $user->data['group_id'] für user_group_table ?

Beitrag von 4seven »

Ihr seid genial :grin:
Vielen vielen Dank 8)

Ein Ansatz wäre jetzt, die statischen abfragen mit $is_in_group und die flexiblen mit $user->data['group_id'], bzw der neuen Variable zu mixen. Vielleicht gelingt das ja unfallfrei.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: $user->data['group_id'] für user_group_table ?

Beitrag von Helmut »

Hallo 4seven,

so ganz habe ich jetzt noch nicht begriffen, was du genau als Ergebnis der Abfrage haben willst.

In $user->data['group_id'] steht ja immer die Hauptgruppe des eingeloggten Users drinnen und mit dem Beispiel oben bekommst du eine Liste aller group_id in denen der User Mitglied ist.

Oder wolltest du eine Liste aller verfügbaren Gruppen und eine weitere Liste der Gruppen, in denen der User Mitglied ist?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: $user->data['group_id'] für user_group_table ?

Beitrag von 4seven »

Hallo Helmut,

ich möchte einen Switch bauen, mit dem man entscheiden kann, ob man BBCodes für Hauptgruppen restriktieren will oder eben für normale Gruppen. Demnach passt die Info schon. Zur Zeit bastel ich an der Abfrage, was scheinbar nicht ganz so einfach ist, da ich ja vorher mit dem ACP-Feld bestimmen konnte, welche Hauptgruppen dürfen, nun aber die Abfrage ein ganz anderen Ansatz hat, wo überprüft werden muss, ob irgendeine der normalen Gruppen des Hauptgrupplers mit den Eingetragenen Group_IDs übereinstimmt. Aber, das pack ich schon :wink:

greez
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: $user->data['group_id'] für user_group_table ?

Beitrag von Miriam »

Du könntest z.B. Dein Objekt $user etwas aufrüsten, indem Du diese Funktion in die includes/functions_user.php packst =>
  • Code: Alles auswählen

    function member_of_groups($main_group_included = false, $as_array = false)
    {
        global $db, $user;
        
        $main_group_inc = ($main_group_included) ? ('AND group_id <> ' . $user->data['group_id']) : '';
        $sql = 'SELECT group_id
                    FROM ' . USER_GROUP_TABLE . '
                    WHERE user_id = ' . $user->data['user_id'] . '
                    AND user_pending = 0 '
                    . $main_group_inc;
        $result = $db->sql_query($sql);
        $member_of = array();
        while ($row = $db->sql_fetchrow($result))
        {    
            $member_of[] = $row['group_id'];        
        }
        $db->sql_freeresult($result);
        $user->data['member_of_groups'] = ($as_array) ? $member_of : implode(',', $member_of);
        return true;
    } 
Die kannst Du dann mittels oder aufrufen (je nachdem, ob die Hauptgruppe mit drin sein soll oder nicht und ob die Rückgabe als Array erfolgen soll oder als Liste).

Nach dem Aufruf kannst Du auf eine Komma-separierte Liste oder ein Array der Gruppen-IDs zugreifen.

Wenn Du etwas an den Gruppen änderst solltest Du danach durch nochmaliges Aufrufen der Funktion das Objekt aktualisieren. 
Zuletzt geändert von Miriam am 24.01.2009 14:55, insgesamt 1-mal geändert.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: $user->data['group_id'] für user_group_table ?

Beitrag von 4seven »

Klasse, kaum hab ich den einen Input verarbeitet, kommt gleich wieder son Hammerteil.. :grin:

Vielen Dank, Miriam
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: $user->data['group_id'] für user_group_table ?

Beitrag von Miriam »

Habe oben noch das print() rausgenommen.. *oops* :oops:
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Re: $user->data['group_id'] für user_group_table ?

Beitrag von 4seven »

*g - auch grad gesehen :geek:
Antworten

Zurück zu „Coding & Technik“