Seite 1 von 1

Highscore

Verfasst: 18.06.2008 18:11
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 ");
  }
  
?>

Verfasst: 18.06.2008 18:29
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 ;)

Verfasst: 18.06.2008 23:10
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.

Verfasst: 18.06.2008 23:24
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.