mehrmalige Ausgabe eines templates

Habe mal wieder ein Problem mit der Ausgabe von templates.
Ich arbeite mit diesem System

Ich habe in der Datenbank 4 Einträge in der Tabelle "nachrichten" mit der selben Userid und diese sollten eigentlich in meinem template "message_in.tpl" an der Variable "$messageinmsg" auch ausgegeben werden. Nur leider wird immer nur eine Nachricht ausgegeben. Wie kann ich es bewerkstelligen, das auch alle anderen angezeigt werden
hier mal die zwei benötigten Templates und das dazugehörige php-Script.

message_in.tpl
HTML:
<table cellpadding="2" cellspacing="0" border="1" width="70%">
  <tr>
    <td>
<p><b>Vorhandene Messages:</b></p>
<table cellpadding="3" cellspacing="0" border="1" width="100%">
  <tr>
    <td>&nbsp;</td>
    <td>Betreff</td>
    <td>Von</td>
    <td>&nbsp;</td>
	<td>&nbsp;</td>
  </tr>
  $messageinmsg
</table>
</td>
</tr>
</table>

messageinmsg.tpl
HTML:
<tr>
    <td><a href="message.php?section=l&ouml;schen&action=l&ouml;schen&id=$id">Löschen</a></td>
    <td>$message[betreff]</td>
    <td>$message[absender]</td>
	<td>$message[status]</td>
    <td><a href="message.php?section=inhaltsehen&action=inhaltsehen&id=$id">Ansehen</a></td>
</tr>

message.php
PHP:
$res = mysql_query("SELECT id, userid, betreff, inhalt, absender, status FROM nachrichten WHERE userid='".$_SESSION['user_id']."'");
  if(mysql_num_rows($res)){
    while($message = mysql_fetch_array($res)){
	eval ("\$messageinmsg = \"".gettemplate("message_in_msg")."\";");
	}
  eval ("\$messages = \"".gettemplate("message_in")."\";");
  }
 
PHP:
$res = mysql_query("SELECT id, userid, betreff, inhalt, absender, status FROM nachrichten WHERE userid='".$_SESSION['user_id']."'");
if( mysql_num_rows($res) ) {
	$template = gettemplate("message_in_msg");
	$messageinmsg = '';
	while( $message = mysql_fetch_assoc($res) ) {
		eval("\$messageinmsg .= \"".$template."\";");
	}
	eval("\$messages = \"".gettemplate("message_in")."\";"); 
}
 
So habe ein weiteres Problem wo jetzt schon mehrere Tage versuche es zu lösen.
Ich möchte jetzt ein Template (smilebit) nicht nur mehrmals hintereinander ausgeben, sondern das nach jedem 5. die Zeile umgebrochen wird. Dazu habe ich im Template am Ende einfach einen Platzhalter $br eingefügt. Meine jetztiger php-Code sieht folgendermassen aus
PHP:
$smile = mysql_query("SELECT * FROM smilies ORDER BY ordnungszahl ASC");
  if( mysql_num_rows($smile) ) {
	 $tplsmilebit = gettemplate("smilebit");
     $smilebit = "";
	 $i=0;
	  while($row = mysql_fetch_assoc($smile)){
	  $i++;
      if($i%5==0) $br = "<br>";
      eval("\$smilebit .= \"".$tplsmilebit."\";");
	  }
	eval("\$smilies = \"".gettemplate("smile")."\";");
  }
Nach den ersten 5 funktioniert das ganze schon, aber dann wird das Template nur noch übereinander ausgegeben und es kommt natürlich der Hinweis das da eine undefinierte Variable br im Template vorhanden.
 
Zuletzt bearbeitet:
Hallo,

du hast da ein sehr merkwürdiges Template System - aber naja.

du solltest vor dem Überprüfen auf den 5. Eintrag immer die Variable $br zurücksetzen, dann klappt es auch bei den nächsten Durchläufen:
PHP:
$br = null;
if($i%5==0) $br = "<br>";

Viele Grüße
 
Zuletzt bearbeitet:
mhh..
wenn ich dies mache kommt zwar keine Notice mehr, aber das Template wird nur noch übereinander ausgegeben und nicht nach jedem 5. ein Umbruch

ein sehr merkwürdiges Template System
Nun ich verwende das hier aus den Tutorials (siehe Link im ersten Post). Es ist bisher das für mich einfachste um php-code vom html-code getrennt zu halten.
 
Dann wird die Bedingung ($i%5==0), aus welchem Grund auch immer, wohl bei jedem Durchlauf zutreffen.

Viele Grüße
 
eigentlich nicht, denn ich habe 15 Einträge aus der DB. Ich versuche jetzt nochmal zu schildern was ich erreichen möchte.
Diese 15 Einträge werden mit dem Template smilebit ausgegeben und damit das Template nicht 15 mal in einer Zeile ausgegeben wird, soll nach jedem 5ten ein zeilenumbruch durchgeführt werden.
php ohne umbruch:(alles wird in einer Zeile ausgegeben)
PHP:
$smile = mysql_query("SELECT * FROM smilies ORDER BY ordnungszahl ASC");
  if( mysql_num_rows($smile) ) {
	 $tplsmilebit = gettemplate("smilebit");
     $smilebit = "";
	  while($row = mysql_fetch_assoc($smile)){
      eval("\$smilebit .= \"".$tplsmilebit."\";");
	  }
	eval("\$smilies = \"".gettemplate("smile")."\";");
  }
Inhalt des smilebit.tpl
HTML:
<a href="javascript:smilie('$feldname', '$row[bbcode]')"><img src="./$row[image]" border="0"></a>$br

Wie stelle ich das jetzt an, das das <br> nach jeder 5ten Ausgabe über den Platzhalter $br gesetzt wird
 
Zurück