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

Beitrag von Chriha »

Wenn ich ehrlich bin, nein :(
Könntest Du mir vll. nur ein Beispiel zeigen, wie sowas ausschauen müsste?

Das ist zurzeit mein einziges Problem, wo ich echt nicht weiter komme...
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Packe mir bitte mal alle Files samt MySQL-Dump in eine ZIP-Datei und sende diese an webmaster@f-thies.de

Dann kann ich es mal selber genau testen. Ich weiss nur nicht, wann ich dazu komme, wohl erst Anfang nächster Woche, ggf. am Wochenende.

CU

Frank-Andre
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Also, ich versuche das mit den Blöcken besser zu erklären:

Das sind deine beiden Blöcke aktuell:

Code: Alles auswählen

     <!-- BEGIN show_autos --> 
         <!-- BEGIN show_bmws --> 
         <!-- END show_bmws --> 
     <!-- END show_autos -->
Du musst zuerst den Block show_bmws bearbeiten, was Du ja auch machst mit

Code: Alles auswählen

$t_bmw = $t -> fetchBlock("show_bmws"); 
und der While-Schleife.

Was macht die Template-Routine nun? Sie nimmt den Block show_bmws aus der Vorlage raus, trägt nacheinander die Daten in diesen Block ein und "schreibt" die Daten wieder in die Vorlage.

Die Zeile

Code: Alles auswählen

$t_autos_zeigen -> assign("show_bmws", $t_bmw); 
in der While-Schleife bezieht sich aber gar nicht auf diesen Block. Denn da geht es um den Block show_autos, der übergeordnet ist und somit erst nach Abschluß der Datenübertragung im Block show_bmws ausgeführt werden dürfte.

Dieser Befehl dürfte also erst nach der Scheife kommen.

Da ich die KTemplate-Routine selber nicht nutze, kann ich es nur aus der Theorie her betrachten, nimm einfach mal diese Zeile raus und schaue, was passiert. Wenn ich größere Routinen schreibe, muss ich auch immer wieder mit Trial-and-Error herausfinden, wo ich Gedankenfehler hatte :D

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, habe jetz die Zeile
[php]
$t_autos_zeigen -> assign("show_bmws", $t_bmw);
[/php]
hinter die While-Schleife angefügt, jedoch wird nun die Fehlermeldung angezeigt
Fatal error: Call to a member function on a non-object in
Der Fehler soll in der ersten Zeile der While-Schleife sein.

Im Beispiel von Kuerbis.org schaut das so aus
[php]
// now fetch the three nested blocks into three Template object instances
// Note: The block "table" isn't necessary in every case, but I want
// to demonstrate that it is possible to re-use complete blocks.

$t_table = $t->fetchBlock("table");

$t_row = $t_table->fetchBlock("row");

$t_col = $t_row->fetchBlock("col");

// build a table with 5 rows and 5 columns
for ($row = 1; $row <= 5; $row++)
{
for ($col = 1; $col <= 5; $col++)
{
// assign a string to the column placeholder object instance
$t_col->assign("cell_content","foo $row $col");

// put column object instance into row object
$t_row->assign("col",$t_col);

// clear content of column
$t_col->reset();
}
// put row into table
$t_table->assign("row",$t_row);

// clear row content
$t_row->reset();
}

// put the complete table object into the main template
$t->assign("table",$t_table);
[/php]
Bin also echt ratlos, warum das nicht bei mir funktioniert :(
______________________

Edit: Ach, ich habs!!! Die Zeile[php]$t_bmw = $t -> fetchBlock("show_bmws");[/php]
müsste so ausschauen
[php]$t_bmw = $t_autos_zeigen -> fetchBlock("show_bmws");[/php]
Steht ja auch oben im Beispiel :unschuldig:
Und die Zeile
[php]$t_autos_zeigen -> assign("show_bmws", $t_bmw);[/php]gehört vor[php]$t_bmw -> reset();[/php]
Deine Variante wäre für mich leichter und auch logischer gewesen ... naja, trotzdem herzlichen Dank für Deine Hilfe!!! Werde Dich weiterempfehlen ;) und auf Dich wieder zurück greifen (wird bei meinem Können wahrscheinlich nich lange dauern), wenn ich mal nicht weiter weis und Du nichts dagegen hast ;)
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Kein Problem, ich helfe gern weiter, wenn ich kann. ich habe mir das was ich kann (was auch noch nicht sooo viel ist) auch per Trial and Error und Hilfesuchen in Foren angeeignet :)

