Seite 1 von 2

Probleme mit KTemplate

Verfasst: So 08 Mai, 2005 1:23 pm
von Chriha
Tacho,
ich hoffe, daß du mir bei meinem Problem weiterhelfen kannst. Und zwar verwende ich die Template-lasse von Kuerbis.org. Wie die Klasse ausschaut, kann man hier sehen und hier ist das Beispiel. Soweit klappt auch alles ganz gut, jedoch hab ich Probleme, wenn es um das auflisten von mehreren Werten aus der DB geht. Ich würde zum Beispiel gern eine Rangliste machen, wie das in der PHP-Datei ausschaut weiß ich. Nur in Verbindung mit Templates hab ich es noch nicht so.
Ich hoffe du weißt was ich meine ... wäre für Hilfe sehr dankbar!

Achja, um auch etwas an Informationen dazulassen ...

Code: Alles auswählen

CREATE TABLE `user_stats` (
  `userid` int(11) NOT NULL auto_increment,
  `rank` varchar(20) collate latin1_general_ci NOT NULL default '1',
  `ruhm` int(20) NOT NULL default '0',
  `erfahrung` int(11) NOT NULL default '1',
  `username` varchar(40) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
Das sind die Werte, die aus der DB abgefragt werden ...

Verfasst: Mo 09 Mai, 2005 8:19 am
von Thies
Ich kenne diese Template-Klasse zwar nicht, aber sie scheint nicht so "schwer" zu sein. Am besten überlegst Du Dir mal den php-Code, wie der aussieht und den geplanten HTML-Code für die Ausgabe. Das postest Du hier und ich versuche zu helfen.

Das jetzt alles selbst zu machen, schaffe ich zeitlich leider nicht.

OK?

CU

Frank-Andre

Verfasst: Mo 09 Mai, 2005 5:01 pm
von Chriha
OK, also ich hatte mir das eventuell so gedacht: Für die Rangliste brauch ich erstmal die Werte
[php]$users_sql = mysql_query("SELECT * /* ich weiß, man sollte nicht SELECT * benutzen, is jetz nur für das Beispiel */
FROM user_stats
ORDER BY ruhm DESC")
or die (mysql_error());[/php]
Dann erstelle ich eine while - Schleife, damit alle geforderten Werte nacheinander ausgegeben werden
[php]while ($users = mysql_fetch_array($result))
{
// normalerweise würd ich jetzt die arrays mit $users['id'] etc einfügen. aber wie ich das in Verbindung mit dem Template mache, weiß ich leider nicht
}[/php]
In dem Template hätte ich dann den Schalter <!-- BEGIN users -->{id}<!-- END users --> mit dem Platzhalter {id} eingebaut. Wie normale Blöcke funktionieren "weiß ich", aber die Ausgabe von mehreren Werten ist zu viel für den Anfang. Hab auch schon in vielen Foren nachgefragt, aber nie eine richtigte bzw. keine Antwort erhalten und da Du mir das mit dem Cronjob so schön erklärt hast, dachte ich, daß Du mir da weiterhelfen kannst. :D
Wär jedenfalls sehr nett von Dir!!!

Verfasst: Di 10 Mai, 2005 7:54 am
von Thies
Versuche ich gern, bin beruflich nur sehr einegspannt, kann also nicht immer sofort reagieren.

Versuche es mal so:

[php]$t_temptest = $t->fetchBlock("users");
while ($users = mysql_fetch_array($result))
{
$t_temptest->assign("id",$users['id']);
$t->assign("users",$t_temptest);
$t_temptest->reset();
}[/php]
So müsste es meines Erachtens gehen. Aber ich kann es nicht testen.

$t_temptest musst Du ggf. durch die Variable ersetzen, die Du nutzt.

Wenn es nicht geht: poste bitte auch mal das komplette Template mit den Platzhaltern, damit ich mir einen Überblick veschaffen kann.

CU

Frank-Andre

Verfasst: Di 10 Mai, 2005 9:26 pm
von Chriha
Leider bin ich zeitlich auch sehr eingeschränkt ... bin erst Heim gekommen, werde es aber morgen ausprobieren und mich dann wieder melden.

Danke schonmal für Deine Hilfe!!!

Verfasst: Mi 11 Mai, 2005 4:40 pm
von Chriha
Also, funktioniert leider nicht oder ich hab irgendwas falsch gemacht. Meine Datei rangliste.php schaut nun so aus:
[php]
session_start();

// Header und Template uncluden
include ("includes/header.php");
include_once "includes/class_ktemplate.inc.php";

// Instanz für das Template erstellen
$t = new KTemplate("templates/rangliste.html");


$users_sql = mysql_query("SELECT *
FROM user_stats
ORDER BY ruhm DESC")
or die (mysql_error());

$t_users = $t->fetchBlock("users");
while ($users = mysql_fetch_array($users_sql))
{
$t_users->assign("id",$users['id']);
$t -> assign("users",$t_users);
$t_users->reset();
}




// Template ausgeben
$t ->out();

// Footer includen
include ("includes/footer.php");
[/php]
und mein Template rangliste.html so:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<table align=center cellspacing=1 cellpadding=3 bgcolor=#9F9FFF width=100%>
  <tr bgcolor="#A4A4FF"> 
    <td width="100%"> <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>:: 
        Rangliste ::</strong></font></div></td>
  </tr>
  <tr bgcolor="CCCCFF"> 
    <td> <div align="center">
      <p>         </p>
      <!-- BEGIN users -->
      <table width="70%"  border="0">
        <tr>
          <td width="7%">Platz</td>
          <td width="25%">Name</td>
          <td width="33%">Erfahrung</td>
          <td width="26%">Platz</td>
        </tr>
        <tr>
          <td>{rang}</td>
          <td>{username}</td>
          <td>{erfahrung}</td>
          <td>{id}</td>
        </tr>
      </table>
      <!-- END users -->
      <p> </p>
    </div></td>
  </tr>
</table>
</body>
</html>
Ich wollte erstmal mit der ID ausprobieren, deswegen auch nur die ID in der while-Schliefe

Verfasst: Mi 11 Mai, 2005 7:00 pm
von Thies
Kann ich das irgendwo online sehen, damit ich weiss, was genau passiert resp. nicht passiert. Sonst steuere ich die Titanic durch den Nebel :)

Kommt ein Fehlerhinweis oder so?

CU

Frank-Andre

Verfasst: Mi 11 Mai, 2005 8:36 pm
von Chriha
Ui, sorry ... hatte ich vergessen. Fehler werden keine angezeigt.
Leider hab ich das nur auf der Festplatte, werd es deswegen morgen, wenn ich wieder komme, mal raufladen.

Verfasst: Do 12 Mai, 2005 2:48 pm
von Thies
Das wäre gut, weil ohne "optische Begutachtung" habe ich kaum eine Chance was herauszufinden.

CU

Frank-Andre

Verfasst: Do 12 Mai, 2005 5:18 pm
von Chriha
Also, ich hab jetz ein paar Probleme gehabt, weil auf meinem Heimserver PHP 5 läuft und auf dem Ersatz nur PHP 4. Die Seite wird aber nun so angezeigt, wie sie bei mir auch ausschaut.

Hier

Verfasst: Do 12 Mai, 2005 5:28 pm
von Thies
Füge bitte mal nach

Code: Alles auswählen

while ($users = mysql_fetch_array($users_sql)) 
    { 
folgendes ein:

Code: Alles auswählen

print_r($users); echo "<br /><br />";
Dann kann ich sehen, ob überhaupt was aus der DB gelesen wird.

CU

Frank-Andre

Verfasst: Do 12 Mai, 2005 5:51 pm
von Chriha
eingefügt

Verfasst: Do 12 Mai, 2005 5:58 pm
von Thies
Fehler schon gesehen?

Der Tabelleneintrag lautet nicht id sondern userid, also musst Du das $users['id'] durch $users['userid'] ersetzen.

Verständlich?

CU

Frank-Andre

Verfasst: Do 12 Mai, 2005 6:35 pm
von Chriha
Gott bin ich doof! Geht also jetzt. Werd jetzt mal ein wenig rumtüfteln und mich dann wieder melden, wenn ich wieder nicht weiterkomme.


Ich bedanke mich sehr für Deine Hilfe!!!

Verfasst: Do 12 Mai, 2005 8:44 pm
von Thies
Gern geschehen. Melde Dich, wenn ich weiterhelfen soll.

Ach ja, ändere im Template den Block

Code: Alles auswählen

      <!-- BEGIN users --> 
      <table width="70%"  border="0"> 
        <tr> 
          <td width="7%">Platz</td> 
          <td width="25%">Name</td> 
          <td width="33%">Erfahrung</td> 
          <td width="26%">Platz</td> 
        </tr> 
        <tr> 
          <td>{rang}</td> 
          <td>{username}</td> 
          <td>{erfahrung}</td> 
          <td>{id}</td> 
        </tr> 
      </table> 
      <!-- END users --> 
in

Code: Alles auswählen

      <table width="70%"  border="0"> 
        <tr> 
          <td width="7%">Platz</td> 
          <td width="25%">Name</td> 
          <td width="33%">Erfahrung</td> 
          <td width="26%">Platz</td> 
        </tr> 
      <!-- BEGIN users --> 
        <tr> 
          <td>{rang}</td> 
          <td>{username}</td> 
          <td>{erfahrung}</td> 
          <td>{id}</td> 
        </tr> 
      </table> 
      <!-- END users --> 
damit die Überschrift nur einmal angezeigt wird.

CU

Frank-Andre

Verfasst: Do 12 Mai, 2005 9:43 pm
von Chriha
Alles klar! Herzlichen Dank nochmal ;)

Verfasst: Fr 27 Mai, 2005 8:27 pm
von Chriha
Jetz brauch ich leider nochmal Deine Hilfe bei dem Template. Ich möchte Blöcke in Blöcken anzeigen lassen, bekomme aber immer folgende Fehlermeldung:
Fatal error: Call to a member function on a non-object in C:\apachefriends\xampp\htdocs\game\haendler.php on line 73
Ich hab das so gemacht, wie es auch in der Beispieldatei (weiter oben) gemacht wird. Ist aber anscheinend nicht richtig.
Meine Dateien schauen so aus
haendler.html

Code: Alles auswählen

	  <!-- BEGIN show_autos -->
      <form method="post" action="haendler.php">
      <table width="80%" border="0" align="center" cellpadding="0">
        <tr bgcolor="#9797FF" class="style2">
          <td width="836" class="additional"><div align="center">:: <a href="javascript:display('show_bmw')">BMW</a> ::</div></td>
        </tr>
        <tr>
          <td class="style2"><table width="100%"  border="0" align="center" class="additional2" id="show_bmw">
            <tr bgcolor="#B7B7FF">
              <td width="3%" class="style2"> </td>
              <td width="14%" class="style2"><div align="left">Firma</div></td>
              <td width="18%" class="style1">Modell</td>
              <td width="14%" class="style1">Hubraum</td>
              <td width="14%" class="style1">Power</td>
              <td width="14%" class="style1">Zylinder</td>
              <td width="14%" class="style1">Vmax</td>
              <td width="15%" class="style1"><div align="left" class="style1">0 - 100 kmh </div></td>
              <td width="12%" align="center" valign="middle" class="style1"><div align="left">Kosten</div></td>
              <td width="10%" align="center" valign="middle" class="style1"><div align="left">Level</div></td>
            </tr>
            <tr bgcolor="#B7B7FF" class="style1">
              <td class="style2"> </td>
              <td class="style2"> </td>
              <td class="style1"> </td>
              <td class="style1"> </td>
              <td class="style1"> </td>
              <td class="style1"> </td>
              <td class="style1"> </td>
              <td class="style1"> </td>
              <td align="center" valign="middle" class="style1"><div align="left"></div></td>
              <td align="center" valign="middle" class="style1"> </td>
            </tr>
			<!-- BEGIN show_bmws -->
            <tr bgcolor="#B7B7FF" class="style1">
              <td align="left" valign="top" class="style2"><input name="autos" type="radio" value="{radioid}"></td>
              <td class="style1"><div align="left">{firma}</div></td>
              <td class="style1"><div align="left">{modell}</div></td>
              <td class="style1">{hubraum}</td>
              <td class="style1"><div align="left">{ps}</div></td>
              <td class="style1">{zylinder}</td>
              <td class="style1"><div align="left">{kmh}</div></td>
              <td class="style1"><div align="left">{beschleunigung}</div></td>
              <td align="center" valign="middle" class="style1"><div align="left">{kosten}</div></td>
              <td align="center" valign="middle" class="style1"><div align="left">{level}</div></td>
            </tr>
			<!-- END show_bmws -->
            <tr bgcolor="#B7B7FF" class="style1">
              <td align="left" valign="top" class="style2"> </td>
              <td class="style1"><div align="left"></div></td>
              <td class="style1"><div align="left"></div></td>
              <td class="style1"> </td>
              <td class="style1"><div align="left"></div></td>
              <td class="style1"> </td>
              <td class="style1"><div align="left"></div></td>
              <td class="style1"><div align="left"></div></td>
              <td align="center" valign="middle" class="style1"><div align="left"></div></td>
              <td align="center" valign="middle" class="style1"><div align="left"></div></td>
            </tr>
            <tr bgcolor="#B7B7FF" class="style1">
              <td colspan="11" class="style2"><div align="left"> </div>
                  <div align="left"></div>
                  <div align="left"></div>
                  <div align="left"></div>
                  <div align="left"></div>
                  <div align="left"></div>
                  <div align="center">
                    <input class="submit" type="submit" name="kaufen" value="Kaufen">
                </div></td>
            </tr>
          </table>
            </td>
          </tr>
      </table>
	  </form>
	  <!-- END show_autos -->
[php]else
{
$t_autos_zeigen = $t -> fetchBlock("show_autos");
// -------------------------------------
// ----- BMWs --------------------------
// -------------------------------------
$bmw_sql = mysql_query("SELECT id, firma, modell, hubraum, ps, zylinder, beschleunigung, vmax, kosten, level, bild
FROM autos
WHERE firma = 'BMW'
ORDER BY level ASC")
or die (mysql_error());

$t_bmw = $t -> fetchBlock("show_bmws");
while ($bmw = mysql_fetch_array($bmw_sql))
{
$t_bmw -> assign("radioid",$bmw['id']);
$t_bmw -> assign("firma",$bmw['firma']);
$t_bmw -> assign("modell",$bmw['modell']);
$t_bmw -> assign("hubraum",$bmw['hubraum']);
$t_bmw -> assign("ps",$bmw['ps']);
$t_bmw -> assign("zylinder",$bmw['zylinder']);
$t_bmw -> assign("kmh",$bmw['vmax']);
$t_bmw -> assign("beschleunigung",$bmw['beschleunigung']);
$t_bmw -> assign("kosten",$bmw['kosten']);
$t_bmw -> assign("level",$bmw['level']);
$t -> assign("show_bmws",$t_bmw);
$t_autos_zeigen -> assign("show_bmws", $t_bmw);
$t_bmw -> reset();

}

}


$t -> assign("auto_vorhanden",$t_vorhanden);
$t -> assign("auto_zuhoch",$t_zuhoch);
$t -> assign("auto_zuteuer",$t_zuteuer);
$t -> assign("auto_gekauft",$t_gekauft);
$t -> assign("show_autos", $t_autos_zeigen);

// Template ausgeben
$t ->out();[/php]
Ich hab jetzt nur den wesentlichen Code genommen, um es übersichtlicher für Dich zu halten.

Ich hoffe ich nerve Dich mit meinen Problemen nicht, wenn ja, einfach schreiben ;)

Verfasst: Sa 28 Mai, 2005 8:36 pm
von Thies
Du nervst nicht, ich bin nur dieses Wochenende kaum online.

Solange ich nicht weiss, welches genau die Zeile 73 in der haendler.php ist, wird es schwer. Und poste am besten mal die ganze haendler.php als Anhang.

CU

Frank-Andre

Verfasst: Di 31 Mai, 2005 9:20 pm
von Chriha
Sorry, ich vergas ;)

Dieser Fehler kommt nun:
Fatal error: Call to a member function on a non-object in C:\apachefriends\xampp\htdocs\game\haendler.php on line 93
Lass Dir ruhig Zeit ...

Verfasst: Mi 01 Jun, 2005 11:53 am
von Thies
Frage: was soll die Zeile

Code: Alles auswählen

              $t_autos_zeigen -> assign("show_bmws", $t_bmw);
bewirken, die erscheint mir aktuell vollkommen überflüssig, vor allem an dieser Stelle.

Innerhalb der Schleife des Blockes "show_bmws" dürfen auch nur dessen Variablen übertragen werden, der Block "show_autos" ist der übergeordnete und der müsste danach (nach Ende der Schleife) aufgerufen werden. In diesem Block hast Du aber keine Variablen, denn die kommen alle nur im Block "show_autos" vor.

Du musst die Blöcke von innen nach aussen aufrufen und immer nur die Variablen "austauschen", die explizit in diesem Block (ohne die der inneren Blöcke!) vorkommen. Wenn in einem Block gar keine Variable vorkommt, ist es entweder kein richtiger Block oder ich setze einen Dummy, also {dummy} der mit   (Leerzeichen) ersetzt wird.

Verstanden, was ich meine?

CU

Frank-Andre