Mitgliedsnummer unter dem Namen Anzeigen lassen

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt, um einen neuen Mod zu entwickeln, geht's in [3.0.x] Mods in Entwicklung weiter.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Miriam »

Code: Alles auswählen

      // Beginn Member Number on Index
       $member_num = $poster_id;
       if ($member_num > 52)
          {
             ($member_num -= 51);
          }
       elseif ($member_num == 2)
          {
             $member_num = 1;
          }
       // End Member Number on Index  
Dieser Code kann aber sehr daneben gehen. Zumindest was die Mitgliedsnummer angeht.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von BNa »

Besser (symbolisch) if user != bot und if user != anonymous abfragen.
Nur falls keiner von beiden, zähle fortlaufend :wink:
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Miriam »

In der Annahme, daß es nur einen Gast-User (aka ANONYMOUS) gibt, der als Gast schreiben kann / darf und keine weiteren Gast-Gruppen-Mitglieder (falls vorhanden), im Forum posten dürfen, sollte dieser Code hier ausreichend sein:

Code: Alles auswählen

$sql_array = array(
        'SELECT'    => 'COUNT(u.user_id) AS member_id',
        
        'FROM'         => array(USERS_TABLE => 'u'),
        
        'LEFT_JOIN'    => array(
            array(
                'FROM'    => array(GROUPS_TABLE => 'g'),
                'ON'    => 'g.group_id = u.group_id',
                )),
        'WHERE' => $db->sql_in_set('g.group_name', array('BOTS', 'GUESTS'), true) .
                    ' AND u.user_id <> ' . ANONYMOUS .
                    ' AND u.user_id <= ' . (int)$poster_id,
    );

$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query_limit($sql, 1);

$member_num = ($row = $db->sql_fetchrow($result)) ? $row['member_id'] : 0;
if (!$member_num)
{
    $member_num = $user->lang['GUEST'];
}

$db->sql_freeresult($result);
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 8137
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Kirk »

Ich hatte dies bei .com gefunden.
@Miram:
Wenn deinen Code einbaue bekomme ich diese Debug Meldung:

Code: Alles auswählen

phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1563: Undefined index: post_time
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1564: Undefined index: post_subject
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1566: Undefined index: enable_sig
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1568: Undefined index: post_edit_reason
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1598: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1598: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1604: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1608: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1609: Undefined index: post_approved
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1610: Undefined index: post_reported
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1612: Undefined index: friend
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1618: Undefined index: hide_post
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1619: Undefined index: hide_post
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1642: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1652: Undefined index: post_id
[phpBB Debug] PHP Notice: in file [ROOT]/viewtopic.php on line 1655: Undefined index: post_id
Außerdem wird einem als Gast angezeigt Dieser Beitrag wartet auf Freigabe
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Miriam »

Das war gültiger Code für die Abfrage der Mitgliedsnummer für das allgemeine Abfragen. In deinem speziellen Fall muß der natürlich angepaßt werden:

Code: Alles auswählen

    $sql_array = array(
            'SELECT'    => 'COUNT(u.user_id) AS member_id',
            
            'FROM'         => array(USERS_TABLE => 'u'),
            
            'LEFT_JOIN'    => array(
                array(
                    'FROM'    => array(GROUPS_TABLE => 'g'),
                    'ON'    => 'g.group_id = u.group_id',
                    )),
            'WHERE' => $db->sql_in_set('g.group_name', array('BOTS', 'GUESTS'), true) .
                        ' AND u.user_id <> ' . ANONYMOUS .
                        ' AND u.user_id <= ' . (int)$user->data['user_id'],
        );

    $mem_sql = $db->sql_build_query('SELECT', $sql_array);

    $mem_result = $db->sql_query_limit($mem_sql, 1);

    $member_num = ($mem_row = $db->sql_fetchrow($mem_result)) ? $mem_row['member_id'] : 0;
    if (!$member_num)
    {
        $member_num = $user->lang['GUEST'];
    }

    $db->sql_freeresult($mem_result);
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 8137
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Kirk »

Danke, es wird zwar kein Fehler mehr angezeigt aber bei jedem User steht bei der Mitglied Nummer eine 1.
Hab es jetzt das hier:

Code: Alles auswählen

' AND u.user_id <= ' . (int)$user->data['user_id'], 
Durch das ersetzt:

Code: Alles auswählen

' AND u.user_id <= ' . (int)$poster_id, 
Damit wird es korrekt angezeigt.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Miriam »

Das stimmt,
denn (int)$user->data['user_id'] ist der angemeldete Benutzer. :roll:

//Edit:
Irgendwie gefällt mir das nicht. Um ein paar Queries zu sparen, solltest Du es so machen:
Lösche den NUR oben geposteten SQL-Code und

finde in der vietopic.php

Code: Alles auswählen

$auth->acl($user->data); 
danach füge ein:

Code: Alles auswählen

$sql_array = array(
    'SELECT'        => 'u.user_id, COUNT(uu.user_id) AS member_id',

    'FROM'             => array(
                USERS_TABLE => 'u'
            ),
            

    'LEFT_JOIN'        => array(
            array(
                'FROM'    => array(USERS_TABLE => 'uu'),
                'ON'    => 'uu.user_id < u.user_id'
            ),
            array(
                'FROM'    => array(GROUPS_TABLE => 'g'),
                'ON'    => 'g.group_id = u.group_id',
            )
    ),

    'WHERE'        => $db->sql_in_set('g.group_name', array('BOTS', 'GUESTS'), true) .
                    ' AND uu.user_id < u.user_id',
    'GROUP_BY'    => 'u.user_id',
);

$mem_sql = $db->sql_build_query('SELECT', $sql_array);
$mem_result = $db->sql_query($mem_sql);
$member_num = array();
while ($mem_row = $db->sql_fetchrow($mem_result))
{
    $member_num[$mem_row['user_id']] = $mem_row['member_id'];
}

$db->sql_freeresult($mem_result); 
Dann hast Du nur eine Query mit der alles abgedeckt ist.

Wenn Du es noch mehr verbessern möchtest (irgendwann wird die Idee kommen, die Member ID auch in der Mitgliederliste anzeigen zu wollen), kannst Du den Code in eine Funktion stecken und von überall her aufrufen lassen.
Dummerweise ist die somit ermittelte Mitgliedsnummer "dynamisch", d.h, daß beim Löschen eines Benutzers, die nachfolgenden Benutzer andere Mitglieder IDs bekommen.

Ausblick:
Es wäre also anzustreben, die Mitglieder ID im zuge der Mitglieder-Registrierung in der Benutzertabelle zu speichern, so daß diese dort verankert ist und immer dieselbe für den jeweiligen Benutzer bleibt.

Happy Programming.

P.S.:
Interessehalber: Kann mir jemand erklären, wie ich einen CROSS JOIN von ein und derselben Tabelle (hier USERS_TABLE) machen kann und dabei das DBAL des phpBB3 benutzen kann? :geek:
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 8137
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Kirk »

Das funktioniert leider nicht Miriam, es wird keine Nr. sodern nur das hier angezeigt Array
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Miriam »

Welcher Code zeigt das an?

Zeigt mal bitte Deine viewtopic.php her.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 8137
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Beitrag von Kirk »

Hier die viewtopic.php
Hab den alten Code gelöscht und den neuen wie du gesagt hast eingefügt.
Antworten

Zurück zu „[3.0.x] Mod Suche/Anfragen“