Wenn es wieder Probleme gibt, dürfte es aber wirklich das beste sein, wenn Du mir die gesamten Files plus ein Dump der DB zumailst, damit ich es lokal installieren und testen kann. Dann wird die Hilfe etwas besser sein können ... hoffentlich :D

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, Du hast mir schon sehr geholfen. Ohne Dich würd ich wahrscheinlich heute noch rätseln wie das mit den Blöcken funzt.
Das mit den Files werd ich das nächste mal machen, is nur zurzeit sehr unübersichtlich ... bin froh, wenn ich selbst noch durchblicke ;)
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Ich nutze eine andere Template-Routine und die geht starr nach den Blöcken vor. Das hat den Vorteil, dass man die Systematik sehr schnell verstehen kann, dafür aber sehr sauber proggen muss, damit keine Fehler auftreten. Denn dann kommt kein Fehlerhinweis, sondern die Blöcke werden total konfus dargestellt :)

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 noch komplizierter wie die, die ich hab, dann hab ich mir ja die richtige ausgesucht ;)
Ma ne Frage: Wenn ich am Spiel arbeite, dann arbeite ich nur mit Mozilla, wo auch alles korrekt angezeigt wird. Wenn ich das Spiel aber dann im IE aufrufe, werden lauter MySQL Fehler angezeigt. Woran kann das liegen?
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

MySQL-Fehler sind unabhängig vom Browser, das kann ich kaum glauben. MySQL wird ja auf dem Server verarbeitet und nicht im Browser, also tritt der Fehler auf, egal welchen Browser man nutzt.

Kann ich das irgendwo online nachvollziehen?

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 »

Ich hab jetz mal 2 Screenshots gemacht, hoffe die gehen auch.
Der eine ist von Mozilla, der andere vom IE.

Also, mir ist grad aufgefallen, daß die header.php und die uebersicht.php, die einzigen Dateien sind, bei denen Fehler angezeigt werden. Bei den anderen werden die Daten einfach nicht angezeigt ... ohne MySQL Fehler (siehe die fehlenden Daten in der ersten Spalte von rechts).

Die Zeile 42 in der Header ist hier die unterste Zeile. Also $username ...:
[php]// Username herrausfinden
$name_sql = mysql_query ("SELECT username
FROM users
WHERE userid = '".$_SESSION['userid']."'")
or die (mysql_error());
$username = mysql_result($name_sql, 'username');[/php]

Die Datei uebersicht.php war mit die erste Datei, die ich in PHP geschrieben habe. Ziemlich durcheinander und kompliziert alles, ich weiß ;) Ich wußte bisher noch nicht, was ich auf die Seite (Übersicht) bringen soll, hab sie deswegen auch nicht mehr angerührt.
Dateianhänge
ie.JPG
IE
(205.72 KiB) 898-mal heruntergeladen
mozilla.JPG
Mozilla
(112.51 KiB) 890-mal heruntergeladen
uebersicht.txt
uebersicht.php
(12.23 KiB) 854-mal heruntergeladen
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Oh, Mensch, so richtig kann cih Deinem Code nicht folgen :D

Code: Alles auswählen

      if ($erfpunkte == 1 || $erfpunkte <= 99)
      { ...  }
      elseif ($erfpunkte == 100 || $erfpunkte <= 299)
      { ...  }
Wenn $erfpunkte genau 1 ist oder kleiner 99 passiert etwas oder wenn $erfpunkte genau 100 oder kleiner 299 ...
Das müsste doch sicherlich

