MyBB.de Forum

Normale Version: Problem mit while()
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Ich hab n kleines oder großes (eher kleinWink) Problem.

Also ich hab ne Tabelle mybb_usernamehistory hinzugefügt, die auch einwandfrei funktioniert, aber ich hab n Problem mit dem auslesen.

Ich kann ja immer nur den ersten Eintrag ausgeben, deshalb brauch ich ja eine while-Schlaufe.

Also das ganze sieht so aus

id - uid - oldname - datechanged - cid
Erklärung:
id = auto_increment id
uid = Userid des Users desssen Namen geändert wurde.
oldname = Der vorherige Username
datechanged = Das Änderungsdatum
cid = Die Userid des Users der den Namen geändert hat.

Jetzt zeigt es trotz meiner while-Schlaufe trotzdem nur einen Eintrag an, obwohl ich zu teszwecken 2 Einträge mit zu der User ID 1 gemacht hab

Also hier ist der Code
PHP-Code:
//Get the time of the last names
if(!$mybb->input['uid'])
{
}
//Get table data
else
{
$uid $mybb->input['uid'];
$query $db->query("
    SELECT *
    FROM "
.TABLE_PREFIX."usernamehistory
    WHERE uid = 
{$mybb->input['uid']}
"
);
//display old names
    
while ($history $db->fetch_array($query))
    {
          if(!
$history['datechanged'])
          {
          }
       else
      {
            
$plugins->run_hooks("member_usernamehistory_start");
            
$datechanged my_date("h:i A, d.m.Y"$history['datechanged']);
            
$oldname $history['oldname'];
            
            
$query $db->query("
        SELECT username
        FROM "
.TABLE_PREFIX."users
        WHERE uid = 
{$history['cid']}
            "
);
            
            
$changedby $db->fetch_array($query);
            
$changedby $changedby['username'];   
      }
    }
        eval(
"\$usernamehistory = \"".$templates->get("member_usernamehistory")."\";");


Oh und falls es hilft, hier ist das Template member_usernamehistory
Code:
<tr>
    <td>{$oldname}</td>
    <td>{$datechanged}</td>
    <td>{$changedby}</td>
</tr>

Und so sieht das ganze aus:
[attachment=3304]


Oh und hier die Einträge meiner Tabelle:
id - uid - oldname - datechanged - cid
1 - 1 - Kioshi&trade; - 1215511135 - 1
2 - 1 - Esmas - 1215511135 - 1

Ich hab einfach mal die Zeit von der Zelle "lastactive" genommen, weil ich noch keinen Skript für die Änderung hab xD deswegen ist es beides mal die selbe Zeit.

Aber wie ihr auf meinem Bild sehen könnt, wird nur Kioshi&trade; ausgegeben...
Hallo Kioshi,

Dein Code bildet eine Liste mit Nicknames welche dem User gehörten, der gerade die Seite aufruft. Wurde dein Name nur einmal geändert, wird also auch nur Eintrag angezeigt werden. Außerdem sind in deinem Code ein paar Lücken, welche Exploits zulassen könnten. Wenn du über Url, oder Post Daten beziehst, müssen diese Daten immer geprüft und mindestens escaped werden.

Ich habe an deinem Code mal ein paar Änderungen vorgenommen.
PHP-Code:
//Get the time of the last names
if($mybb->input['uid'] && $mybb->input['uid'] > 0) {
    
    
$uid $mybb->input['uid'];
    
$sql "SELECT * FROM ".TABLE_PREFIX."usernamehistory".
           
" WHERE uid={$db->escape_string($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 = {$db->escape_string($history['cid'])}";
                        
$query $db->query($sql);
                        
                    
$changedby $db->fetch_array($query);
                        
$changedby $changedby['username'];   
                    }
              }
       }
        eval(
"\$usernamehistory = \"".$templates->get("member_usernamehistory")."\";");


Mfg Garlant
Tut mir leid, aber der funktioniert nicht xD.

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Query:
SELECT username FROM mybb_users WHERE uid =
Probiere:
PHP-Code:
//Get the time of the last names
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")."\";");

Der selbe Fehler nochmal -.-

Oh falls es hilft..ich weiß ja nicht ob sich das coding geändert hat. Ich benutze MyBB 1.4 Beta 2 und bearbeite member.php
Ich habe den Beitrag übearbeitet.
Ersetze
PHP-Code:
$sql "SELECT * FROM ".TABLE_PREFIX."usernamehistory"." WHERE uid=".intval($mybb->input['uid']); 
durch:
PHP-Code:
$sql "SELECT * FROM ".TABLE_PREFIX."usernamehistory WHERE uid='".intval($mybb->input['uid'])."';"
Es funktioiert jetzt zwar, aber jetzt sieht es immer noch so aus wie auf meinem Bild...und ich hab 2 Einträge mit in der Tabelle, die beidesmal die uid=1 ham...

Hier mal meine PHPMyAdmin screens:
[attachment=3306][attachment=3307]
Sry für den Doppelpost aber Dragon hat sich das Recht genommen seinen Post zu löschen Wink

Das ist der Teil den ich in member_profile ausgeben lasse:
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>
Ich habe gar nichts gelöscht, da ich auch nichts geschrieben hatte.
Seiten: 1 2