Highscore

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Highscore

Beitrag von a14xerus »

Aus einem alten Thread von mir:

Code: Alles auswählen

Procedure.l DownloadToMem( URL.s, *lpRam, ramsize.l )
  Protected agent.s, hINet.l, hData.l, Bytes.l
  agent = prg$+" - "+Str(PrgVersion)
  hINet = InternetOpen_(@agent,0,0,0,0)
  hData = InternetOpenURL_(hINet,@URL,"",0,$84000000,0 )
  If hData > 0
    InternetReadFile_ ( hData, *lpRam, ramsize, @Bytes )
  Else
    Bytes = -1
  EndIf
  InternetCloseHandle_ (hINet)
  InternetCloseHandle_ (hData)
  ProcedureReturn Bytes
EndProcedure 



*buffer = AllocateMemory(1024)
DownloadToMem("http://public.alexander-n.de/highscore.php?game=testgame",*buffer,1024)
; neues ergebnis hinzufügen durch weitere parameter:
; "&player=Player_name&points=pointzahl"
string$  = PeekS(*buffer)
FreeMemory(*buffer)
MessageRequester("",string$)
PHP file: (wer selber php + mysql hat)

Code: Alles auswählen

<?php

  $server = 'dein.server.com';
  $username = 'dein_username';
  $passwort = 'dein_passwort';
  $datenbank = 'user_datenbank';
  $game = $_GET['game'];
  $player = $_GET['player'];
  $points = $_GET['points'];

  mysql_connect($server,$username,$passwort) or die("Error: no connection to mysql-server");
  mysql_select_db($datenbank) or die("Error: no connection to database");
  
  
  header("Content-type: text/plain");

  mysql_query("CREATE TABLE IF NOT EXISTS `highscore` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `game` varchar(32) collate utf8_unicode_ci NOT NULL,
  `player` varchar(32) collate utf8_unicode_ci NOT NULL,
  `points` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1");

  
  if($game and $player and $points)  {
    mysql_query("INSERT INTO highscore (game, player, points) VALUES ('$game', '$player', '$points') ");
  }
  if($game) {
    $query = mysql_query("SELECT * FROM highscore WHERE game = '$game' ORDER BY points DESC LIMIT 10");
    while($highscore = mysql_fetch_object($query))  {
      echo "$highscore->player\n$highscore->points\n";
    }
    mysql_query("DELETE FROM highscore WHERE game = '$game' ORDER BY points DESC LIMIT 10, 100 ");
  }
  
?>
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Sorry, aber leider ziemlich sinnlos. Einfacher zu cheaten gehts ja echt nicht. Kannst ja gleich nen Dialog aufpoppen lassen: Wie viele Punkte wollen Sie?

Für Anfänger ok, aber ohne Erweiterungen absolut unbrauchbar, da Cheating keinerlei ein Problem darstellt. Aber ansonsten nicht schlecht!

Gruss
PMTheQuick ;)
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Wieso denn? Das ist ein Basis-Mechanismus für Online-Highscores. Ob und wie man die Daten verschlüsselt, kann ja jeder für sich selbst entscheiden.

Ich würde aber den Thread-Titel in "Online-Highscores" ändern.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Verschlüsseln braucht man nicht. Ein mitgesendeter MD5 oder besser noch SHA1 von den andern übermittelten Highscoredaten und nem geheimen Schlüssel wäre schnell umgesetzt, wenn der Bedarf besteht.

Deutlich mehr sorgen macht mit dagegen dein PHP-Code. Du übernimmst Variablen, deren Inhalt ein Angreifer frei bestimmen kann, ohne irgendeine Überprüfung des Inhalts. Du solltest hier unbedingt mysql_real_escape_string() verwenden. Über ne MySQL-Injection kann man im Worst-Case-Szenario volle Kontroller über einen kompletten Server erlangen.
Antworten