Tipps zu BB<->PHP

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

bruZard

Betreff: Tipps zu BB<->PHP

BeitragSa, Sep 25, 2004 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich derzeit viel mit Serverkommunikation zwischen Blitzbasic und PHP zu tun habe sind mir einige Stolperfallen unter gekommen die ich hier kurz beschreiben möchte.

1. TCP Stream die Erste
Um mit einem Webserver zu kommunizieren muss BB einen TCP Stream zu eben jenem aufbauen. Beim Versuch den TCP Stream in einer globalen Variable zu halten und somit Zeit zu sparen, ist mir aufgefallen dass das nicht funktioniert.
Jede GET oder POST Anfrage muss über einen zuvor neu eingerichteten TCP Stream laufen.

2. TCP Stream die Zweite
GET oder POST Requests müssen mittels eines HTTP Headers gestellt werden. Mir ist dabei aufgefallen dass es Probleme mit der HTTP Head Version 1.1 gibt. Verwendet 1.0 und alles läuft perfekt.

3. Header in den Trash
Jede Anfrage an einen HTTP Server bewirkt dass der HTTP Header zurück gesendet wird. Dies kann weder verhindert noch weg-gebetet werden.
Da man selten diesen Header benötigt muss man ihn "überlesen". Ich löse das so dass ich vor der Ausgabe meiner Daten mittels echo "begin\n" definiere dass jetzt meine Daten kommen. Beim auslesen verwende ich folgenden Code:
Code: [AUSKLAPPEN]

Repeat
  in$ = Trim(ReadLine(TCPStream))
Until Left(in$,5)="begin" Or Eof(TCPStream)

;
; Jetzt kommen meine Daten
;

Um evtl. Trash nach meinen Daten zu vermeiden lese ich meine Daten nur bis zum Empfang eines "end" oder bis zum EOF. Das "end" wird ebenso gesendet wie das "begin" : echo "end\n"

Vielleicht hilft das ja dem Einen oder Anderen seine unerklärlichen Probleme zu lösen Wink
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Gina

BeitragSa, Sep 25, 2004 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Schade, etwas zu spät. Mußte mich da schon durchquälen, aber der nächste dankt es dir bestimmt...Wink

Sehr gute Erläuterung...

Gina.
www.jk-spiele.de

theBlade

BeitragSa, Sep 25, 2004 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr interessant... könntest du evtl. noch das entsprechende PHP-Script zeigen?? Wink
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)

UTFSB -> (use the fuckin "suchen"-button)

User posted image <- link -.-

dominik

BeitragSa, Sep 25, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
[zitat]1. TCP Stream die Erste[z/itat]

also das kann nicht ganz zustimmen, ich lesen auch über den selben stream mehrere emails aus, frag ab wieviele da sind. wie groß sie sind und lese sie aus.
gut bei php kann ich nicht mitreden davon hab ich leider (noch) keine ahnung aber das geht aufjedefall.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.

D2006

Administrator

BeitragSa, Sep 25, 2004 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
emails checken (pop3, port: 110)hat aber nix mit http (port: 80) zu tun.
Ist mir auch schon aufgefallen, dass man die Verbindung immer wieder aufbauen muss.

MfG

Vertex

BeitragSa, Sep 25, 2004 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Unterschied liegt in der HTTP Version. 1.0 muss neu verbunden werden, bei 1.1 bleibt die Vebrindung erhalten.
theBlade: Das sind nur Tipps, kein Workshop. Wer PHP kann, der wird sich schnell ein Hiscoresystem zusammengebaut haben.
mfg olli
vertex.dreamfall.at | GitHub

regaa

BeitragSo, Sep 26, 2004 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd den http header nicht ganz 'überlesen' da, da auch die nachfolgende Dokumentgröße beschrieben wird, die du ja sinnvoll als Ersatz für eof anwenden könntest. Ist nur so eine Idee Wink .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Gina

BeitragMi, Dez 01, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, da in einem anderen Thread mal wieder gefragt wurde, wie ich den Highscore online speichern kann per php und MySql, werde ich hier mal die wesentlichen Sachen aus meinem php-Script posten.

Also: Aus BB heraus wird wie oben von BruZard beschrieben eine GET-Anfrage "an" das php-Script incl. den Werten für Name und Highscore gesendet. Das php-Script liest die beiden Werte aus.

Code: [AUSKLAPPEN]
<?php
// Verbindung zur Datenbank

$user = "username";

$host = "localhost";

$pass = "passwort";

$db = "db-name";

mysql_connect ($host,$user,$pass)

   or die; //(include 'fehlerseite.php');

mysql_select_db($db)

   or die; //(include 'fehlerseite.php');

/******* Filtern der Werte ********************/

      if ($name != @"")
      {
      $search = array ("'<script[^>]*?>.*?</script>'si",  // Strip out javascript
                       "'<[\/\!]*?[^<>]*?>'si",           // Strip out html tags
                       "'([\r\n])[\s]+'",                 // Strip out white space
                       "'&(quot|#34);'i",                 // Replace html entities
                       "'&(amp|#38);'i",
                       "'&(lt|#60);'i",
                       "'&(gt|#62);'i",
                       "'&(nbsp|#160);'i",
                       "'&(iexcl|#161);'i",
                       "'&(cent|#162);'i",
                       "'&(pound|#163);'i",
                       "'&(copy|#169);'i",
                       "'&#(\d+);'e");                    // evaluate as php

      $replace = array ("",
                        "",
                        "\\1",
                        "\"",
                        "&",
                        "<",
                        ">",
                        " ",
                        chr(161),
                        chr(162),
                        chr(163),
                        chr(169),
                        "chr(\\1)");

      $namen = preg_replace ($search, $replace, $name);

/********** Name leer? **********************/

      if ( $namen == " " )
      {
      $namen= "Unknown";
      }

/********** eintragen ***********************/

      $insertdata = "INSERT INTO highscore (name, score)
        values ('$namen','$score')";
      mysql_query($insertdata)
        or die (include 'fehlerseite.php');
      }

/******* id und Platz abfragen **************/

      $sid = mysql_insert_id();
      if ( $sid == 0 )
         {
          echo "Sorry, es ist ein Fehler aufgetreten... §";
         }
      else
         {
         $result = mysql_query("SELECT count(*) AS platz FROM highscore WHERE score>'$score'");
         $line = mysql_fetch_array($result, MYSQL_ASSOC);
         $platz = ($line['platz'])+1 ;
         echo "Du hast Platz $platz erreicht. Glückwunsch!";
         }
?>


Zuerst wird die Verbindung zur Datenbank hergestellt (die Daten müssen natürlich entsprechend eingetragen werden Wink).

Anschließend ein Beispiel, wie ich aus dem Namen HTML-Tags etc. rausfilter. Bleibt nix mehr übrig, wird "Unknown" als Name eingesetzt. Danach werden Name und Score in die Datenbank gespeichert und die id abgefragt. Wird für die id der Wert 0 zurückgeliefert, so ist es nicht zur Eintragung gekommen --> Fehler wir zurück gegeben...

Ist alles ok, dann lese ich den erreichten Platz aus und gebe ihn zurück.

Von BB aus frage ich das Ergebnis dann ab (so wie oben mit "echo begin" erklärt) und gebe es im Spiel aus...

Die Tabelle in der Datenbank muss demnach mindestens die Felder id, name und score (Namen natürlich beliebig) enthalten. Ist vielleicht kein perfektes Script, aber als Anregung dürfte es sicher reichen Wink

Liebe Grüße, Gina.
www.jk-spiele.de

nobf

BeitragMi, Dez 01, 2004 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
htmlspecialchars
Anstatt extra zu filtern =)

[edit]
Entschuldigung fürs Threadpushing, hab einfach nach einem Thread gesucht wollt was schreiben und hab das Datum nicht beachtet =/

Gina

BeitragMi, Dez 01, 2004 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Is schon ok, ich hab den Thread ja wieder rausgekramt... Wink

htmlspecialchars ist mir bekannt. Vielleicht ist es nicht aufgefallen, aber diese "Routine" (die nicht von mir ist) entfernt nicht nur HTML-Tags, sondern auch komplette javascripte. Ist vielleicht nicht ganz unwichtig, denke ich..

Gina.
www.jk-spiele.de

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group