ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » Profilfeld unter Avatar im Forum

Geschlossen
  1. #1
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Nabend Leute!

    Ich hab folgendes Problem:

    Ich möchte im Forum unter dem Avatar ein Profilfeld ausgeben lassen (ein eigenes aus ic1_userfields, nicht die Standardfelder).

    Klappt soweit auch alles, SOLANGE der User dieses Feld ausgefüllt hat.
    Wenn das nicht der Fall ist, wird der Post einfach nicht angezeigt.
    Was, im Nachhinein überlegt, auch kein Wunder ist, da das Feld in der Datenbank beim User nur auftaucht, wenn er etwas eingetragen hat.

    Wie kann ich das in den Griff bekommen? Ist es überhaupt mit einer einzigen db_query möglich?
    Hier stoße ich leider an die Grenzen meiner kleinen PHP/MySQL Welt.

    Hier der relevante Auszug mit meinem Ansatz in der show_posts.php
    Es geht um das Feld val und es ist wichtig, dass das Feld fid = 19 ist bei der Abfrage.

    $erg = db_query("
    SELECT geschlecht,prefix_posts.id,txt,time,erstid,erst,sig,avatar,posts,val 
    FROM `prefix_posts`
    LEFT JOIN prefix_user ON prefix_posts.erstid = prefix_user.id
    LEFT JOIN prefix_userfields ON prefix_posts.erstid = prefix_userfields.uid
    WHERE tid = ".$tid." AND prefix_userfields.fid = 19
    ORDER BY time LIMIT ".$anfang.",".$limit);
    
    while($row = db_fetch_assoc($erg)) {
    
    [...]
    
    	$tpl->set_ar_out($row,1);
    
      $i++;
    }


    Dank euch schonmal im vorraus.
    Fire


    verwendete ilchClan Version: 1.1
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    $erg = db_query("
    SELECT geschlecht,prefix_posts.id,txt,time,erstid,erst,sig,avatar,posts,val 
    FROM `prefix_posts`
    LEFT JOIN prefix_user ON prefix_posts.erstid = prefix_user.id
    LEFT JOIN prefix_userfields ON prefix_posts.erstid = prefix_userfields.uid AND prefix_userfields.fid = 19
    WHERE tid = ".$tid."
    ORDER BY time LIMIT ".$anfang.",".$limit);


    Die Bedingung fürs userfield nicht ins WHERE setzen, sondern mit bei ON dann sollte es gehen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Ja, das klappt schonmal besser, danke. Leere Felder werden schön mit NULL zurückgegeben, wie es sein soll.

    Aber nun taucht das Problem auf, dass Posts doppelt erscheinen.
    Die Sql Abfrage ist ok, hab's im phpmyadmin getestet.
    Trotzdem sieht es so aus:
    gesperrtes Bild
    Irgendwas läuft da anscheinend in der Schleife schief, die unteren 3 Posts dürften nicht da sein.

    Nochmal der Code:
    $erg = db_query
    ("SELECT geschlecht,prefix_posts.id,txt,time,erstid,erst,sig,avatar,posts,prefix_userfields.val 
    FROM `prefix_posts`
    LEFT JOIN prefix_user ON prefix_posts.erstid = prefix_user.id 
    LEFT JOIN prefix_userfields ON prefix_posts.erstid = prefix_userfields.uid AND prefix_userfields.fid = 19
    WHERE tid = ".$tid." 
    ORDER BY time LIMIT ".$anfang.",".$limit);
    
    while($row = db_fetch_assoc($erg)) 
    
    {
    	$class = ( $class == 'Cnorm' ? 'Cmite' : 'Cnorm' );
    
    	# define some vars.
    	$row['val']  = ($row['val']?'Squad: '.$row['val']:'Squad: k. Angabe').'<br />';
    	$row['sig'] = ( empty($row['sig']) ? '' : '<br /><hr style="width: 50%;" align="left">'.bbcode($row['sig']) );
    	$row['TID'] = $tid;
    	$row['class'] = $class;
    	$row['date'] = date ('d.m.Y - H:i:s', $row['time'] );
    	$row['delete'] = '';
    	$row['change'] = '';
    	if (!is_numeric($row['geschlecht'])) { $row['geschlecht'] = 0; }
    	if (file_exists($row['avatar'])) { $row['avatar'] = '<br /><br /><img src="'.$row['avatar'].'" alt="User Pic" border="0" /><br />'; }
    	elseif ($allgAr['forum_default_avatar']) { $row['avatar'] = '<br /><br /><img src="include/images/avatars/'.$ges_ar[$row['geschlecht']].'.jpg" alt="User Pic" border="0" /><br />'; }
     	else { $row['avatar'] = ''; }
        $row['rang']   = userrang ($row['posts'],$row['erstid']);
    	$row['txt']    = (isset($_GET['such']) ? markword(bbcode ($row['txt']),$_GET['such']) : bbcode ($row['txt']) );
    	$row['i']      = $i;
        $row['page']   = $page;
    
    	if ( $row['posts'] != 0 ) {
    		$row['erst'] = '<a href="index.php?user-details-'.$row['erstid'].'"><b>'.$row['erst'].'</b></a>';
    	} elseif ( $row['erstid'] != 0 ) {
            $row['rang'] = 'Gast';
        }
    
    	if ($forum_rights['mods'] == TRUE AND $i>1) {
    	  $row['delete'] = '<a href="index.php?forum-delpost-'.$tid.'-'.$row['id'].'">'.$lang['delete'].'</a>';
    	}
    	if ( $forum_rights['reply'] == TRUE AND loggedin() ) {
    	  $row['change'] = '&nbsp;<a href="index.php?forum-editpost-'.$tid.'-'.$row['id'].'">'.$lang['change'].'</a>';
    	}
    	$row['posts']  = ($row['posts']?'<br />Posts: '.$row['posts']:'').'<br />';
    	$tpl->set_ar_out($row,1);
    
      $i++;
    }
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Du kannst ja mal mit phpmyadmin in der prefix_userfields Tabelle nachschauen, ob der User da irgendwie mehrere Einträge mit der Id 19 hat.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Mit der Datenbank an sich ist alles ok.
    Wie gesagt, wenn ich die db_query manuell mache, gibt er mir eine einwandfreie Tabelle mit Einwandfreien Werten aus.

    Nochmal zum Problem:
    Ich hab festgestellt, dass auf jeder Threadseite der letzte Post exakt so oft wiederholt wird, wie userfields Werte (prefix_userfix.val) vorhanden sind.

    Wenn es also z.B. ein Thread mit 5 Posts von unterschiedlichen Usern ist, von denen 3 User das userfields feld ausgefüllt haben, wird der letzte Post 3 mal zusätzlich dargestellt.

    Wenn keiner das userfields Feld ausgefüllt hat, sprich prefix_userfields.val immer NULL ist, klappt alles.

    Irgendeine Idee?
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Komisch, gibst du vielleicht nach der Schleife nochmals die Variable an Template ansonsten kann ich es mir auch nicht erklären, wenn du sagst, dass es diese Datensätze nicht doppelt ausgibt.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Oh mein Gott, ja das war's! -.- *BrettvormKopfzerschlag*

    Ich hatte aus Versehen ne alte Datei raufgeladen, wo ich versucht hatte, das über ne 2. Schleife zu lösen.

    Nun klappt endlich alles.
    Dank dir nochmal für die klasse Hilfe!
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten