Seite 2 von 4

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 06.04.2013 20:17
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.

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 06.04.2013 22:58
von BNa
Besser (symbolisch) if user != bot und if user != anonymous abfragen.
Nur falls keiner von beiden, zähle fortlaufend :wink:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 01:23
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);

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 10:37
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

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 11:04
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);

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 12:47
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.

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 15:17
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:

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 17:02
von Kirk
Das funktioniert leider nicht Miriam, es wird keine Nr. sodern nur das hier angezeigt Array

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 17:27
von Miriam
Welcher Code zeigt das an?

Zeigt mal bitte Deine viewtopic.php her.

Re: Mitgliedsnummer unter dem Namen Anzeigen lassen

Verfasst: 07.04.2013 17:35
von Kirk
Hier die viewtopic.php
Hab den alten Code gelöscht und den neuen wie du gesagt hast eingefügt.