Onlinehighscores mit PHP, MySQL und Blitzbasic

Übersicht BlitzBasic FAQ und Tutorials

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

Ofenrohr

Betreff: Onlinehighscores mit PHP, MySQL und Blitzbasic

BeitragDo, Okt 13, 2005 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

nach langer Zeit schreibe ich hier mal wieder was.
Ich habe heute ein kleines Tutorial über das Erstellen von Onlinehighscores für BlitzBasic Spiele geschrieben.
Am besten, ihr lest es und sagt mir, was ihr davon haltet:
http://ofenrohr.chat-blitz.de/...ighscores/
Die .doc Datei ist etwa 150kb groß und die .pdf ist ca. 300kb groß.

mfg ofenrohr
Ofenrohr.net

Xalon

BeitragDo, Okt 13, 2005 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir kommt bloß der Hintergrund Sad

Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image

Justus

BeitragDo, Okt 13, 2005 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz oben links in der Ecke Very Happy

bruZard

BeitragFr, Okt 14, 2005 9:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Recht gut gemacht, ich habe es zwar nur überflogen, mir sind aber ein paar Sachen aufgefallen:

1. Lasse das @ vor den Befehlen weg. Wenn das Script einfach ohne Ausgabe nicht funktioniert sind die meisten User sofort verwirrt.

2. Du schreibst dass Du einfach davon ausgehst dass das Script "highscore.php" heißt.
Diese Beschränkung ist nicht notwendig: EInfach am Anfang des Scripts einfügen
Code: [AUSKLAPPEN]
$home = $_SERVER["PHP_SELF"];

Danach steht der Name des Scripts in $home und es ist danach völlig Banane wie es heißt.

3. Du schreibst den Datenbankaufruf mit in das eigentliche Script, ist eigentlich nicht so schlimm, aber zumindest die Zugangsdaten sollten nicht dort drin stehen. Wenn PHP mal ausfällt sieht jeder Aufrufer den PHP Quelltext als Klartext und braucht sich die Zugangsdaten blos noch abschreiben und kann dann jede Menge Schindluder mit Deiner DB anstellen.
Besser ist es die Zugangsdaten in einer externen Datei zu halten, diese einzulesen und an die entsprechenden Befehle zu übergeben ... oder aber man lagert die komplette Verbindung zur Datenbank in ein zweites Script aus und tut dies folgendermaßen einbinden: Code: [AUSKLAPPEN]
require "mysql.php";
. Sollte nun wirklich etwas mit dem Server nicht hinhauen wird der "require" Befehl nicht ausgeführt und die Zugangsdaten bleiben unsichtbar.

4. einen PHP Block einfach nur mit "<?" einzuleiten ist schlechter Stil. Besser schreibt man "<?php".

5. wieder eine Frage des Stils: Es ist weniger gut lesbar HTML Code per "echo" auszugeben. Ich persönlich finde es besser lesbar wenn man den PHP Block zumacht, HTML schreibt und PHP Daten folgendermaßen einbindet:Code: [AUSKLAPPEN]
<tr><td><?=$username;?></td></tr>
. Aber wie gesagt, dass ist nur meine persönliche Meinung und ändert nix an der Funktionsweise des Scripts.

6. Der Blitzbasic Part: So wie Du den Code aufgebaut hast ist es sogar für einen absoluten Newbie möglich die Score zu fälschen indem er sie einfach per Browser einträgt. Ein wenig mehr Sicherheit erhälst Du wenn Du einen UserAgent mitschickst und vor allem den kompletten HTTP Header sendest. Auf PHP Seite würde dann ganz oben stehen:
Code: [AUSKLAPPEN]

$user_agent = getenv["HTTP_USER_AGENT"];
/*
  Nehmen wir an Du entscheidest Dich als Name für
  MeineTolleHighscore
*/
if($user_agent!="MeineTolleHighscore") die("");

Die Ausführung wird hier mit jedem rowser der Welt abgebrochen. Du kannst die Abfrage auch einsetzen um bspw. die Ausgabe der Highscore im Browser von der Zuweisung neuer Scores durch BB zu trennen.

Auf BB Seite sollte der zu sendende String dann so aussehen:
Code: [AUSKLAPPEN]

WriteLine is_online,"GET /highscore.php?user=Hoschi&score=1000 HTTP/1.0"
WriteLine is_online,"Host: http://www.meineurl.de"
WriteLine is_online,"User-Agent: MeineTolleHighscore"
WriteLine is_online,"Accept: */*"
WriteLine is_online,""   

Das verwenden von HTTP1.0 ist sinnvoller da es schneller abgearbeitet wird als HTTP1.1
Das liegt daran dass 1.1 versucht eine persistente Verbidnung aufzubauen, was für eine einfache Highscore aber niemals notwendig ist.


Naja, nur ein paar Tipps von mir Wink
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Ofenrohr

BeitragFr, Okt 14, 2005 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für deine tips bruzard,

den teil mit $_SERVER['php_self'] kannte ich, aber ich war nie auf die idee gekommen, es so zu verwenden Very Happy

wenn ich mit require mysql.php einbinde, dann kann der user doch ebenfalls auf mysql.php zugreifen? oder habe ich irgentwas mit den rechten übersehen?

danke für den tip mit user agent. du hast vollkommen recht mit dem was du sagst und hast einigen bestimmt die arbeit abgenommen einmal im RFC zu lesen Smile
ich benutze für mein spiel eine ähnliche absicherung, in der die seite nur angezeigt wird, falls kein useragent verwendet wird, wobei ich deine lösung besser finde.

mfg ofenrohr
Ofenrohr.net

BlitzChecker

BeitragDo, Okt 20, 2005 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Im BlitzBasic Teil steht steht "name". Es müsste aber "name$" heissen. Wink
www.xairro.com
 

dubitat

BeitragMo, Nov 28, 2005 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ofenrohr hat Folgendes geschrieben:
vielen dank für deine tips bruzard,

den teil mit $_SERVER['php_self'] kannte ich, aber ich war nie auf die idee gekommen, es so zu verwenden Very Happy

wenn ich mit require mysql.php einbinde, dann kann der user doch ebenfalls auf mysql.php zugreifen? oder habe ich irgentwas mit den rechten übersehen?

danke für den tip mit user agent. du hast vollkommen recht mit dem was du sagst und hast einigen bestimmt die arbeit abgenommen einmal im RFC zu lesen Smile
ich benutze für mein spiel eine ähnliche absicherung, in der die seite nur angezeigt wird, falls kein useragent verwendet wird, wobei ich deine lösung besser finde.

mfg ofenrohr


nein du kannst das script für browseraufrufe mit einem php befehl sperren, kenne den befehl leider gerade nciht....Sad
Erare humanum est - Irren ist Menschlich

Toby

BeitragDi, Jan 03, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
So einfach und doch genial.
Hatte schon zu beginn Angst dass, du nur eine php datei mit den variablen in schlepptau im Browser öffnest.
Aber falls dass wirklich so funzt es das wirklich ne super Möglichkeit.

Kennst du vielleicht auch eine möglichkeit eine MySQL DB direkt Anzusprechen? Ohne umweg über eine PHP datei? Gab' da nichtmal eine *.dll??

Bzw. die dann auch auszulesen dass man auch in game die Highscore dann hat?
Member of
Terra Multimedia
 

flashmaxel

BeitragMo, Jul 03, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Super !!!
Genau sowas hab ich gesucht Very Happy
Danke Max
Real C programmers never die; they cast to void.
 

Kevin_ble

BeitragFr, Aug 11, 2006 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe die MySQL Datenbank fertig aber ab dann versteh ich nichts mehr. Das steht: "Dafür erstellen wir erstmal ein neues PHP-Script auf dem Server"

Ja und wie? Ist vielleicht eine blöde Frage aber ab da komm ich nicht weiter... Sad
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image

D2006

Administrator

BeitragFr, Aug 11, 2006 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Datei kannst du auch auf deinem Computer erstellen. Also einfach ne Textdatei erstellen und die in highscore.php umbenennen (Achtung! Damit bei der Umbenennung auch der Dateityp geändert werden kann, muss man unter Menüpunkt Extras -> Ordneroptionen bei "Ansicht" das Häkchen bei "Erweiterung bei bekannten Dateitypen ausblenden" wegmachen). Dann schreibst du das Script da rein, speicherst ab und lädst die Datei nun mit einem FTP Programm (zB FileZilla) auf deinen Webspace.

Noch Fragen?
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Kevin_ble

BeitragFr, Aug 11, 2006 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss die Datei auf den selben Webspace? Ich kann bei dem einen Webspace alles hochladen aber keine Datenbank erstellen. Bei dem anderen Webspace kann ich nur Bilder hochladen aber auch datenbanken erstellen.


achja FTP Pflicht oder geht das auch über den Browser?


Ich finde das aber etwas umfangreich...Ist es nicht möglich einfach eine Textdatei auf einen Webspace zu laden und die Highscoredatei halt nicht lokal abruft sondern auf dem Server?

Danke für die Antworten!
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image

otta

BeitragSa, Aug 12, 2006 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also der Teil mit der Datenasugabe hat bei mir so garnicht geklappt. Ich hab den Teil mal so geändert:

Code: [AUSKLAPPEN]


// Daten abrufen

$r_ergebnis = mysql_query("SELECT name,punkte FROM highscore ORDER BY punkte DESC");

// Daten ausgeben

