Was mache ich falsch?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Was mache ich falsch?

Beitrag von Gumfuzi »

Ich komme einfach nicht weiter mit meiner eigenen Seite:

Habe den nachstehenden Code, aber beim Ausführen bleibt die Seite weiss. Das bedeutet normalerwiese, daß etwas mit der Syntax nicht stimmt (ev. ein ";" zuwenig, etc.) - oder?
Das dumme ist auch, daß, wenn nur die weisse Seite kommt, man nie weiss in welcher Zeile der Fehler ist. Ich habe auch schon den Confixx-Perl-Debugger scannen lassen, aber der findet auch nix.

Kann mir bitte jemand sagen, was daran falsch ist, denn ich finde den Fehler mit meinem Noob-Wissen nicht... :oops:

Code: Alles auswählen

<?php 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 

$page_title = 'Die besten Spieler'; 
include($phpbb_root_path . 'includes/page_header.'.$phpEx); 

$template->set_filenames(array('body' => 'zocker.tpl'));

$sql='SELECT highscore_player, Count(*) AS Anzahl FROM `phpbb_ina_highscore` WHERE `highscore_mon` = ' . date("m", time()) . ' AND `highscore_year` = ' . date("Y", time()) . ' GROUP BY highscore_player';
if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);
}

while($row = $db->sql_fetchrow($result))
{
	$template->assign_block_vars('test', array(
		'MON_NAME' => $row['highscore_player'],
		'MON_ANZ' => $row['Anzahl']
	));
}

$sql='SELECT game_name, reverse_list FROM `phpbb_ina_games`';
if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);

while($row = $db->sql_fetchrow($result))
{
	$i = $i + 1;
	$name[$i] = $row['game_name'];
	$reverse[$i] = $row['reverse_list'];
}
$c = $i;

for($i = 1; $i <= $c; $i++)
{
	if($reverse[$i] = 0)
	{
		$sortlist = 'DESC';
	}
	else
	{
		$sortlist = 'ASC';
	}

	$sql='SELECT game_name, player, score FROM `phpbb_ina_scores` WHERE game_name = ' . $name[$i] . 'ORDER BY score ' . $sortlist . ' LIMIT 1';
	if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);

	$count[$i] = 'player';
	$ausgabe = $ausgabe + $count[$i];
}

$template->assign_vars(array(
	'AUSGABE' => $ausgabe,
	'VAR_C' => $c
));

$template->assign_vars(array('TITEL' => $page_title));
$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Bleiben ev. die Variablen ausserhalb der while-Schleifen oder if-Schleifen nicht erhalten?
(das "$ausgabe" dient nur dazu, um erstmal zusehen, ob überhaupt Daten dabei rauskommen ,) )
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Mache doch in jeder Zeile ein echo "1"; Dann weißt Du, wo das Script hängt...

Grüße
Dennis
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Hmmm, ganz egal, wo ich das echo "1"; hinschreibe, es erscheint keine "1" am Schirm...

*edit*
mit "//" habe ich nun ein paar Zeilen ausgrenzen können, sobald der folgende Teil abgearbeitet wird, bleibt das bild weiss:

Code: Alles auswählen

$sql='SELECT game_name, reverse_list FROM `phpbb_ina_games`';
if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);

while($row = $db->sql_fetchrow($result))
{
	$i = $i + 1;
	$name[$i] = $row['game_name'];
	$reverse[$i] = $row['reverse_list'];
}
$c = $i;

for($i = 1; $i <= $c; $i++)
{
	if($reverse[$i] = 0)
	{
		$sortlist = 'DESC';
	}
	else
	{
		$sortlist = 'ASC';
	}

	$sql='SELECT game_name, player, score FROM `phpbb_ina_scores` WHERE game_name = ' . $name[$i] . 'ORDER BY score ' . $sortlist . ' LIMIT 1';
	if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);

	$count[$i] = 'player';
	$ausgabe = $ausgabe + $count[$i];
}
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

ob es letztendlich nur daran liegt bleibt die Frage:

Code: Alles auswählen

for($i = 1; $i <= $c; $i++) 
{ 
   if($reverse[$i] = 0) 
   { 
      $sortlist = 'DESC'; 
   } 
   else 
   { 
      $sortlist = 'ASC'; 
   }
Schon mal $reverse nach diesem Durchlauf angeschaut? Dann wäre aufgefallen das dein Array kaputt ist durch:

Code: Alles auswählen

$reverse[$i] = 0
Dies sollte ein Vergleich sein ist aber eine Zuweisung :wink:

Im ganzen gesehen muss ich mich fragen wozu du soviele SQL Querys absetzt....
Du ziehst dir aus einer Table diverse Informationen, bereitest damit wiederrum ein Array auf welches du dann im Endeffekt n:1(m)
wieder in eine Table jagst......

Da stellt sich die Frage
a) Weshalb du die Table nichts verknüpfst
b) Ob du alle oder nur einen speziellen Datensatz suchst
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Hallo Blutgerinsel,

danke für Deine Antwort. Ich habe nun bei der IF-Abfrage den

Code: Alles auswählen

if($reverse[$i] == 0)
geändert, nun sollte es verglichen werden.

