Content Management System - CMS : eXV2 
Home
News
Forum
Downloads
Download Module
Sitemap
Partnerseiten
RSS News
Kontakt/Info
Sprache
EnglishFrench
Suchen
Login
Nickname
Passwort

Registrieren?
Passwort?
Navigation
 Home News  Forum Neueste Beiträge  Downloads Download Module eXV² Themes  Weblinks Tutorial Changelog 2.3.1 Jobcenter Gebrauchtmarkt OSMap  Sponsor Kalendersystem Sitemap Partnerseiten RSS News Kontakt/Info Webseiten Wetter
Willkommen im Free Web CMS : eXV² Forum!
  Forenarchiv
     Scripte
  Query-Fehler in einem Script für Arcade Modul

Forum : Scripte

Titel : Query-Fehler in einem Script für Arcade Modul

© 2004-2012 www.exv2.de
http://www.exv2.de

URL dieser Diskussion
http://www.exv2.de/modules/newbb_plus/viewtopic.php?topic_id=1519&forum=13


 user69 :

02.08.2004 17:57
 Arbeite an einer Auflistung aller Spiele + deren Highscoreträger im Arcade Modul. Diese soll man dann nach den Spalten sortieren können.

Beim Query treten mit dem "order by" und dem "asc/desc" logische Fehler auf.

Wenn man nach Spalten aus der Join-Tabelle sortiert (zB:"s.uid" & "ASC"), haben die Datensätze falsche Werte.
Fehler im PHP-Script schließe ich aus, denn der Fehler tritt ja bereits im händischen Query auf.

54: $sql = "select g.gid, s.gid AS gid, g.gname, g.gcount, g.gtitle, g.active, s.uid AS uid, max(s.score) AS score, s.score_date as score_date from ".$db->prefix('arcade_games')." g
55: INNER JOIN ".$db->prefix("arcade_scores")." s
56: ON g.gid=s.gid group by s.gid HAVING active=1 ORDER BY ".$order_by." ".$sort_dir;
57: $res = $db->query($sql);


Kann mir jemand helfen?

Das interessante ist das es in meiner lokalen Testumgebung funktioniert, nur nicht auf meinem Webserver.
Liegt wahrscheinlich daran dass es verschiedene MySQL Versionen sind...
Mein Inet Webserver verwendet MySQL 3.x .
Ab MySQL 4 funktioniert erst UNION - Befehl.

Kann ich mittels PHP Befehl das irgendwie berwerkselligen?

 user69 :

03.04.2005 12:28
 Mitlerweile kann ich die Frage mir selber beantworten und für alle die es auch wissen wollen:

Ja, es liegt an MySQL 3.x
Der UNION - Befehl wird erst ab Version 4 unterstützt, daher die falschen Werte.

-------------------------------------------------

Habe mich schlau gemacht welches Workaround bauen kann.
Wegen Gründen der Performance & Serverauslastung finde ich es nicht so toll eine tempräre table zu erstellen,...

Können mir hier aufwendige Arrays zur Lösung behilflich sein???
Weis keiner nen Rat?

ACHTUNG:
Dieses Script ist erst noch nicht fertig und nicht ausgereift! Wundert euch nicht falls irgendwelche Ungereimtheiten auftreten...

Hier ist mein Script zur Auflistung aller Spiele + dem Sieger:

Code:
<?php
include('../../mainfile.php');
include_once('cache/config.php');
include_once('classes/class.pagenav.php');
include_once('include/arcade_func.php');
include(XOOPS_ROOT_PATH."/header.php");

global $db, $myts, $xoopsUser, $xoopsConfig, $HTTP_GET_VARS, $HTTP_POST_VARS;

if(file_exists($xoopsConfig['root_path']."modules/arcade/language/".$xoopsConfig['language']."/blocks.php")){
include($xoopsConfig['root_path']."modules/arcade/language/".$xoopsConfig['language']."/blocks.php");
}else{
include($xoopsConfig['root_path']."modules/arcade/language/english/blocks.php");
}

if ($xoopsUser) {

$sort_dir = $HTTP_GET_VARS['sortdir'];
$order_by = $HTTP_GET_VARS['orderby'];

if (!$sort_dir || ($sortdir != 'ASC' &amp;&amp; $sortdir != 'DESC')) {
$sort_dir='ASC';
}
if (!$order_by) {
$order_by='gtitle';
}


OpenTable();
array();
echo "<p align='center'><img border='0' src='cache/images/trophy.gif' width='15' height='15'> <u><b>"._MDB_TITLE."</b></u> <img border='0' src='cache/images/trophy.gif' width='15' height='15'><br><br>";
echo "<table cellspacing='10'><tr bgcolor='#CCCCCC'><td></td>";

$arrow_up = XOOPS_URL."/modules/arcade/images/up.gif";
$arrow_down = XOOPS_URL."/modules/arcade/images/down.gif";

echo "<td nowrap><a href='hscores.php?orderby=gtitle&amp;orderdir=ASC'><img src=".$arrow_up." alt='"._MDB_ASC."'></a><b>&amp;nbsp;"._MDB_GAME."&amp;nbsp;</b>";
echo "<a href='hscores.php?orderby=gtitle&amp;sortdir=DESC'><img src=".$arrow_down." alt='"._MDB_DESC."'></a></td>";

echo "<td><a href='hscores.php?orderby=gcount&amp;orderdir=ASC'><img src=".$arrow_up." alt='"._MDB_ASC."'></a><b>&amp;nbsp;"._MDB_PLAYED."&amp;nbsp;</b>";
echo "<a href='hscores.php?orderby=gcount&amp;sortdir=DESC'><img src=".$arrow_down." alt='"._MDB_DESC."'></a></td>";

echo "<td><a href='hscores.php?orderby=uid&amp;orderdir=ASC'><img src=".$arrow_up." alt='"._MDB_ASC."'></a><b>&amp;nbsp;"._MDB_USER."&amp;nbsp;</b>";
echo "<a href='hscores.php?orderby=uid&amp;sortdir=DESC'><img src=".$arrow_down." alt='"._MDB_DESC."'></a></td>";

echo "<td nowrap><a href='hscores.php?orderby=score&amp;orderdir=ASC'><img src=".$arrow_up." alt='"._MDB_ASC."'></a><b>&amp;nbsp;"._MDB_SCORE."&amp;nbsp;</b>";
echo "<a href='hscores.php?orderby=score&amp;sortdir=DESC'><img src=".$arrow_down." alt='"._MDB_DESC."'></a></td>";

echo "<td><a href='hscores.php?orderby=score_date&amp;orderdir=ASC'><img src=".$arrow_up." alt='"._MDB_ASC."'></a><b>&amp;nbsp;"._MDB_SCOREDATE."&amp;nbsp;</b>";
echo "<a href='hscores.php?orderby=score_date&amp;sortdir=DESC'><img src=".$arrow_down." alt='"._MDB_DESC."'></a></td>";

echo "<td></td>";

$sql = "select g.gid, s.gid AS gid, g.gname, g.gcount, g.gtitle, g.active, s.uid AS uid, max(s.score) AS score, s.score_date as score_date from ".$db->prefix('arcade_games')." g
INNER JOIN ".$db->prefix("arcade_scores")." s
ON g.gid=s.gid group by s.gid HAVING active=1 ORDER BY ".$order_by." ".$sort_dir;
$res = $db->query($sql);


while ($row = $db->fetch_object($res))
{

$highscore = _get_game_highscore($row->gid);

echo "<tr><td><img src='".XOOPS_URL."/modules/arcade/cache/images/".$row->gname."2.gif'></td>";
echo "<td><a href='".XOOPS_URL."/modules/arcade/index.php?act=play_game&amp;gid=".$row->gid."'><b>".$row->gtitle."</b></a></td>";
echo "<td><p align='center'>".$row->gcount."x</p></td><td>".$highscore[uname]."</a></td>";
echo "<td>".$row->score."</td>";
echo "<td>".formatTimestamp($row->score_date, 'm')."</td>";
echo "<td> (<a href='".XOOPS_URL."/modules/arcade/index.php?act=show_stats&amp;gid=".$row->gid."'>"._MDB_ALLSCORES."</a>)</td></tr>";
echo "<tr><td colspan='7'><hr></td></tr>";
}

echo "</table></p>";
CloseTable();

} else {
redirect_header("index.php", 3, _NOPERM);
exit();
}

include("../../footer.php");

?>

 user69 :

18.04.2005 19:20
 Ich hab ein wenig herumexperimentiert und bin auf folgendes workaround gekommen:

Zitat:
.......
$sqlscore = "CREATE VIEW arcade_mod_bestscore AS
SELECT DISTINCT gid, uid, max(score), score_date FROM ".$db->prefix('arcade_scores')." GROUP BY gid";
$db->query($sqlscore);

$sqlgames = "CREATE VIEW arcade_mod_gamelist AS
SELECT DISTINCT gid, gname, gcount, gtitle, active, uid from ".$db->prefix('arcade_games')." WHERE active=1";
$db->query($sqlgames);


$sql = "SELECT g.gid as gid, s.gid, g.gname as gname, g.gcount as gcount, g.gtitle as title, s.score as score, s.score_date as score_date, s.uid FROM arcade_mod_gamelist g INNER JOIN arcade_mod_bestscore s
ON g.gid=s.gid ORDER BY ".$order_by." ".$sort_dir." LIMIT $start, $eintraege_pro_seite";
$res = $db->query($sql);


while ($row = $db->fetch_object($res))
{
......


jetzt bekomm ich aber folgenden fehler:
Zitat:
Fehlernummer: 2 [Warnung]
Fehlermitteilung: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
in Datei: /www/class/database/mysql.php
in Zeile: 136


kann mir jemand sagen was ich falsch mache? Confused Confused Confused

 Nobse :

18.04.2005 20:36
 Schalte doch mal unter sysadmin/einstellungen die ausgabe der datenbankabfragen an
dann kanst du besser sehen wie die sql abfrage aussieht die den fehler verursacht.

 user69 :

18.04.2005 21:34
 das habe ich bereits gemacht,
aber keine sichtbare fehler gefunden.
die spaltennamen sind ok.


hab die queries manuell probiert:
- wenn ich eines der create view - queries nur auf das select begrenze werden werte ausgegeben.
- sobald ich das create view versuche gibt es einen fehler:

Zitat:

Fehler

SQL-Befehl :

CREATE VIEW arcade_mod_gamelist AS SELECT DISTINCT gid, gname, gcount, gtitle, active
FROM e_xoops_arcade_games
WHERE active =1

MySQL meldet:


#1064 - You have an error in your SQL syntax near 'VIEW arcade_mod_gamelist AS SELECT DISTINCT gid, gname, gcount, gtitle, active' at line 1


das "arcade_mod_gamelist" kann ein belibieger name sein oder?

 Dj_PD :

19.04.2005 10:34
 hmm, ich kann mir da jetzt nicht vorstellen wie du das genau meinst. Ist das für den AdminBereich oder für den Fronted, also eine Seite wo alle Spiele aufgelistet werden und daneben das Highscore.

Ich bin nämlich auch gerade dabei was für Arcarde-Modul zu erstellen. Aber für den Adminbereich.
Ich wollte ganz gerne das einfügen der Spiele vereinfachen und dazu noch Probleme mit dem hochladen zu großer Spieledateien vernichten.
Derzeit ist das so das man 3 Dateien hochladen muss und das klappt nicht immer da einige *.swf Dateien zu groß sind und dann kommt ein Fehler.
Das Script lädt also 3 Dateien hoch spielname1.gif (kleines Bild), spielname2.gif(etwas großeres Bild) und spielname.swf(Spieledatei)
Die swf-Datei wird in den Ordner "cache" geladen und in dem Ordner "cache" befindet sich noch ein weiterer Ordner "image" wo die beiden Bilder reingeladen werden.
Wenn ich jetzt per Hand ein Spiel einfügen möchte, muss ich folgende Dinge eingeben:
Spieltitel, Kategorie, Hintergrundfarbe für die swf.datei, Spielbreite, Spielhöhe, Spieldatei, Bilddatei (gross), Bilddatei (kein), Spielbeschreibung, Ziel des Spiels und Spieletasten.
Also das finde ich ein bisschen umständlich.

Ich habe mir aber jetzt überlegt das es ja eigentlich auch einfacher gehen müßte. Indem ich einfach bei dem Spiel eine weitere Spieledatei beipacke, die spielename.php und dann bräuchte ich ja nur noch die (jetzt) 4 Dateien per ftp hochladen und ich bräuchte ein Script das dann ein Vergleich macht. Er müßte das "cache"-Verzeichnis auslesen und alle Spiele auflisten (vielleicht sogar erst die Spiele zählen, damit das Script weiß wieviel Tabellenzeilen es machen muss). Wenn er das Verzeichnis ausgelesen hat müßte er die Dateiendung weg machen, da in der Datenbank das .swf auch nicht eingetragen ist(also in der Datenbank steht dann nur unter gname nur der Spielname) und er dürfte nur nach swf-Dateien suchen, da sich im cache-Ordner noch andere Dateien befinden.
Wenn das Script dann das Verzeichnis hat müßte er ja in die Datenbank (in die Tabelle arcade_games) und müßte die Spielnamen (gname) auslesen und evtl. sortieren und vergleichen, also ich weiß ja nicht wie man das machen kann. (ein bisschen schwer zu beschreiben). Alle Spiele die in der Datenbank vorhanden sind, sind installiert.
Alle Spiele die nicht installiert sind, müssen noch instaliert werden.
So, ich glaube so wäre das schonmal gut. Jetzt müßte man nur noch in der Tabelle arcade_games die letzte gid (SpieleID) nehmen und die um ein erhöhen, da diese ID ja eine weiterlaufende ID ist, also jedes Spiel bekommt eine ID zugewiesen.
Dann müßte das Script z.B. in den Ordner php gehen und dort suchen ob dort php Dateien gibt die auch zu dem Spielnamen passen, also habe ich ein Spiel 123.swf müßte sich in dem Ordner php auch eine 123.php befinden.
Erst wenn das ist, könnte das Script ein Botton zeigen wo steht "Spiel installieren" sollte keine php Datei dort sein, so muss er dann woll schreiben "Spiel kann nur per Hand eingegeben werden"
In der php Datei befindet sich folgendes(123.php):
Code:

<?php

$config = array(

gname => '123',
gtitle => '123 das coole Spiel',
bgcolor => '000000',
gwidth => '650',
gheight => '600',
active => '1',
gcat => '1',

//optional
gwords => ' Schiese und lerne Mathe ',
object => ' Beschiese so viele 1,2 oder 3 wie nur geht. ',
gkeys => ' Spielt man mit Maus oder tastatur ',

);?>


Wenn ich das Spiel dann installiere, muss er diese Datei auslesen und dann die Daten in die Datenbank einfügen:
Code:

INSERT INTO arcade_games VALUES (gid(ID), 'gname(123)', ' gwords(Schiese und lerne Mathe) ', gcount(0), 'gtitle(123 das coole Spiel)', 'bgcolor(000000)', active(1), gwitdth(650), gheight(600), position(1), cat_id(1), 'objekt(Beschiese so viele 1,2 oder 3 wie nur geht)', 'gkeys(Spielt man mit Maus oder tastatur)', date_addes(0));

Ich habe das hier mal so gemacht das man sieht was was ist, also z.B. gname (= bedeutet die Tabellenspalte) und das in () bedeutet das was das Script einfügt.

So, sollte das sein und das alles muss in einer function rein, da das Script so ausgebaut ist das es dort mehrere function gibt.
Also ich habe mir überlegt ich nenne die function -> function install_game() { }

Hier zeige ich euch jetzt mal meine Fragen die ich derzeit habe:
1) Wäre das so in Ordnung bzw. könnte man das so verwirklichen?
2) Wie kann man den cache-Ordner auslesen und gleichzeitig a) sagen lese nur swf-Dateien aus und b) entferne danach die Endungen?
3) Wie kann man dann das ausgelesende Verzeichnis mit der Datenbank vergleichen? (das ist woll die wichtigste Frage)
4) Wie bekomme ich die letzte gid ausgelesen und kann man diese dann einfach um 1 erhöhen?
5) Hat jemand evtl. noch einige Ratschläge für mich, auf was ich achten muss?