Code: Alles auswählen

      if ($erfpunkte >= 1 || $erfpunkte <= 99)
      { ...  }
      elseif ($erfpunkte >= 100 || $erfpunkte <= 299)
      { ...  }
heissen, oder?

Und mit mysql_result arbeite ich aus Unsicherheitsgründen nie.

Ich hätte z.B. anstelle von

Code: Alles auswählen

$sql_erf = mysql_query ("SELECT erfahrung, level
                         FROM user_stats
                         WHERE userid = '".$_SESSION['userid']."'")
                         or die("Konnte Tabelle nicht auswählen" . mysql_error());
$erfpunkte = mysql_result ($sql_erf, 0, 'erfahrung');
folgenden Code (ganz grob) benutzt:

Code: Alles auswählen

$result = mysql_query("SELECT erfahrung, level FROM user_stats WHERE userid = '".$_SESSION['userid']."'");
$details = mysql_fetch_array($result);
$erfpunkte = $details["erfahrung"];
Das finde ich sauberer, ist aber sicherlich Geschmackssache.

Warum der Fehler bei Dir kommt, kann ich daher leider aber auch nicht sagen, weil ich wie gesagt mysql_result nie nutze.

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 »

Joa, war ja die erste Datei, die ich in PHP geschrieben habe :)

Das mit den $erfpunkte und so, hatte ich deswegen so gemacht, weil das mit den Punkten nicht funktioniert hatte, wie ich es wollte. Möchte das alles sowieso mehr Datenbank basierend machen, weil ich vieles über ein Panel steuern möchte. Muss auch schauen, daß ich das irgendwie kürzer kriege, aber solang ich nicht weiß, was alles auf die Seite kommt, kümmer ich mich noch um andere Dinge.

Warum ist mysql_result unsicher? Ich benutze das immer, wenn ich nur eine Spalte brauche ...
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Ich glaube, ich habe irgendwo mal gelesen, dass mysql_result bei leeren Rückgaben Probleme macht. Deshalb nutze ich es gar nicht.

Such mal unter google nach Unable to jump to row 0: ungefähr 18.500 Seiten auf Deutsch

Der Befehl ist sehr sensibel und muss abgefangen werden. Das passiert mir mit mysql_fetch_array(..) nicht so schnell.

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 »

Ahso, joa ... dann werd ich in Zukunft auch nur noch mysql_fetch_array() verwenden.
Was kann man eigentlich mit CCDB machen, wenn ich fragen darf?
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

CCDB ist ein php-Tool zur Erstellung einer Website rund um Cheats, Lösungen, Trainer etc. inkl. News, also eine Art CMS. Schau einfach mal bei http://www.cheats-corner.de/ vorbei.

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 »

Is ja cool. Wielang hast Du denn für dieses Projekt gebraucht?
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag von Thies »

Ich habe Mitte 2002 angefangen (und da auch erst mit PHP und MySQL) und gut 18 Monate gebraucht, bis eine Version online war, mit der man schon einiges machen konnte. Dann habe ich weitere 18 Monate gebraucht, für das letzte sehr umfangreiche Update. Der lange Zeitraum liegt an meiner fehlenden Freizeit, da ich neben Beruf (50-60 Stunden-Woche), Familie etc. noch ein gutes Dutzend Website betreue und insgesamt an 3 php-Projekten arbeite.

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 »

Ich dachte vorher nicht, daß es so lange dauert ein größeres Projekt zu programmieren. Februar hab ich angefangen und ich bin nicht mal bei der Hälfte ... und wirklich viel Zeit hab ich leider auch nicht.
Aber dafür, daß Du Dich noch um eine ganze Menge anderer Dinge kümmerst, find ich das eigentlich recht schnell!!!
Ich bin ma gespannt, wie weit ich in 3 Jahren bin ...

Naja, möchte jetz hier Dein Forum nicht vollspammen. Bedanke mir recht herzlich für Deine Hilfe!!! Ich meld mich wieder ;)
Antworten