Rang im Forum + Benutzerbild

  • Themenstarter Themenstarter jaylibII
  • Beginndatum Beginndatum
J

jaylibII

HuHu,

so hab die letzten Tage mal wieder ein wenig an meinem Forum gearbeitet. Aber nun bin ich an einer Stelle angelangt, wo ich nicht mehr weiter komm. Und zwar es geht um folgendes:

1.) Wie kann ich das machen, dass wenn ein User z.B. weniger als 100 Beiträge geschrieben hat, dass dann steht STATUS: "Anfänger" Wenn er mehr mehr als 101 aber weniger als 300 Beiträge hat dann "Profi" usw.... und bei einem Mitarbeiter sollte stehen "Mitarbeiter"

Hier kommt mal der Code für das Forum:

PHP:
<?php
include("config.php"); // config datei laden.
error_reporting(E_ALL);
//echo "<a href=index.php>Zur&uuml;ck zur &uuml;bersicht</a><br><br>";

$ppu = array(); // posts per user

$threadid = $_GET['threadid']; // threadid aus adressleiste auslesen

$fp = fopen("template_post.html","r");  // teamplate zum lesen(r) &ouml;ffnen
$template = fread($fp,filesize("template_post.html"));  // inhalt der template datei in die teamplate variable laden.

    $sql = "SELECT * FROM simple_posts  WHERE threadid = '".mysql_escape_string($threadid)."' ORDER BY postid ASC";
      $result = mysql_query($sql) or die(mysql_error());
      while($row = mysql_fetch_Assoc($result)) {
       $von = $row['von'];

   if (!isset($ppu[$von])) {
      $ppusql = "SELECT COUNT(*) AS anzahl FROM `simple_posts` WHERE `von`='$von'"; //[1]
      $ppuresult = mysql_query($ppusql) OR die(mysql_error());
      $ppurow = mysql_fetch_assoc($ppuresult);    
      $ppu[$von] = $ppurow['anzahl']; ;
   }	
		if ($row["post"] <= 100){ // alle Beiträge unter und einschließlich 100
		$benutzer_rang = "Neuling";
		}
		elseif ($row["post"] <= 500){ // alle Beiträge unter und einschließlich 500
		$benutzer_rang = "XXX";
		}
		elseif ($row["post"] <= 1000){ // alle Beiträge unter und einschließlich 1000
		$benutzer_rang = "XXY";
		}   
		
    $titel = $row['titel'];  // titel besorgen
    $von = $row['von'];  // von besorgen
    $datum = $row['datum']; // datum besorgen
    $post = $row['post']; // post besorgen

    $anzahl = $ppu[$von];    

    $datum = strftime("%d.%m.%Y",$datum); //  datum formatieren
    
    $ausgabe = $template;
    
    $ausgabe = str_replace("{von}",'<a href http://../pr.php?user=' . $von . '">' . $von . '</a>',$ausgabe);  // von ins template einsetzen
    $ausgabe = str_replace("{titel}",$titel,$ausgabe);  // titel ins template einsetzen
    $ausgabe = str_replace("{datum}",$datum,$ausgabe); // datum ins template einsetzen

	$ausgabe = str_replace("{anzahl}",$ppu[$von],$ausgabe);
    $ausgabe = str_replace("{text}",echo_message($post,false,true),$ausgabe); // den post text ins template einsetzen
    $ausgabe = str_replace("{rang}",$benutzer_rang,$ausgabe); // rang ins template einsetzen 
	
    $ausgabe = str_replace("{message}",'<a href http://../post.php?show=write&amp;empfaenger=' . $von . '">Message schreiben</a>',$ausgabe); // den post text ins template einsetzen
    
    echo $ausgabe;
    
};
?>

