Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.8 veröffentlicht (17.10.16)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Problem mit while()
#1
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:
   


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...
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#2
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
Ich gebe keinen Support per Messenger oder PN!
Zitieren
#3
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 =
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#4
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")."\";");

[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
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
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#6
Ich habe den Beitrag übearbeitet.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
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'])."';"

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren
#8
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:
       
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#9
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>
Gruß Manuel
Bitte erst die Suche und die Doku benutzen.
Zitieren
#10
Ich habe gar nichts gelöscht, da ich auch nichts geschrieben hatte.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren