HighScore - "Square7" klappt nicht!

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

N0X

BeitragSa, März 27, 2010 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mein PHP-Script:
Code: [AUSKLAPPEN]
<?php
   //MySQL Connection Data
      $SQL_User = "tibario";      //Benutzername
      $SQL_Pass = "***";      //Passwort
      $SQL_Host = "localhost";      //SQL Host
      $SQL_DaBa = "tibario";      //Datenbank auf die zugegriffen wird
   
      //MySQL Connection
      mysql_connect($SQL_Host,$SQL_User,$SQL_Pass) OR die(mysql_error());
      mysql_selectdb($SQL_DaBa) OR die(mysql_error());
   
      //Der Rest des Codes hier drunter
   
   mysql_query("CREATE TABLE IF NOT EXISTS tibario (
   Name TEXT,
   Punkte INT)") or die(mysql_error());

   //Getting the Data
   $OHS_Action = $_GET['Action'];
   $OHS_Spieler = $_GET['Name'];
   $OHS_Punkte = $_GET['Punkte'];

   switch($OHS_Action) {
         case "add":      //Add Entry
         mysql_query("INSERT INTO
            tibario
            VALUES
                  (".$OHS_Spieler.",".$OHS_Punkte.")") or die(mysql_error());
               break;
         case "rem":      //Remove Entry
         mysql_query("DELETE FROM
                  tibario
            WHERE
                  Name = '".$OHS_Spieler."' AND
                  Punkte = '".$OHS_Punkte."'") or die(mysql_error());
               break;
         case "red":      //Read Highscore
               $result = mysql_query("SELECT
                  Name,
                  Punkte
            FROM
                  tibario
            SORT BY
                 Punkte DESC");   //ASC = Aufwärts sortiert, DESC = Abwärts sortiert
            $CurrentPlace = 1;
         if (mysql_num_rows($result)) {
               while ($row = mysql_fetch_assoc($result)) {
                     //Ausgabecode der Liste
                     echo $CurrentPlace+"\r\n";
                     echo $row['Name']+"\r\n";
                     echo $row['Punkte']+"\r\n";
                     $CurrentPlace += 1;
               }
         }
               break;
   }
?>


//EDIT:
tibario_OH's hab ich keine mehr drin.

//EDIT2:
Hier der gesamte BB-Code:
Code: [AUSKLAPPEN]
Global HTTPServerAdress$ = "tibario.square7.ch"
Global HTTPServerFile$ = "/highscore.php";/users/tibario/www/
Global OHS_TimeOut = 1000,Name$,Punkte

Type OHS_Highscores
   Field Place
   Field Name$
   Field Score
End Type

While Not KeyHit(1)
   If KeyHit(59) Then OHS_AddHighscore$("Hannes",120)
   If KeyHit(60) Then
      OHS_GetHighscore$()
   EndIf
   For o.OHS_Highscores = Each OHS_Highscores
      Print o\Place+" "+o\Name$+": "+o\Score
   Next
Wend
End

Function OHS_AddHighscore$(Name$, Punkte)
   Local TCP,ExitCode$,StartMS
   TCP = OpenTCPStream(HTTPServerAdress, 80)
   
   ;HTTP GET
   WriteLine TCP, "GET "+HTTPServerFile+"?action=add&name="+Name$+"&Punkte="+Punkte+" HTTP/1.1"
   WriteLine TCP, "Host: "+HTTPServerAdress$
   WriteLine TCP, "Connection: Close"
   WriteLine TCP, ""
   
   StartMS = MilliSecs()
   While Eof(TCP)
      If MilliSecs()-StartMS > OHS_TimeOut Then Exit
      Delay 25
   Wend
   
   ExitCode$ = ReadLine(TCP)
   While Not Eof(TCP)
      DebugLog ReadLine(TCP)
   Wend
   
   Return ExitCode
End Function

Function OHS_RemHighscore$(Name$, Punkte)
   Local TCP,ExitCode$,StartMS
   TCP = OpenTCPStream(HTTPServerAdress, 80)
   
   ;HTTP GET
   WriteLine TCP, "GET "+HTTPServerFile+"?action=rem&name="+Name+"&Punkte="+Punkte+" HTTP/1.1"
   ;WriteLine TCP, "Connection: Close"
   WriteLine TCP, "Host: "+HTTPServerAdress$
   WriteLine TCP, "Connection: Close"
   WriteLine TCP, ""
   
   StartMS = MilliSecs()
   While Eof(TCP)
      If MilliSecs()-StartMS > OHS_TimeOut Then Exit
      Delay 25
   Wend
   
   ExitCode$ = ReadLine(TCP)
   While Not Eof(TCP)
      DebugLog ReadLine(TCP)
   Wend
   
   Return ExitCode
End Function

Function OHS_GetHighscore$()
   Local TCP,ExitCode$,StartMS
   TCP = OpenTCPStream(HTTPServerAdress, 80)
   
   ;HTTP GET
   WriteLine TCP, "GET "+HTTPServerFile+"?action=red HTTP/1.1"
   WriteLine TCP, "Host: "+HTTPServerAdress$
   WriteLine TCP, "Connection: Close"
   WriteLine TCP, ""
   
   StartMS = MilliSecs()
   While Eof(TCP)
      If MilliSecs()-StartMS > OHS_TimeOut Then Exit
      Delay 25
   Wend
   
   ExitCode$ = ReadLine(TCP)
   Repeat
      Local Ln$ = ReadLine(TCP)
      DebugLog Ln$
      If Ln$ = ""
         While Not Eof(TCP)
            Local OHSE.OHS_Highscores = New OHS_Highscores
            OHSE\Place = ReadLine(TCP)
            OHSE\Name = ReadLine(TCP)
            OHSE\Score = ReadLine(TCP)
         Wend
      EndIf
   Until Eof(TCP)
   
   Return ExitCode
End Function
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xaymar

ehemals "Cgamer"

BeitragSa, März 27, 2010 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
(".$OHS_Spieler.",".$OHS_Punkte.")") or die(mysql_error());

Hab ich das in meinem Tutorial echt so stehen? Oo
Code: [AUSKLAPPEN]
('".$OHS_Spieler."','".$OHS_Punkte."')") or die(mysql_error());

fix'd. Sollte jetzt gehen

Edit: Ja ich habs tatsächlich ohne ' da stehen Embarassed
Warbseite
  • Zuletzt bearbeitet von Xaymar am Sa, März 27, 2010 0:36, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragSa, März 27, 2010 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, scheint an PHPs Case-Sensitivity zu liegen: Benenne die Parameter Action, Name und Punkte auch wirklich genau so (beim Aufruf aus BB heraus), wie du sie später aus dem assoziativen Array ($_GET) ausliest.

Und dann musst du beim Speichern (INSERT INTO) nach dem Tabellennamen noch die Namen der Felder, die einen Wert erhalten sollen, in Klammern aufführen.

Und bei mysql_num_rows() stimmen die Parameter nicht.

Weitere Auskünfte gibt bestimmt Google*, ich bin im Moment leider zu müde, um ausführlicher zu werden.

mfG

Edit
* oder auch schon der Server selbst: http://tibario.square7.ch/highscore.php?Action=red
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

N0X

BeitragSa, März 27, 2010 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, allerdings bekomme ich immer noch nur Nullen als Werte wenn ich HTML\1.1 habe. Bei HTML\1.0 kriege ich garkeine Werte. Crying or Very sad

Warum?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xaymar

ehemals "Cgamer"

BeitragSa, März 27, 2010 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
bei $_GET und $_POST hat Case-Sensitive afaik keine auswirkung(Geradeeben bei seinem webspace nochmal getestet Smile ). Es läuft ja auf meinem Webspace ohne Probleme.
Warbseite

Holzchopf

Meisterpacker

BeitragSa, März 27, 2010 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer: Dachte ich auch, aber man kann ja nie wissen Wink deshalb habe ich geschaut, ob
http://tibario.square7.ch/highscore.php?action=red und
http://tibario.square7.ch/highscore.php?Action=red das gleiche ausspucken. Tun sie nicht, also wäre indirekt bewiesen, dass es da draussen PHP-Prozessoren gibt, die beim Assoz-Arraynamen sehr pingelig sind, was Grossschreibung anbelangt Wink

N0X: Versuch doch, bevor du es weiter von BB aus steuerst, direkt über die Adressleiste vom Browser zu machen, dass das PHP-Script das ausgibt, was es sollte. Resp. so arbeitet, wie es sollte. Also: Zuerst PHP-Script auf Vordermann bringen. Danach sollte das aufrufen dieses Scripts von BB aus ein Kinderspiel sein.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Xaymar

ehemals "Cgamer"

BeitragSa, März 27, 2010 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
mhm mit Action/action hab ichs nicht getestet. allerdings mit Name/name und Punkte/punkte weshalb mir das wohl nicht aufgefallen ist.

Edit:
Code: [AUSKLAPPEN]
               $result = mysql_query("SELECT
                  Name,
                  Punkte
            FROM
                  tibario
            SORT BY
                 Punkte DESC");   //ASC = Aufwärts sortiert, DESC = Abwärts sortiert

vvvv
Code: [AUSKLAPPEN]
               $result = mysql_query("SELECT
                  Name,
                  Punkte
            FROM
                  tibario
            SORT BY
                 Punkte DESC") or die(mysql_error());   //ASC = Aufwärts sortiert, DESC = Abwärts sortiert

Und sagen was dann kommt
Warbseite

N0X

BeitragSa, März 27, 2010 2:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei HTML\1.1 kommt bei Place 0 und bei Punkte auch 0. (bei Name wird mir generell irgendwie nichts angezeigt?)
Bei HTML\1.0 kommt nix?

//EDIT:
Im DebugLog() steht weiterhin:
Code: [AUSKLAPPEN]
Date: Sat, 27 Mar 2010 00:07:13 GMT
Server: Apache/2.2
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Jo0oker

BeitragSa, März 27, 2010 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Seit wann heißt das Sort by und nciht Order by?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Thorsten

BeitragSa, März 27, 2010 10:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Es heisst ORDER BY.

Holzchopf

Meisterpacker

BeitragSa, März 27, 2010 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist der Debuglog aus der Funktion OHS_GetHighscore$? Ich schätze ganz einfach, dass das PHP-Script gar nix ausgibt. Deshalb Name="" Place=0 und Punkte=0 und das unterschiedliche Verhalten bei HTML1.0 und 1.1 (im einen Fall wird nach dem Header einfach EOF erreicht).

Drum frag ich jetzt einfach noch mal: Du bist dir ganz sicher, dass du im BB-Code, zum Beispiel in der Zeile
Code: [AUSKLAPPEN]
WriteLine TCP, "GET "+HTTPServerFile+"?action=red HTTP/1.1"
den Parameter action genau gleich schreibst wie du ihn in PHP, zum Beispiel in der Zeile
Code: [AUSKLAPPEN]
$OHS_Action = $_GET['Action'];
geschrieben hast? Ich spreche da vorallem von der Gross-/Kleinschreibung. Rolling Eyes

Klick mal die beiden Links (die ich schon mal gepostet habe) http://tibario.square7.ch/highscore.php?action=red und http://tibario.square7.ch/highscore.php?Action=red an und finde heraus, was die beiden genau unterscheidet. Und dann wirst du sehen, welcher von beiden eine quasi leere Seite ausgibt und welcher dir eine MySQL-Fehlermeldung ausspuckt. Versuch herauszufinden, wieso einmal ein Fehler kommt und das andere mal nicht. Tipp: "das andere mal" wird der fehlerhafte PHP-Code gar nicht ausgeführt Arrow die Switch-Bedingung ist nicht erfüllt.
Dann bereinigst du vorrangig das PHP-Script. Wie gesagt, du musst dafür nicht immer dein BB-Programm ausführen! Schauen ob eine Fehlermeldung oder was zu erwarten war ausgegeben wird, kannst du auch mit dem Browser deiner Wahl.
Und wenn du dir dann sicher bist, dass das PHP-Script tut, was du von ihm eigentlich erwartest, dann kannst du BB damit kommunizieren lassen.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

N0X

BeitragSa, März 27, 2010 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah!
Jetzt kommt da was, und zwar "10120201203012040120" (im Browser)
Und beim Programm ebenso! (Score immernoch 0)

Ich verzweifel langsam! Surprised

Mfg,
N0X

//EDIT:
(bzw. "10120" bei EINEM Eintrag)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xaymar

ehemals "Cgamer"

BeitragSa, März 27, 2010 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie habe ich das Gefühl, das das Script auf der Serverseite gar nicht dasselbe ist wie das gepostete, da
1. Zeilenumbrüche scheints nicht zu geben
2. Name wird zum Integer
Oder du solltest nen anderen Hoster suchen.


@Jo0oker, Thorsten: Bei mir geht SORT BY seltsamerweise auch. Lokal testen bringts wohl nicht...
Warbseite

N0X

BeitragSa, März 27, 2010 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Exakt Dieses Script ist hochgeladen:
Code: [AUSKLAPPEN]
<?php
   //MySQL Connection Data
      $SQL_User = "tibario";      //Benutzername
      $SQL_Pass = "******";      //Passwort (absichtlich *weggesternchend*)
      $SQL_Host = "localhost";      //SQL Host
      $SQL_DaBa = "tibario";      //Datenbank auf die zugegriffen wird
   
      //MySQL Connection
      mysql_connect($SQL_Host,$SQL_User,$SQL_Pass) OR die(mysql_error());
      mysql_selectdb($SQL_DaBa) OR die(mysql_error());
   
      //Der Rest des Codes hier drunter
   
   mysql_query("CREATE TABLE IF NOT EXISTS tibario (
   Name TEXT,
   Punkte INT)") or die(mysql_error());

   //Getting the Data
   $OHS_Action = $_GET['Action'];
   $OHS_Spieler = $_GET['Name'];
   $OHS_Punkte = $_GET['Punkte'];

   switch($OHS_Action) {
         case "add":      //Add Entry
         mysql_query("INSERT INTO
            tibario
            VALUES
                  ('".$OHS_Spieler."','".$OHS_Punkte."')") or die(mysql_error());
               break;
         case "rem":      //Remove Entry
         mysql_query("DELETE FROM
                  tibario
            WHERE
                  Name = '".$OHS_Spieler."' AND
                  Punkte = '".$OHS_Punkte."'") or die(mysql_error());
               break;
         case "red":      //Read Highscore
               $result = mysql_query("SELECT
                  Name,
                  Punkte
            FROM
                  tibario
            ORDER BY
                 Punkte DESC") or die(mysql_error());   //ASC = Aufwärts sortiert, DESC = Abwärts sortiert
            $CurrentPlace = 1;
         if (mysql_num_rows($result)) {
               while ($row = mysql_fetch_assoc($result)) {
                     //Ausgabecode der Liste
                     echo $CurrentPlace+"\r\n";
                     echo $row['Name']+"\r\n";
                     echo $row['Punkte']+"\r\n";
                     $CurrentPlace += 1;
               }
         }
               break;
   }
?>
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Holzchopf

Meisterpacker

BeitragSa, März 27, 2010 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Meister im Debuggen bist du ja noch nicht... Was ist denn diese 10120 für eine Zahl? Also wenn ich mir die Ausgabe N0X hat Folgendes geschrieben:
10120201203012040120
so anschaue, seh' ich da ein System... Und zwar *ohhhmmmm* erste Ziffer: fortlaufend, wird wohl $CurrentPlace sein, danach kommt immer 0120.
Arrow Vermutung: Etwas stimmt bei den echos nicht.
Arrow Überprüfung: Die Zeilenumbrüche fehlen, das heisst, sie werden nicht richtig verbunden. Ausserdem: ein String, addiert mit einem String, gibt in PHP 0. Dann noch die 120, weil ein Int, addiert mit dem String "\r\n", in PHP seltsamerweise 120 gibt. Also hat man die Begründung dieses Fehlverhaltens und das führt auf die
Arrow Lösung: In PHP werden Strings nicht addiert, sondern mit dem . verbunden:
Code: [AUSKLAPPEN]
echo $CurrentPlace."\r\n";
echo $row['Name']."\r\n";
echo $row['Punkte']."\r\n";


mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

N0X

BeitragSa, März 27, 2010 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, ja, hm ok. Rolling Eyes
Stimmt, Strings addiert man mit Punkten. Embarassed
Wenn ich jetzt aber einen Eintrag mache, und diesen dann mit meinem Browser auslese, wird der Platz und die Punkte angezeigt. ("1 120")
Der Name wird aber immernoch weggelassen. Warum?

Mfg,
N0X

//EDIT:
Außerdem werden die Einträge nicht untereinander dargestellt, sondern nebeneinander! (was habe ich also bei der "SORT BY DESC")"-Zeile falsch? Rolling Eyes )

//EDIT2:
Ersteres gelöst! Smile (hatte Name klein geschrieben beim Senden in BB)
Zweites immernoch vorhanden. Die Einträge werden nebeneinander angeordnet.
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xaymar

ehemals "Cgamer"

BeitragSa, März 27, 2010 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@Holzchopf: seit wann geht das nicht mehr? Bei XAMPP gehts immer noch

Edit: Bin bei 5.1.5, habe XAMPP schon länger nicht geupdatet.
Warbseite
  • Zuletzt bearbeitet von Xaymar am Sa, März 27, 2010 17:53, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragSa, März 27, 2010 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Dass die Werte im Browser noch nebeneinander dastehen liegt daran, dass ein Browser nur <br /> in einen echten Zeilenumbruch interpretiert (gibt gewisse ausnahmen, aber weil der Server als Content-Type: text/html angibt, werden halt die Steuerzeichen nicht interpretiert), da ist also kein Fehler. Das PHP-Script sollte sogar fehlerfrei sein, mittlerweile.

Ich hab mir den BB-Code kurz angeschaut und musste mit erschrecken feststellen, dass dein Server da extrem kleine chunks versendet. Das heisst, er kennzeichnet die grösse jeder Zeile einzeln. Das wird ziemlich mühsam, das richtig auszulesen, aber ich versuch mich mal daran, dir einen funktionierenden Beispielcode zu schreiben...

mfG

Edit
Cgamer: XAMPP ist ja keine PHP-Version Wink Ich weiss jetzt nicht, was du gemeint hast, aber ich führte meine Tests eben mit XAMPP mit PHP 5.3 aus. Welche PHP-Version hast du?

Edit2
N0X: Ich seh grad: Wenn du statt HTML/1.1 HTML/1.0 verwendest, macht er diese Chunksache nicht so. Einfach diese 1 im Code in eine 0 umwandeln und du bist glücklich =)
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group