Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Problem mit while()
#11
Na einer von euch blauen hat irgendwas mit "Es werden nur Einträge, die auf uid = x bezogen sind eingebunden" oder so geschrieben. Ich dachte ich habe Dragon gelesen. Dann wars n andere von euch xD


Okay mal wieder zurück zum Thema. Würde es evtl. mit einer for each-Schleife gehen?
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#12
Es geht mit einer foreach, for, als auch der while Schleife. ... :-)

Ersetze deinen Code mal bitte mit diesem:
PHP-Code:
[php]if($mybb->input['uid'] && $mybb->input['uid'] > 0) {
    
    
$uid $mybb->input['uid'];
    
$sql "SELECT * FROM ".TABLE_PREFIX."usernamehistory".
           
" WHERE uid=".intval($mybb->input['uid']).";";
    
$query $db->query($sql);
    
    
// if no rows match
    
if(!$db->num_rows($query)) { 
        
// 
    

    else {
            while (
$result $db->fetch_array($query)) {
                if(
$result['datechanged']) {
          
                        
$plugins->run_hooks("member_usernamehistory_start");
            
                       
$datechanged my_date("h:i A, d.m.Y"$history['datechanged']);
                       
$oldname $history['oldname'];
                       
$sql "SELECT username FROM ".TABLE_PREFIX."users".
                               
" WHERE uid = ".intval($history['cid']);
                        
$query $db->query($sql);
                        
                    
$changedby $db->fetch_array($query);
                    
$changedby $changedby['username']; 
                     eval(
"\$usernamehistory = \"".$templates->get("member_usernamehistory")."\";");  
                    }
              }
       }


P.s ich habe meinen Post gelöscht gehabt, dies geschah gerade in dem Moment, in dem bereits die Antwort erschien.

Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
Zitieren
#13
Genau den Code hatte ich schon. Ich versteh es irendwie nicht. Es müsste doch eigentlich für jeden uid = x Eintrag (in meinem Fall für jeden Eintrag mit uid = 1) die while-Schlaufe ausführen und das Template wiedergeben.

Also ich poste hier jetzt mal nochmal alles:

Also den Code von euch (ich habe nur die 2x $result zu $history geändert, da der Rest ja auch $history[''] ist) Er ist zwischen der action login und action logout in der member.php von 1.4 Beta 2
(ich hab nur n freien Platz gesucht Wink)

PHP-Code:
if($mybb->input['uid'] && $mybb->input['uid'] > 0) {
    
    
$uid $mybb->input['uid'];
    
$sql "SELECT * FROM ".TABLE_PREFIX."usernamehistory".
           
" WHERE uid=".intval($mybb->input['uid']).";";
    
$query $db->query($sql);
    
    
// if no rows match
    
if(!$db->num_rows($query)) { 
        
// 
    

    else {
            while (
$history $db->fetch_array($query)) {
                if(
$history['datechanged']) {
          
                        
$plugins->run_hooks("member_usernamehistory_start");
            
                       
$datechanged my_date("h:i A, d.m.Y"$history['datechanged']);
                       
$oldname $history['oldname'];
                       
$sql "SELECT username FROM ".TABLE_PREFIX."users".
                               
" WHERE uid = ".intval($history['cid']);
                        
$query $db->query($sql);
                        
                    
$changedby $db->fetch_array($query);
                    
$changedby $changedby['username']; 
                     eval(
"\$usernamehistory = \"".$templates->get("member_usernamehistory")."\";");  
                    }
              }
       }


So das ganze soll das Template member_usernamehistory ausgeben und zwar für jeden Eintrag mit der selben User Id wie die von dem Profil, das man anschaut.

Code:
<tr>
    <td>{$oldname}</td>
    <td>{$datechanged}</td>
    <td>{$changedby}</td>
</tr>

Dieses Template wird in der member_profile mit der Variable {$usernamehistory} ausgegeben:
Code:
<fieldset class="fieldset">
    <legend>Previous Usernames</legend>
    <table border="0" cellpadding="0" cellspacing="3" width="100%">
        <tbody><tr>
            <td><strong>Old Username</strong></td>
            <td><strong>Date Changed</strong></td>
            <td><strong>Changed by</strong></td>

        </tr>
{$usernamehistory}
    </tbody></table>
</fieldset>

Mittlerweile sind auch schon 3 Attachments unterwegs:
1. So wie es mit dem hier gepostetem Code aussieht
https://www.mybb.de/forum/attachment.php?aid=3304

2. Meine mybb_usernamehistory Einträge die beidesmal die uid 1 haben:
https://www.mybb.de/forum/attachment.php?aid=3306

3. Die Struktur der Tabelle mybb_usernamehistory
https://www.mybb.de/forum/attachment.php?aid=3307

Hoffe, dass irgendjemand noch draufkommt was hier schiefläuft.
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#14
Bitte schaue dir an, was ich mit meinem Code geändert habe.
Bisher wurde das Template immer außerhalb der While schleife aufgerufen. Das hatte zur Folge, dass nur ein Datensatz angezeigt werden konnte.

Selbst in dem von dir geposteten Anfangscode befindet sich der Aufruf des Templates außerhalb der While-Schleife.
Es ist also durchaus eine gravierende Änderung enthalten.

Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
Zitieren
#15
Ja aber wie gesagt, deinen Code hatte ich 1:1 in meiner Datei schon stehen. Aber zur Kontrolle habe ich nocheinmal den Code übernommen aber es liest immer noch nur einen Datensatz aus.

Ich hab den Code genauso wie in meinem vorherigen Post. Also sozusagen deine Version, nur das ich halt die $result in $history umgewandelt hab. Aber sonst hab ich so wie oben.
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#16
Bitte versuche mal folgendes:
Suche und Ersetze:
PHP-Code:
eval("\$usernamehistory = \"".$templates->get("member_usernamehistory")."\";"); 
Durch dies:
PHP-Code:
eval("\$usernamehistory .= \"".$templates->get("member_usernamehistory")."\";"); 
Ich gebe keinen Support per Messenger oder PN!
Zitieren
#17
Leider funktioniert es immer noch nicht.
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#18
PHP-Code:
if($mybb->input['uid'] && $mybb->input['uid'] > 0) {

    
$uid $mybb->input['uid'];
    
$query $db->simple_select("usernamehistory""*""uid={intval($uid)}");
    
    
// if no rows match
    
if(!$db->num_rows($query)) { 
        
// 
    

    else {
            while (
$result $db->fetch_array($query)) {
                if(
$result['datechanged']) {
          
                        
$plugins->run_hooks("member_usernamehistory_start");
            
                       
$datechanged my_date("h:i A, d.m.Y"$result['datechanged']);
                       
$oldname $result['oldname'];
                       
$sql "SELECT username FROM ".TABLE_PREFIX."users".
                               
" WHERE uid = ".intval($result['cid']);
                        
$query $db->query($sql);
                        
                    
$changedby $db->fetch_array($query);
                    
$changedby $changedby['username']; 
                     eval(
"\$usernamehistory .= \"".$templates->get("member_usernamehistory")."\";");  
                    }
              }
       }


Sollte so weit funktionieren. Lokal getestet.
Ich gebe keinen Support per Messenger oder PN!
Zitieren