Entwickler-Ecke

Internet / Netzwerk - Online Highscore


Gausi - Mi 23.02.05 19:10
Titel: Online Highscore
Ich würde gerne ein kleines Spiel mit einer Online-Highscore versehen. Problem ist, dass ich keine Ahnung habe, wie ich mein Delphi "online bringe". Ich brauche da also ein bissel Starthilfe. Außerdem habe ich von PHP keinen Plan (aber da hätte ich jemanden, der diesen Teil übernehmen könnte).
Also: Wie sende ich ein paar kleine Daten (Name und Punktzahl) an ein PHP-Skript, und wie muss dieses Skript im groben aussehen, um diese Daten zu empfangen, zu sortieren und zu speichern? Und wie macht man dann daraus ne fertige HTML-Seite?
Hat jemand Anregungen, Tipps, Links, oder sogar was Code (sowohl PHP als auch Delphi)?
Danke!


retnyg - Do 24.02.05 14:44

die daten kannst du mit der IdHTTP komponente verschicken welche die Daten per POST an eine php-seite übergibt.Suche bei Google PHP POST GET
in der php-seite musst du dann halt noch die übertragenen daten überprüfen.
ich würde dir empfehlen die daten zu verschlüsseln sonst ist dein system schneller geknackt als du auf 3 zählen kannst.
dann gibts nur noch highscores ala 9999999 ;-)


F34r0fTh3D4rk - Do 24.02.05 15:52

dann müsste er auch sämtliche speicheradressen verschlüsseln um sowas komplett auszuschließen, oder halt so oft ändern, dass man sie nicht findet, aber es gibt immer
wege ...


ScorpionKing - Do 24.02.05 16:00

ich hatte da mal eine komponente geschrieben, die mit einem php-skript "kommuniziert" hat!
weiß aber nicht mehr wo ich die habe, ich suche mal! :D


matze.de - Do 24.02.05 16:12

Ein simples PHP Script könnte zb. so aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
<?php
/*
MySQL-Table for User Score
CREATE TABLE `user_score` (
`ID` INT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT PRIMARY KEY,
`NAME` VARCHAR(15) NOT NULL,
`SCORE` INT(10) NOT NULL,
`DATE` DATETIME NOT NULL
);

*/

$DBHOST = "localhost"; //DatenbankHost
$DBNAME = "DB123";  //DatenbankName
$DBUSER = "anonymus";  //DatenbankUser
$DBPASS = "geheim";  //DatenbankPasswort

$tbl_user_score = "user_score";  //MySQL TabellenName

$conn_id = mysql_connect($DBHOST, $DBUSER, $DBPASS); //MySQL-Verbindung herstellen
mysql_select_db($DB123, $conn_id);  //Datanbank auswählen

if((isset($_GET['data'])) || (!empty($_GET['data']))) { //wenn highscores.php?data=Alex#2323 gegeben ist dann...
  $post_vars = explode('#', $data); //Daten auslesen
  $name = $post_vars[0]; // In Array eintragen
  $score = $post_vars[1];
  mysql_query("INSERT INTO ".tbl_user_score." (NAME,SCORE,DATE) VALUES ('$name','$score','".strftime('%Y-%m-%d %H:%M:%S')."')"); //MySQL Query senden um in der DB zu speichern
}else { //wenn nicht highscores.php?data=Alex#2323 sondern nur highscores.php dann...
   $sql = "SELECT NAME, SCORE, DATE FROM ".table_user_score." ORDER BY SCORE DESC"; // aus der DB lesen
   $res = mysql_query($sql); // MySQL Query senden
   echo "<html><head><title>Highscores</title></head><body>" //Kopf der Tabelle (HTML teil)
       ."<table width='100%' border='0' cellspacing='3' cellpadding='3'>"
       ."<tr><td><b>Name</b></td>"
       ."<td><b>Score</b></td><td><b>Datum</b></td></tr>";
   while($Daten = mysql_fetch_row($res)){  // DAten auflisten/ausgeben
     echo "<tr>
             <td>".$Daten[0]."</td>
             <td>".$Daten[1]."</td>
             <td>".$Daten[3]."</td>
           </tr>";
   }
   echo "</table></body></html>";// Ende der/des Tabelle/HTML Teils
 }
//MySQL Verbindung schließen
if(is_resource($conn_id)) {
  mysql_close($conn_id);
} else {}
?>



hoffe ich habe keine fehler drinne :/ habs grad schnell ausm kopf geschrieben. das ganze geht natürlich auch mit *.txt dateien.

mfg matze


retnyg - Do 24.02.05 17:28

ich würde das nicht über get lösen weil dann jedes kind die werte direkt in die adressleiste schreiben kann.
bei POST kannst du auch noch andere werte übergeben, z.b. eine errechnete prüfsumme über den highscore wert.


matze.de - Do 24.02.05 17:40

retnyg hat folgendes geschrieben:
ich würde das nicht über get lösen weil dann jedes kind die werte direkt in die adressleiste schreiben kann.
bei POST kannst du auch noch andere werte übergeben, z.b. eine errechnete prüfsumme über den highscore wert.


Ich sagte ja "Es ist nur ein Simples Beispiel". ;)

mfg matze

//Edit: Das Beispiel lässt sich auch sehr leicht editieren, damit es mit POST geht :) und es soll ja nur in etwa eine struktur zeigen.


F34r0fTh3D4rk - Do 24.02.05 18:02

aber ich glaube hier können nicht viele was damit anfangen, wer kann den schon php ? :wink:
ich glaube gausi wollte fertigen code haben, weil er bestimmt keine lust hat sich mit php rumzuschlagen (hätte ich auch net), dann braucht er auch noch die kommunikation (gabs da net ne indy komponente ?)


matze.de - Do 24.02.05 18:05

hab Gausi schon gesagt, dass ich ihm das coden kann wenn er will und er hatte oben auch gesagt er hat einen der php kann :)

mfg matze.de

P.S.: Außerdem is PHP doch so schön einfach :]


Gausi - Do 24.02.05 19:49

Ok, danke erstmal für die Bemühungen. So langsam glaube ich, dass sich das doch realisieren lässt. 'Mein' PHP Experte (nicht matze.de, der andere) hat mal für erste Gehversuche ein Mini-Skript gebaut, und ich ahb n kleines Test-Prog geschrieben, und die Verbindung Delphi<->PHP scheint schonmal zu klappen. Jetzt muss nur noch die Datenbank her, und das richtige Skript, und das richitge Prog, und schon bin ich fertig mit den Nerven. :lol:


NuCHiLL - Fr 04.03.05 18:23

@matze.de:
könntest du mir nen gefallen tun und den source oben funktionsfähig machen?
ich hock seit ner Stunde rum und krieg überhaupt nix gebacken. Wäre echt nett! :wink:


matze.de - Sa 05.03.05 09:46

NuCHiLL hat folgendes geschrieben:
@matze.de:
könntest du mir nen gefallen tun und den source oben funktionsfähig machen?
ich hock seit ner Stunde rum und krieg überhaupt nix gebacken. Wäre echt nett! :wink:


Oben der Source is im grunde Funktionsfähig, aber er soll eigentlich nur ne denkhilfe sein.

mfg matze


Gausi - Sa 05.03.05 11:29

So gets jetzt bei mir, hat der "TobiGott" geschrieben:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// Highscore_add.php
<?PHP
require_once("config.inc.php");

if(isset($_POST['name'])){
    $tbl_highscore = $_POST['stufe'];
    mysql_query("INSERT INTO $tbl_highscore (name, gemeinde, score) VALUES ('$_POST[name]', '$_POST[gemeinde]','$_POST[score]')");
} //ende if
mysql_close();
?>


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
 //ShowHighscores.php
<?PHP
require_once("../highscore/config.inc.php");
if(isset($_GET['s'])){
    $bl_highscore  = "highscore_";
    $tbl_highscore .= $_GET['s'];  // ich habe bei mir verschiedene Tabellen für veschiedene Schwierigkeitstufen
}
else{
  $tbl_highscore  = "highscore_1";
  }
$sql = "SELECT name, gemeinde, score FROM ".$tbl_highscore." ORDER BY score DESC"; // aus der DB lesen
$res = mysql_query($sql);
echo "<table width='500' border='0' cellspacing='3' cellpadding='3'align='center'>"
."<tr><td width='40'><b>Platz</b></td><td width='150'><b>Name</b></td><td width='150'><b>Gemeinde</b></td><td width='60'><b>Score</b></td></tr>";
$i = 1;
while($daten = mysql_fetch_row($res)){  // Daten auflisten/ausgeben
  echo "<tr><td width='40'>".$i."</td><td width='150'>".$daten[0]."</td><td width='150'>".$daten[1]."</td><td width='60'>".$daten[2]."</td></tr>";
  $i++;
}
echo "</table>";// Ende der Tabelle
mysql_close();
?>


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 //config.php
<?php

//Datenbank Zugangsdaten

$mysql['hostname'] = "Die";    // z.B. mysqlhost.de
$mysql['username'] = "Zugangsdaten";// MySQL Datenbank Benutzername
$mysql['password'] = "poste ich ";  // MySQL Datenbank Passwort
$mysql['database'] = "hier nicht";  // Name der MySQL Datenbank

//Datenbank verbindung herstellen

@mysql_pconnect($mysql['hostname'], $mysql['username'], $mysql['password']) or die ("<p>Es konnte keine Verbindung zu der Datenbank erstellt werden. Bitte versuchen Sie es später nochmal.");
@mysql_select_db($mysql['database']);
?>

Übergabe der Daten mit

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
t:=TStringlist.Create;
t.Add('stufe=highscore_'+ inttostr(Auswahl));
t.Add('name='+NameEDIT.Text);
t.Add('gemeinde='+GemeindeEDIT.Text);
if Punkte<1 then Punkte:=1;
t.Add('score='+inttostr(Punkte));
try
     form1.idhttp1.Post({Ich poste hier auch nicht die Adresse...},t);
except end;

Das war meine erste Online-Zusammenarbeit mit jemand anderem, und sie hat sehr gut geklappt, wenn man sich erstmal drauf geeinigt hatte, was man genau übergibt...


NuCHiLL - Sa 05.03.05 12:29

thx...


zero_cool1986 - Sa 31.10.09 08:01

Hi,

Ich habe keine Ahnung von php und mysql,
kann mir zufällig jemand noch den Quellcode zum erstellen der Datenbank posten?

LG


jaenicke - Sa 31.10.09 09:26

Das kann man zwar theoretisch auch per Quelltext erledigen, aber normalerweise nehme ich dafür phpMyAdmin und lege die Datenbank und die Struktur einfach manuell an.