Also ich habe das scho mal so eingebaut mit dem Rang aber es geht leider nicht :-(

Dann das Template sieht so aus:

Code:
<link rel="stylesheet" href="http://src.7nightlive.com/css_scripts/style.css">
<div align="center">
    <table width="95%" border="0" align="center" cellpadding="1" cellspacing="1">
      <tbody>
        <tr bgcolor="#C7C7C7" valign="top">
          <td width="303" rowspan="2" bgcolor="#C7C7C7">
            <p> <b>Beitrag von:</b><br>
                {von}<br>
            </p>
            <div class="info">{anzahl} Beitr&auml;ge <br><br>
          Status: {rang}</div>
            <br>            
            <img src="../img/avatar.gif" width="64" height="64">
          <p></p></td>
          <td width="910">
            <p>Geschrieben am: {datum}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
                <font color="#999999">---------------</font><br>
                <b>{titel}</b><br>
                <br>
          {text}</p></td>
        </tr>
        <tr bgcolor="#dedede">
          <td bgcolor="#C7C7C7"><p>
            <!-- <a href="#">Profil</a>&nbsp;&nbsp;&nbsp;-->
          {message}</p></td>
        </tr>
      </tbody>
  </table>
    <p>&nbsp;</p>
</div>

Dann habe ich noch eine Zweite Frage. Wie kann ich das machen, dass bei dem User sein eigenes Profilbild angezeigt wird? Die Bilder liegen in /profilbilder/forum/ die Bilder haben immer den Namen auch wie der User heißt also mit dem Nickname. Hmm kann mir da auch noch jemand helfen wie ich das machen kann?

Gruß jaylibII
 
PHP:
        if ($row["post"] <= 100){ // alle Beiträge unter und einschließlich 100 
        $benutzer_rang = "Neuling"; 
        } 
        elseif ($row["post"] <= 500){ // alle Beiträge unter und einschließlich 500 
        $benutzer_rang = "XXX"; 
        } 
        elseif ($row["post"] <= 1000){ // alle Beiträge unter und einschließlich 1000 
        $benutzer_rang = "XXY"; 
        }
Dieses codestück Zeigt den Rang an. Kannst ja einfach die 500 in ein 300 ändern und das XXX in ein Profi. Und wenn du noch mehr willst einfach weitere elseif's hinzufügen.

Das mit dem Bild sehe ich nicht 100%ig wie das funktionieren könnte. Aber kannst ja mal folgendes versuchen:
Im Template, dort wo das Avatar bild angezeigt wird den text "avatar.gif" ersetzen durch {avatar}.
Im Code sollte dann noch folgendes stehen.

$avatar = $row['avatar']; // avatar besorgen
$ausgabe = str_replace("{von}",$von.'.jpg',$ausgabe); // avatar ins template einsetzen

Ich habe aber keinen Plan ob das funktioniert da ich hald nicht den ganzen Quelcode sehe. Aber kannst es ja mal versuchen. So wie ich es gemacht habe geht es nur wenn das Avatar ein jpg ist. Wenn es nicht sicher ein jpg ist musst du das hald vorher noch testen. Ist es auch möglich das der User kein Avatar hat? Wenn ja muss es auch nocht etwas anderst aussehen...

MFG
redX
 
redX hat gesagt.:
PHP:
        if ($row["post"] <= 100){ // alle Beiträge unter und einschließlich 100 
        $benutzer_rang = "Neuling"; 
        } 
        elseif ($row["post"] <= 500){ // alle Beiträge unter und einschließlich 500 
        $benutzer_rang = "XXX"; 
        } 
        elseif ($row["post"] <= 1000){ // alle Beiträge unter und einschließlich 1000 
        $benutzer_rang = "XXY"; 
        }
Dieses codestück Zeigt den Rang an. Kannst ja einfach die 500 in ein 300 ändern und das XXX in ein Profi. Und wenn du noch mehr willst einfach weitere elseif's hinzufügen.

Das mit dem Bild sehe ich nicht 100%ig wie das funktionieren könnte. Aber kannst ja mal folgendes versuchen:
Im Template, dort wo das Avatar bild angezeigt wird den text "avatar.gif" ersetzen durch {avatar}.
Im Code sollte dann noch folgendes stehen.

$avatar = $row['avatar']; // avatar besorgen
$ausgabe = str_replace("{von}",$von.'.jpg',$ausgabe); // avatar ins template einsetzen

Ich habe aber keinen Plan ob das funktioniert da ich hald nicht den ganzen Quelcode sehe. Aber kannst es ja mal versuchen. So wie ich es gemacht habe geht es nur wenn das Avatar ein jpg ist. Wenn es nicht sicher ein jpg ist musst du das hald vorher noch testen. Ist es auch möglich das der User kein Avatar hat? Wenn ja muss es auch nocht etwas anderst aussehen...

MFG
redX


Hallo,

danke für deine Antwort. Das mit dem Bild werde ich gleich mal versuchen, ob das so klappt aber das mit den Rängen das klappt ja eben gerade nicht der Code was ich da drin haben, da wird dann einfach nichts angezeigt, das heißt, dass das wohl nicht geht oder? Hmm ich weiß echt nicht mehr weiter :-(

Gruß jaylibII
 
Gib mal vor
$ausgabe = str_replace("{rang}",$benutzer_rang,$ausgabe); // rang ins template einsetzen

aus, was in der Variabel $benutzer_rang drin steht. Wenn dort nämlich nichts drinsteht ist es klar, das nichts angezeigt wird ;-)

Und das selbe mit der $row["post"] wenn das oben nicht funktioniert hat.
if ($row["post"] <= 100){ // alle Beiträge unter und einschließlich 100

Wir müssen mal schauen wo der Fehler passiert. Bis jetzt habe ich keine Ahnung wieso es nicht geht. Gib bescheid sobald du das mal getestet hast

MFG
redX
 
@redX,

ja danke dir. Aber eine Frage, wie muss ich das machen, dass er mir ausgibt was in $benutzer_rang drin ist? Und wo muss ich das dann ausgeben lassen auch im Template? oder wo?

Gruß jaylibII
 
Ganz am schluss gibt es ja einen
echo $ausgabe;

Also wenn du zuvor irgendwo einen echo machst wird das einfach oberhalb von echo $ausgabe; angezeigt.
Also kannst du jetzt das Zeugs irgendwo ausgeben. Es steht dann eifach ganz oben, wenn es vor dem echo $ausgabe; steht oder ganz unten, wenn es danach steht ;)

Am besten machst du
Echo "Benutzerrang ->".$benutzer_rang ."<-<br>";

Dann siehst du auch wenn "", also nichts, drinsteht.

MFG
redX
 
Hallo,

Ok es geht aber es wir immer nur Neuling angezeigt:

Hab das nur mal so gemacht also dass ich sehe ob sich was ändert mit den Anzeigen:

PHP:
    $sql = "SELECT * FROM simple_posts  WHERE threadid = '".mysql_escape_string($threadid)."' ORDER BY postid ASC";
      $result = mysql_query($sql) or die(mysql_error());
      while($row = mysql_fetch_Assoc($result)) {
       $von = $row['von'];

   if (!isset($ppu[$von])) {
      $ppusql = "SELECT COUNT(*) AS anzahl FROM `simple_posts` WHERE `von`='$von'"; //[1]
      $ppuresult = mysql_query($ppusql) OR die(mysql_error());
      $ppurow = mysql_fetch_assoc($ppuresult);    
      $ppu[$von] = $ppurow['anzahl']; ;
   }	
		if ($row["post"] <= 1){ // alle Beiträge unter und einschließlich 100
		$benutzer_rang = "Neuling";
		}
		elseif ($row["post"] <= 2){ // alle Beiträge unter und einschließlich 500
		$benutzer_rang = "Du bist gut";
		}
		elseif ($row["post"] <= 5){ // alle Beiträge unter und einschließlich 1000
		$benutzer_rang = "Klasse";
		}

Hmm an was kann das denn liegen?

Gruß jaylibII
 
Zuerstmal, wenn der User mehr als 5 Beiträge hat bekommt er in diesem Beispiel gar keinen Rang ;)
Noch einen Else zweig am Schluss der alles darüer abfängt rate ich dir :D

An was das liegen kann? Es kann nur daran liegen das im $row["post"] o oder 1 drinn steht. Sonst würde es ja gar nie in die If Bedingung reinspringen. Hat der User denn schon mehr Posts erstellt?

Wird der Rang jetzt also angezeigt? Wenn nicht mach mal das:
PHP:
$sql = "SELECT * FROM simple_posts  WHERE threadid = '".mysql_escape_string($threadid)."' ORDER BY postid ASC"; 
      $result = mysql_query($sql) or die(mysql_error()); 
      while($row = mysql_fetch_Assoc($result)) { 
       $von = $row['von']; 

   if (!isset($ppu[$von])) { 
      $ppusql = "SELECT COUNT(*) AS anzahl FROM `simple_posts` WHERE `von`='$von'"; //[1] 
      $ppuresult = mysql_query($ppusql) OR die(mysql_error()); 
      $ppurow = mysql_fetch_assoc($ppuresult);     
      $ppu[$von] = $ppurow['anzahl']; ; 
   }     

   Echo "Benutzer ".$row['von']. " hat ".$row["post"]." Beitr&auml;ge<br>"; // Das zeigt an, wie viele Beiträge jeder User schon erfasst hat. Das wird ganz oben zu sehen sein.
        if ($row["post"] <= 1){ // alle Beiträge unter und einschließlich 100 
        $benutzer_rang = "Neuling"; 
        } 
        elseif ($row["post"] <= 2){ // alle Beiträge unter und einschließlich 500 
        $benutzer_rang = "Du bist gut"; 
        } 
        elseif ($row["post"] <= 5){ // alle Beiträge unter und einschließlich 1000 
        $benutzer_rang = "Klasse"; 
        }
 
Hey wenn ich dein Code nehmen, dann passiert folgendes:

GAR NICHTS es wird auch nur NEULING angezeigt

:-(
 
Zurück