MyBB.de Forum

Normale Version: Problem mit while()
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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?
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
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.
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
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.
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")."\";"); 
Leider funktioniert es immer noch nicht.
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.
Seiten: 1 2