Tja, die Frage mit den vielen Queries:
Es geht hier um den Activity Mod, wo "einfach" ausgelesen werden soll, wieviel HiScores (Platz 1) jeder Spieler hat.
In der Tabelle liegt aber pro Spiel für jeden Spieler die persönliche Bestleitung vor, zB:
Spiel1, Spieler1, 50
Spiel2, Spieler2, 100
Spiel3, SPieler1, 75
Spiel2, Spieler1, 55
Spiel1, SPieler2, 45
etc.

Ich brauche aber die Anzahl der HiScores (wo SpielerX die meisten Punkte hat) pro Spieler, sodaß ich am Schluß es so habe:
Spieler1 = 2x HiScore
Spieler2 = 1x HiScore
etc.

Ich muss ja vorher in der phpbb_ina_games die verschiedenen Spielnamen auslesen, denn nur dort stehen die pro Spiel nur einmal drin (bei der phpbb_ina_scores eben nicht) - darum zuerst die Auslesung der Spiele von phpbb_ina_games.

Es wird da sicher einen einfacheren Weg geben, aber ich komme einfach nicht drauf.

Kannst Du mir nicht bitte einen Hinweis geben (ich weiß, daß Du nur ungern fertige Lösungen postest, sondern Anregungen dazu) - ev. nur, mit welchen Befehlen ich ans Ziel komme, dann probiere ich das mal (die Links zu den Manuals habe ich ja nun).

Wäre Dir sehr dankbar!
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

[] Du hast eine Table phpbb_ina_games
die so aussieht?

Spiel1, Spieler1, 50
Spiel2, Spieler2, 100
Spiel3, SPieler1, 75
Spiel2, Spieler1, 55
Spiel1, SPieler2, 45

Widerspricht aber dem:
[....]Spielnamen auslesen, denn nur dort stehen die pro Spiel nur einmal drin (bei der phpbb_ina_scores eben nicht)
Du hast eine Table phpbb_ina_scores die sieht wie aus?

Die erste Table sollte eigenlich für die Bestimmung der Anzahl ausreichen, wenn die Table wie oben aussieht....

Schema:

Code: Alles auswählen

SELECT 
  spielerspalte,
  COUNT(*) AS Highscore
FROM
  spielerhighscore
GROUP BY
  spielerspalte
ORDER BY
  Highscore DESC
Wenn du die Tables besser erklärst kann man dir besser helfen
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Es geht hier um zwei verschiedene Tabellen.
OK, hier die Tabellenstruktur:

phpbb_ina_games (alle Daten zu den Spielen selbst; beinhaltet keine HiScores):
game_id
game_name (Name des Spieles)
...
reverse_list (gibt an, ob der HiScore auf- oder absteigend sortiert werden soll)

phpbb_ina_scores (beinhaltet die Hiscores):
score_id
game_name (wie oben)
player (HiScoreinhaber)
score (Punkte)
date
Hier steht von jedem Spieler die Bestleistung von jedem Spiel (das er schon gespielt hat) drin. D.h. um zu wissen, wer bei jedem Spiel der Beste ist, muss man die Liste nach dem Spiel filtern und dann die höchsten Punkte oder die wenigsten Punkte (siehe "reverse_list") suchen bzw. den SPieler, der diese Punkte hat.

Danke für Deine Mühen und Geduld!
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

phpbb_ina_games (alle Daten zu den Spielen selbst; beinhaltet keine HiScores):
game_id
game_name (Name des Spieles)


Diese Table abändern zu
phpbb_ina_scores (beinhaltet die Hiscores):
score_id
game_id (wie oben)
player (HiScoreinhaber)
score (Punkte)
date

-> game_id+score_id sollte der Primary Key sein

Code: Alles auswählen

SELECT
  S.player,
  COUNT(*) AS HighScoreCount,
  SUM(S.score) AS HighScoreSum
FROM
  phpbb_ina_games G
INNER JOIN
  phpbb_ina_scores S
ON G.game_id=S.game_id
GROUP BY
  S.player
ORDER BY
  HighScoreCount DESC
Müsste er gruppieren können, da sollte man je nach Anforderung OrderBy DESC (absteigend) oder ASC (aufsteigend) platzieren...
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Hmmm, die Tabelle kann ich schlecht ändert, da auch der Activity MOD dann verändert werden müsste. Aber da ja in beiden Tabellen "game_name" vorkommt, könnte ich doch das "game_name" anstelle von "game_id" benutzen - oder klappt das damit nicht?

Ist der Primary Key Pflicht, oder ist der "nur" wegen der Geschwindigkeit wichtig?
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Gumfuzi hat geschrieben:Hmmm, die Tabelle kann ich schlecht ändert, da auch der Activity MOD dann verändert werden müsste. Aber da ja in beiden Tabellen "game_name" vorkommt, könnte ich doch das "game_name" anstelle von "game_id" benutzen - oder klappt das damit nicht?

Ist der Primary Key Pflicht, oder ist der "nur" wegen der Geschwindigkeit wichtig?
Dann gehört der Modschreiber geschlagen :D

Primary Key:
- identifiziert eindeutig den Datensatz
- hält Datensätze eindeutig wie z.B. Unique
- gestattet schnelleren Zugriff auf Datensätze....

Klar es würde gehen mit dem namen.....Allerdings sollten Primary Keys nur aus Zahlen bestehen. Da die DB schneller auf Zahlen reagieren kann als auf Text
Antworten

Zurück zu „Coding & Technik“