# PHP als Schnittstelle



## Noneatme (23. Nov 2013)

Hallo zusammen,

Ich möchte ein Java Programm schreiben, welches auf eine Datenbank zugreifen soll.

Das Problem ist:
Wenn ich das mit JDBC mache, muss ich die Zugangsinformationen in das Programm einbauen.

Nun soll dieses Programm aber an die Öffentlichkeit, was ziemlich Käse ist, wenn jeder die Daten bekommt.
Deshalb wollte ich Fragen, ob es möglich wäre, eine Art PHP-Schnittstelle zu bauen, die erlaubt, Daten von der MySQL Datenbank(Auf meinem Webserver, noneatme.de) an das Java Programm zu übertragen, und zurück.
(Wenn das überhaupt Möglich ist.)

Wenn nein, was gibt es noch für Möglichkeiten?

MFG

(Edit: Dieses Programm habe ich schon gemacht, welches mit JDBC läuft. *klick*)


----------



## rme (23. Nov 2013)

Hallo,

es wäre eine übliche Methode, das über so eine Zwischenschicht zu machen. Dein Datenbank-Server sollte eigentlich gar nicht von außen erreichbar sein, d.h. seinen TCP-Port nur auf 127.0.0.1 öffnen, nicht auf 0.0.0.0. Denn alle Daten des Benutzers sollten immer von einer Schicht dazwischen überprüft werden - sonst könnten deine Nutzer ja mit beliebigen SELECT-Anweisungen die Daten von anderen Nutzern rausfinden usw. Der Oberbegriff für so eine Zwischenschicht nennt sich Web-Service.

Es ändert sich alle paar Jahre, welche Technik man für so eine Zwischenschicht benutzt. Früher hätte man SOAP verwenden, das geht in Java und PHP ganz OK. Aber es stammt aus einer schlimmen Epoche, in der man an XML und so geglaubt hat, dadurch ist es recht umständlich, aber in der Java-Welt weiterhin der Standard-Weg. Hier wird beschrieben, wie du in PHP einen SOAP-Service erstellen kannst: SOAP Dienste programmieren mit PHP | TheGeek.de
Und hier ein Beispiel, wie du das in Java ansprechen könntest: java - Working Soap client example - Stack Overflow

Momentan befinden wir uns in in einer Epoche, in der Leute "agil" entwickeln wollen und aus funktionierenden Prototypen Endprodukte machen. In diese Welt passen Stichworte wie JSON-API, damit könntest du recht schnell zum Ziel kommen. Hier wird beschrieben, wie man JSON mit PHP hinbekommt: Create a Basic Web Service Using PHP, MySQL, XML, and JSON

Und hier, wie du das in Java ansprechen und das Ergebnis lesen könntest: Galileo Computing :: Java 7 - Mehr als eine Insel - 13 RESTful und SOAP Web-Services

Das Grundprinzip ist bei beiden gleich: Dein Java-Programm schickt via GET oder POST eine Anfrage an dein PHP-Skript, das Antwort in einem Maschinenformat, sodass Java das parsen kann.


----------



## Noneatme (23. Nov 2013)

Hi,



rme hat gesagt.:


> Das Grundprinzip ist bei beiden gleich: Dein Java-Programm schickt via GET oder POST eine Anfrage an dein PHP-Skript, das Antwort in einem Maschinenformat, sodass Java das parsen kann.



Genau, so weit war ich auch schon.
Also, ich weiß wie PHP geht und wie Java geht. Ich hab mit MySQL und PHP schon viel gemacht.
Nur weiß ich nicht, wie man eine Anfrage in Java sendet, und wie man die Rückgabewerte Parsen tut, weil ich mich bis jetzt immer nur Direkt an den MySQL Server angeschlossen habe.
Das ist gerade mein Problem 

Den Zugang zum MySQL Server wurde von unserem Host so vorgegeben, ich wüsste nicht wie man Ihn von außen Schützen sollte.

mfg


----------



## rme (23. Nov 2013)

Du könntest es mit einer fertigen Schnittstelle so machen, wie in den obigen Links beschrieben. Wenn du lieber was eigenes basteln möchtest: Es gibt die Klasse HttpURLConnection, der du eine URL zum Verbinden übergeben kannst. Die Klasse beherrscht auch GET und POST. Hier ist ein Beispiel, wie man die benutzt:

