Probleme mit KTemplate

Alles rund um PHP und die Datenbanksprache MySQL.

Moderatoren: Thies, Soltano

Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Probleme mit KTemplate

Beitrag 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 ...
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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!!!
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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!!!
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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.
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Das wäre gut, weil ohne "optische Begutachtung" habe ich kaum eine Chance was herauszufinden.

CU

Frank-Andre
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag von Chriha »

eingefügt
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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!!!
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag von Chriha »

Alles klar! Herzlichen Dank nochmal ;)
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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 ;)
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Chriha
Newbie
Newbie
Beiträge: 23
Registriert: So 27 Mär, 2005 12:51 pm
Wohnort: Ruhpolding

Beitrag 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 ...
Dateianhänge
haendler.txt
Nun ist es Zeile 93
(4.62 KiB) 808-mal heruntergeladen
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Antworten