So,
Wie findet Ihr diese Idee???

Gruss
Dj_PD

 user69 :

19.04.2005 18:59
 mein script ist "für den Fronted, also eine Seite wo alle Spiele aufgelistet werden und daneben das Highscore."

wegen deiner idee:
ich finde sie nicht schlecht.
schätze es enstpricht der funktion des cms für das die spiele eigentlich entwickelt wurden --> ibproarcade Wink

 Dj_PD :

20.04.2005 10:16
 Genau. Ich war nämlich auf der Seite und habe mir mal ein paar Spiele gedownloadet und habe dann gesehen das immer wieder eine spielname.php dabei war.
Und dann hab ich mir das mal angesehen und siehe da, die haben die Funktion auch schon drin gehabt.

Aber es ist ziemlich schwer, deswegen komm ich auch nicht weiter, da ich nicht genau weiß wie ich die Dateien genau vergleichen kann. Da ich ja erst das Verzeichnis auslesen muss und dann die Datenbank und diese dann vergleichen muss.
Vielleicht denke ich auch nur derzeit etwas quer Very Happy

Aber ich gebe nicht auf.

Zu deiner Sache: Willst du den das alle Highscores aufgelistet werden, also
Spiel 1 - Highscore 50000 - Spieler Willi
Spiel 1 - Highscore 45000 - Spieler Anton
Spiel 1 - Highscore 32000 - Spieler Herold
------------------------------------------------
Spiel 2 - Highscore 69999 - Spieler Klaus
...

Oder willst du nur den besten Highscore haben
Spiel 1 - Highscore 50000 - Spieler Willi
Spiel 2 - Highscore 69999 - Spieler Klaus
Spiel 3 -
...

 user69 :

20.04.2005 16:59
 mein script hat folgende spalten:
Spielname | x mal gespielt | Username (Bestplatzierter des jeweiligen Spiels) | Seinen Score | das ScoreDatum

das script in dieser noch "simplen" form ist ja nicht das problem:
Ich habe noch für jede spalte sortierfunktionen ASC/DESC Wink und eine aufspaltung in mehreren seiten...

das grundgerüst und alles ist schon fertig & funktioniert, ich habe nur mehr das problem das query ohne die "union" hinzubekommen
Partnerseiten
http://demo.exv2.de

Vote für eXV2
php
Kontakt/Info
  Kontakt
  Impressum
  Link zu uns
  AGB
  Datenschutzhinweis
Downloads
  eXV² Core
  Core Sprachfiles
eXV² Filecenter
  Downloads
  Download Module
  eXV² Themes
  Multilanguage Module
  Sprachfiles eXV² Module
eXV² Support
  France