if( mysql_num_rows($r_ergebnis) > 0 ) // Falls Einträge zur Abfrage existieren, dann...
{
   while( $ergebnis = mysql_fetch_assoc($r_ergebnis) )
   {
      echo '<tr>
      <td width="60%"><div align="center">' . $ergebnis['name'] . '</div></td>
      <td width="40%"><div align="center">' . $ergebnis['punkte'] . '</div></td>
      </tr>';
   }
}
else
{
   echo 'Keine Eintr&auml;ge vorhanden!';
}

mysql_close();
[/code]
AthlonXP 2800+, Radeon 9600XT,160GBHDD,512 MB DDR Ram (neuer Rechner neues Glück;))

Aktuelles Projekt:
momentan Projektlos

PowerProgrammer

BeitragSa, Aug 12, 2006 7:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Toby hat Folgendes geschrieben:
Kennst du vielleicht auch eine möglichkeit eine MySQL DB direkt Anzusprechen? Ohne umweg über eine PHP datei? Gab' da nichtmal eine *.dll??

MySQL wird im Normalfall über Port 3306 gesteuert. Wenn du dich mit dem Protokoll beschäftist, müsste es dir möglich sein, direkt auf MySQL zuzugreifen.
Dann entsteht aber eine riesige Sicherheitslücke:
Ein MySQL-User samt Passwort muss im Programm gespeichert sein, damit man sich auch bei MySQL anmelden kann! Und der gemeine Hacker schnappt sich nen Sniffer und verändert die Übertragung und auf einmal sind 70.000 User angelegt, oder alle Daten gelöscht oder ähnliches. Oder eine andere - und bessere Lösung - wäre, einfach die MySQL-Logindaten aus dem Programm zu ziehen.
Deshalb ist der PHP-Umweg am einfachsten und auch am sichersten (naja)!
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!

CypressArt

Betreff: MySql, PHP und B3B

BeitragFr, Feb 23, 2007 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mich mal hier ein wenig umgeschaut und dabei tauchten folgende Fragen auf:

Multiplayerspiele sind meist so aufgebaut, dass ein Server verfügbar ist auf welchem sich die Spieler einloggen und die Daten (Bewegungen der anderern) u.ä. abfragen...

Kann man ein MP Spiel auch aufbauen ohne Server?
Dachte so in der Art, dass bewegungen der Spieler in ner Datenbank (MySql) gespeichert werden und die anderen Mitspieler diese Datenbank abfragt, so würde doch ein Server "entfallen"...

Also:
Spiel starten, verbindung zur DB aufbauen, einloggen (prüfung der anmeldung) mit der DB,startkoordinaten in bewegungs DB abspeichern (id, x, y), abfragen der anderen eingetragenen spieler und die Werte an den Anfrager senden, das Spiel platziert die anderen Spieler anhand ihrer koordinaten....so in der Art..

Oder ist die Abfrage zu langsam?

Danke für Feedback
(no comment) -> Google Search Bot!!

D2006

Administrator

BeitragFr, Feb 23, 2007 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Stell dir vor im Einzelspielermodus würde dieses Spiel die Diskette zum speichern von solchen Daten benutzen. Smile

Soooo langsam ist es zwar nun auch nicht, aber das drückt so ziemlich aus, warum man das nicht macht - Es ist schlicht und ergreifend nicht dafür ausgelegt. Könnte sogar der Webhoster was dagegen haben. Der hat ja auch was gegen Chats auf PHP/MySQL Basis (also idR die meisten zumindest).
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

CypressArt

Betreff: hmm...

BeitragFr, Feb 23, 2007 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
das heisst ich müsste eine Serverseitige Applikation schreiben (auch in B3B) welche connects von den Clients verarbeitet und beim eintreffen von neuen Daten diese an alle clients sendet?
Das bedeutet aber wieder das der Webhoster die Server Applikation auf dem Server laufen lässt...
(no comment) -> Google Search Bot!!

Lunatix

BeitragFr, Feb 23, 2007 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Lässt er aber garantiert nicht. Vor allem weil B3D nur programme für Windows erstellen kann.
Auf Webservern läuft und hat Linux zu laufen!

BlitzMax, damit geht das.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

CypressArt

BeitragSa, Feb 24, 2007 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Junkprogger hat Folgendes geschrieben:
Lässt er aber garantiert nicht. Vor allem weil B3D nur programme für Windows erstellen kann.
Auf Webservern läuft und hat Linux zu laufen!

BlitzMax, damit geht das.


Trotzdem müsste mein Hoster einwilligen das Prog auf dem Server laufen zu lassen... Sad

oder gibts ne andere möglichkeit?
(no comment) -> Google Search Bot!!
 

andieo

BeitragSa, März 03, 2007 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
wie geht das ganze nadersherum? wenn ich zum Besipiel daten aus einer datenbank in bltzbasic verarbeiten möchte? wie kann ich dann daten aus der datenbank in variablen von blitzbasic bringen?

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group