German web service einrichten

D

Deleted member 103

Guest
Hallo Jungs,

ich möchte auf eine MySQL-Datenbank zugreifen(schreibend und lesend), dabei nutze ich diese Anleitung.
Hier schreibt Erel das man ein Web-Service einrichten soll. Für dieses Web-Service gibt es ein PHP-Script, ich weis aber nicht wo und wie es in meine Homepage einbinden kann.
Kann mir jemanden auf die Sprünge helfen? In sache Homepage habe ich null Ahnung. :eek:

Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Jungs,

ich möchte auf eine MySQL-Datenbank zugreifen(schreibend und lesend), dabei nutze ich diese Anleitung.
Hier schreibt Erel das man ein Web-Service einrichten soll. Für dieses Web-Service gibt es ein PHP-Script, ich weis aber nicht wo und wie es in meine Homepage einbinden kann.
Kann mir jemanden auf die Sprünge helfen? In sache Homepage habe ich null Ahnung. :eek:

Ciao,
Filippo


Hallo Filippo,

Du legst dir die PHP-Datei an und änderst die nach deinen Wünschen.
Anschliessend irgendwo auf deinen Server speichern. Fertig!

Nun musst du aber im B4A-Code den Speicherort bekannt geben... z. B. so:

B4X:
Sub ExecuteRemoteQuery(Query As String, TaskId As Int)
    Dim req As HttpRequest
    req.InitializePost2("http://www.deine-seite.com/dein_verzeichnis/deine_datei.php", query.GetBytes("UTF8"))
    hc.Execute(req, TaskId)
End Sub

Ich hab es jetzt nur mal überflogen, aber ich denke so geht das....

VG Maik
 
Last edited:
D

Deleted member 103

Guest
Hallo Maik,

vielen Dank für schnelle Antwort.
Es hört sich gut und einfach an, ich werde es heute abend probieren.


Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,

vielen Dank für schnelle Antwort.
Es hört sich gut und einfach an, ich werde es heute abend probieren.


Ciao,
Filippo

Ich denke schon das es so funktioniert.
B4A nutzt ja nur http://www.deine-seite.com/dein_verzeichnis/deine_datei.php als Schnittstelle zur Datenbank, da B4A nicht direkt auf mySQL zugreift.

Allerdings würde ich diese Daten:

$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";


in eine Extradatei packen (z. B. sql_data.php) und diese in ein Verzeichis (z. B. /data) verstecken...

Die Datei "sql_data.php" würde dann so aussehen:

B4X:
<?php
$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";
?>

Die Daten kannst du dir dann ja wieder so reinholen:

B4X:
<?
// Anfang

include("data/sql_data.php");

// Ende

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input"); 
$sth = mysql_query($query);

if (mysql_errno()) { 
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error(); 
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

... das ist einfacher sicherer, als immer alle Login-Daten in jeder Datei unverschlüsselt mitzuliefern. Ausserdem sparst du eine Menge Schreibarbeiten auf Dauer, wenn du diese Daten noch öfters in anderen Dateien verwendest.

Ich hab zwar von B4A noch keinen richtigen Plan, aber php etc... passt schon. :D

VG Maik
 
Last edited:
D

Deleted member 103

Guest
Hallo Maik,

Ich hab zwar von B4A noch keinen richtigen Plan, aber php etc... passt schon.
und ich verstehe von PHP fast nichts!
Eine Frage habe ich zu deinem Code und zwar: ist dieser Code nur zum lesen von Datensätzen oder kann man es auch zum speichern verwenden? Es ist mir klaar das ich dafür andere SQL-Commando verwenden muss, aber muss an den PHP-Script nichts geändert werden?

Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,


und ich verstehe von PHP fast nichts!
Eine Frage habe ich zu deinem Code und zwar: ist dieser Code nur zum lesen von Datensätzen oder kann man es auch zum speichern verwenden? Es ist mir klaar das ich dafür andere SQL-Commando verwenden muss, aber muss an den PHP-Script nichts geändert werden?

Ciao,
Filippo

Moin Filippo,

ja dieser PHP-Code ist zum abfragen einer Datenbank da.

Eine Datenbank zu füllen (INSERT INTO und UPDATE) und auslesen (SELECT * FROM) sind zwei paar Stiefel und haben eigendlich miteinander nichts zu tun (Sind zwei unabhängige Prozesse).

Zum Füllen der Datenbanken gibt es mehrere Möglichkeiten. Die einfachste Möglichkeit wäre in myPhpAdmin zu gehen und von da aus alle Spalten einer Tabelle manuell zu beschreiben.

Eine weitere Möglichkeit wäre die Benutzung eines Formulares welches du vorher speziell für diese Datenbank geschrieben und auf deinen Server gespeichert hast (Registrierungsformular, Umfrageformular etc.).

... oder die etwas komplizierterer Variante, durch ein anderes Script bei Ereignissen zu füllen (Beispiel von meinen Spielen: MyScriptShop).
Hier werden die Datenbanken nach jedem Dreh aktualisiert, beschrieben und ausgelesen. Der Einsatz wird dir vom Guthaben vor jedem Spiel abgezogen und bei einem Gewinn der Betrag des Gewinnes nebst Frei- und Bonusspielen gutgeschrieben. Bei einem verlorenem Spiel wird nur der Einsatz von neuem abgezogen.

Ich schätze mal das man das mit B4A auch so ähnlich realisieren könnte. Eine Schnittstelle zum auslesen und schreiben. Da B4A mit PHP kommuniziert müsste das machbar sein, die Kommunikation mit mySQL erledigt ja PHP.

Allerdings müssen von Projekt zu Projekt unterschiedliche Möglichkeiten geschaffen werden, es ist ja nie ein Projekt wie das andere...

Also... es kommt auf die Zielstellung des Projektes an.

Um dir da weiter helfen zu können, müsste man schon mehr über dein Vorhaben wissen.

Du kannst mir ja gern eine PN schreiben mit deiner Zielstellung.

VG Maik
 
D

Deleted member 103

Guest
Hallo Maik,

Also... es kommt auf die Zielstellung des Projektes an.

Also mein Ziel ist ganz einfach.

Ich möchte das die Leute den Spielstand/Statistik online speichern können, um somit eine Rangliste enstehen lassen.

Deshalb brauche ich ein PHP-Script für diese 3 Funktionen: SELECT, INSERT und UPDATE.


Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,



Also mein Ziel ist ganz einfach.

Ich möchte das die Leute den Spielstand/Statistik online speichern können, um somit eine Rangliste enstehen lassen.

Deshalb brauche ich ein PHP-Script für diese 3 Funktionen: SELECT, INSERT und UPDATE.


Ciao,
Filippo

Also nix weiter als ein Highscore - Script...

Wenn es ein bissel Zeit hat, kann ich mal auf meinem Rechner suchen, ich glaube ich habe noch ein Highscore - Script wo du gleich mehrere Spiele (unbegrenzt) verwalten kannst. Jeden Highscore eines bestimmten Spieles kannst du mit separaten Link dann anzeigen.

Eine andere alternative wäre, ich baue mal eine Highscoreliste für ein einzelnes Spiel und stelle es zur Verfügung oder Poste es hier...

Problem! Ich habe noch NULL Ahnung von B4A und kann somit mit keiner Anbindung an das PHP bieten. Bin ja schon mal froh das ich "Hello world" hinbekommen habe....

Das kann aber paar Tage dauern, da ich im Moment an einem Mega PHP/mySql-Projekt arbeite und mich nur nebenbei mit B4A beschäftige.

Also brauchst du ja nur 3 Spalten? Name, Punkte, Datum und eventuell, wenn du nicht in der Datenbank selber löschen möchtest ein 2tes Script mit Löschfunktionen?


VG Maik
 
D

Deleted member 103

Guest
Also brauchst du ja nur 3 Spalten? Name, Punkte, Datum und eventuell, wenn du nicht in der Datenbank selber löschen möchtest ein 2tes Script mit Löschfunktionen?
Ich brauche etwas mehr als 3 Spalten.
B4X:
"id,imei,name,datum,punkte_level_1,anzahlspiele_level_1,punkte_level_2,anzahlspiele_level_2,punkte_level_3,anzahlspiele_level_3"
Ich denke ein Script mit Löschfunktionen brauche ich noch nicht.

PS. ich brauche es nicht so schnell.

Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Ich brauche etwas mehr als 3 Spalten.
B4X:
"id,imei,name,datum,punkte_level_1,anzahlspiele_level_1,punkte_level_2,anzahlspiele_level_2,punkte_level_3,anzahlspiele_level_3"
Ich denke ein Script mit Löschfunktionen brauche ich noch nicht.

PS. ich brauche es nicht so schnell.

Ciao,
Filippo

Oki alles klar... Ich werde mal am Wochende anfangen damit....
Was macht die Spalte "imei" *maldummfragt?

VG Maik
 
D

Deleted member 103

Guest
Was macht die Spalte "imei" *maldummfragt?
Ich brauche einfach eine eindeutige Nummer für den Update der Statistik, es kann aber sein das ich einfach so eine Zahl selber erzeuge und dann als imei abspeiche.
 

DerML

Member
Licensed User
Longtime User
Ich brauche einfach eine eindeutige Nummer für den Update der Statistik, es kann aber sein das ich einfach so eine Zahl selber erzeuge und dann als imei abspeiche.

... das macht doch die ID schon, jeder Eintrag wird protokolliert.
Ich baue es mit rein, löschen kann man immer noch....

VG Maik
 
D

Deleted member 103

Guest
Hallo Maik,

ich bin schon etwas weiter gekommen, ich kann jetzt Einträge speichern und wieder auslesen.
... das macht doch die ID schon, jeder Eintrag wird protokolliert.
Wenn ich aber die imei nicht mitspeiche, wie kriege ich die id vom gespeichert Eintrag zurück? Gibt es dafür eine Funktion?
Ich kenn diese Funktion "SELECT TOP 1 ID FROM meinetabelle ORDER BY ID DESC", wäre das korrekt?

Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,

ich bin schon etwas weiter gekommen, ich kann jetzt Einträge speichern und wieder auslesen.
Wenn ich aber die imei nicht mitspeiche, wie kriege ich die id vom gespeichert Eintrag zurück? Gibt es dafür eine Funktion?
Ich kenn diese Funktion "SELECT TOP 1 ID FROM meinetabelle ORDER BY ID DESC", wäre das korrekt?

Ciao,
Filippo

Könntest du eigentlich so regeln z. B. ...

$sql = "SELECT id, imei, datum FROM deine_tabelle WHERE imei IS NOT NULL ORDER BY datum DESC LIMIT 1";
$daten = mysqli_query($db, $sql);


...also das wäre eine Möglichkeit für alles und wird nach Datum des Eintrages ausgegeben, ansonsten lässt du imei nur weg. Id ist eine eindeutige Zuweisung. Id hat ja auch den Primärschlüssel.


VG Maik
 
Last edited:
D

Deleted member 103

Guest
Hallo Maik,

hier ist mein fertiges PHP-Script:
B4X:
<?php
// Anfang

include("data/sql_data.php");

// Ende

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input"); 
$sth = mysql_query($query);

if (mysql_errno()) { 
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error(); 
}
else
{
   if (isset($_GET["select"]))
   {
      $rows = array();
      while($r = mysql_fetch_assoc($sth))
      {
         $rows[] = $r;
      }
      print json_encode($rows);
   }
   elseif (isset($_GET["insert"]))
   {
      print mysql_insert_id();
   }
   else
   {
      print $sth;
   }
}
?>
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,

hier ist mein fertiges PHP-Script:
B4X:
<?php
// Anfang

include("data/sql_data.php");

// Ende

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
$query = file_get_contents("php://input"); 
$sth = mysql_query($query);

if (mysql_errno()) { 
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error(); 
}
else
{
   if (isset($_GET["select"]))
   {
      $rows = array();
      while($r = mysql_fetch_assoc($sth))
      {
         $rows[] = $r;
      }
      print json_encode($rows);
   }
   elseif (isset($_GET["insert"]))
   {
      print mysql_insert_id();
   }
   else
   {
      print $sth;
   }
}
?>

Zur Ausgabe oder Eingabe oder kann man das für alles beides nutzen?
Mich würde mal der B4A-Code interessieren dafür... wie gesagt davon habe ich keinen blassen schimmer...

Willst du den Highscore deinen Usern auch per Webseite anzeigen lassen?

VG Maik
 
D

Deleted member 103

Guest
Hallo Maik,

also dieses PHP-Code ist für alles (INSERT, SELECT, UPDATE und DELETE).

Willst du den Highscore deinen Usern auch per Webseite anzeigen lassen?
Momentan möchte ich es nur auf den Smartphone anzeigen.

Hier den B4A-Code:
B4X:
Sub SaveToMySQL
   Dim param, value As String
    param = "name,Punkte"
   value=""
   value=value & "'" & myname & "',"
   value=value & "'" & intPunkte & "'"
    ProgressDialogShow("Insert daten...")
   ExecuteRemoteQuery("?insert=true","INSERT INTO myTable (" & param & ") VALUES (" & value & ")",idInsert)
End Sub

Sub ReadFromSQL
    ProgressDialogShow("Select daten...")
    ExecuteRemoteQuery("?select=true","SELECT * FROM myTable", idSelect)
End Sub

Sub UpdateMySQL
   Dim par As String=""
   par=""
   par=par & "name='" & myname & "',"
   par=par & "Punkte='" & intPunkte & "'"
    ProgressDialogShow("UPDATE daten...")
   ExecuteRemoteQuery("","UPDATE myTable SET " & par & " WHERE id='" & user_id & "'",idUpdate)
End Sub

Sub ExecuteRemoteQuery(exQuery As String,Query As String, TaskId As Int)
    Dim req As HttpRequest
    req.InitializePost2("http://www.myHomepage.de/datei.php" & exQuery, Query.GetBytes("UTF8"))
    hc.Execute(req, TaskId)
End Sub

Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
   Log("Error: " & Reason & ", StatusCode: " & StatusCode)
   If Response <> Null Then
      Log(Response.GetString("UTF8"))
      Response.Release
   End If
   ProgressDialogHide
End Sub

Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
   Dim parser As JSONParser
   Dim res As String
   res = Response.GetString("UTF8")
   Log("Response from server: " & res)
   ProgressDialogHide
   Select TaskId
      Case idInsert
         If res>0 Then
            user_id=res
            ToastMessageShow("Spielstand gesichert!",False)
         End If
      Case idSelect
         Dim l As List
         parser.Initialize(res)
         l = parser.NextArray
         If l.Size = 0 Then
            Msgbox("N/A","Test-1")
         Else
            Msgbox("N/A","Test-2")
            Dim m As Map
            m = l.Get(0)
            '....
         End If
      Case idUpdate
         If res>0 Then
            ToastMessageShow("Spielstand Updatet!",False)
         End If
   End Select
   Response.Release
End Sub
 

DerML

Member
Licensed User
Longtime User
Hallo Filippo,

ich danke dir, früher oder später werde ich das bestimmt brauchen.

Falls du dich entschliesst eine Onlineliste/Anzeige zu machen, poste ich dir dann gern den Code dafür hier :).


VG Maik
 
D

Deleted member 103

Guest
Hallo Maik,

wie ist es mit der Sicherheit, muss ich in dem PHP-Script noch etwas einbauen um die Datenbank zu schutzen?


Ciao,
Filippo
 

DerML

Member
Licensed User
Longtime User
Hallo Maik,

wie ist es mit der Sicherheit, muss ich in dem PHP-Script noch etwas einbauen um die Datenbank zu schutzen?


Ciao,
Filippo

Moin Filippo,

ist eigentlich nichts weitere notwendig.

include("data/sql_data.php"); <= ich hoffe mal, dass ist nicht dein richtiger Pfad.

Wenn du alles in Unterverzeichisse abgespeichert hast, ist das schon OK so. Selbst wenn die "highscore.php" im Root liegt, kann man nichts damit anfangen. Über "Quelltext anzeigen" wird ja kein PHP angezeigt...

Brauchst eigentlich nichts weiter machen...

VG Maik
 
Top