java - Can you explain the HttpURLConnection connection process? - Stack Overflow

Da du dann Herr über das Format bist, kannst du dir selbst überlegen, was für dich am einfachsten zu parsen wäre. Da gibt es keine allgemeine Antwort, weil es darauf ankommt, mit was für Daten deine Anwendung arbeitet. Wenn du dazu etwas mehr sagen kannst, könnte man dir gezielter helfen


----------



## Noneatme (23. Nov 2013)

Ich sitze seit ungefähr einer Woche an diesem Problem.;(
Ich will einfach nur Daten aus einer Datenbank bekommen, und Daten ändern.

Das Programm schreibe ich für ein Spiel, welches eine Art Kleinanzeigenprogramm ist:

-> Jeder Benutzer kann Angebote betrachten
-> Reinstellen
-> Ändern und eigene Löschen.

In der Tabelle tbl_angebote werden die Angebote gespeichert. ID besitzt einen Primary Key(+AI).
In der Tabelle tbl_accounts werden werden Spielername und Password gespeichert, was dann über Fremdschlüssel läuft, um die Angebote zuzuorden.

Im Programm selber muss man sich Einloggen, um Angebote zu erstellen.
Ich möchte nur sicher
 jedem Benutzer erlauben, [STRIKE]seine[/STRIKE] alle Angebote zu betrachten, neue reinzustellen und seine eigene zu Löschen.

Ich kann das ganze über JDBC machen, kein Problem, ist nur ziehmlich unsicher.
Ich möchte einfach nur  Query-Befehle über das Java Programm an das PHP Script übergeben, und das RESULT zurückgeben lassen, was ich dann im Programm Parsen kann.
(Von mir aus kann's nen ResultSet sein)

Ich hoffe ich habs nun gut erklärt


----------



## rme (23. Nov 2013)

Noneatme hat gesagt.:


> Ich möchte einfach nur  Query-Befehle über das Java Programm an das PHP Script übergeben, und das RESULT zurückgeben lassen, was ich dann im Programm Parsen kann.



Sorry, aber diese Idee ist noch schlimmer, als JDBC im Client-Programm zu verwenden. Grund: Dann können auch andere Programme bzw. jemand manuell beliebige Anfragen an deine Datenbank senden, ganz ohne Name und Passwort. Das geht heutzutage schneller, als dir lieb ist. Es reicht schon, dass jemand hier mitiest - der wartet dann, bis auf deiner Homepage das Kleinanzeigenprogramm verfügbar ist, lädt es runter und beobachtet seinen Netzwerkverkehr. Dadurch sieht er, wo dein Skript ist und schon gehört ihm deine Datenbank. Diese kann er dann verwenden, um damit ein böses Botnet zu steuern.. und schon hast du die Polizei am Hals. Klingt für dich vielleicht unrealistisch, ist aber heutzutage so.

Wenn dein Programm sicher ist, enthält es kein einziges SQL-Statement, das muss alles über API gehen, die dem Programm nur genau das erlaubt, was du so vorsiehst. Wenn es richtig mit einloggen und so funktionieren soll, wird das nicht ganz einfach, das selbst zu machen. Du musst dir ja irgendwie im PHP-Skript merken, dass ein Benutzer eingeloggt ist.. z.B. in der Session. Aber damit du die Session in Java verfügbar hast, musst du Cookies emulieren oder sie immer per GET übertragen.. da ist alles nicht ganz einfach. Ich würde mir da eher die Links anschauen, die ich dir oben gegeben habe, und eine fertige Lösung dafür verwenden.


----------



## Noneatme (23. Nov 2013)

Ja, da hast du recht. Das ist mir auch gerade eingefallen.
Aber mir ist eingefallen, dass ich schonmal sowas ähnliches in C# gemacht habe.



> Wenn dein Programm sicher ist, enthält es kein einziges SQL-Statement, das muss alles über API gehen, die dem Programm nur genau das erlaubt, was du so vorsiehst.


Richtig. Ich hab im Internet eine Methode mit einer HTTPUrlConnection gefunden, welche ich benutzen werde, ohne Query Befehle im Programm zu verwenden.
(Einzelne Escapte Strings ans PHP Script weiterleiten)

Ich versuchs erstmal, melde mich obs klappt. Danke für die Hilfe


----------

