PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MYSQL Hilfe


SchlafMuetze
17.07.10, 23:34:54
Hey Leute,

ich bin dabei eine Homepage zu schreiben, bei der ich eine Art Status aus einer MySQL Datenbank auslese. Dies klappt soweit auch ohne Probleme. Über PHP Formulare habe ich es auch schon geschafft die Tabelle zu verändern, sodass er immer eine neue Zeile schreibt, mit einer um 1 erhöhten ID (macht MySQL automatisch)...
Nun möchte ich dieses Hinzufügen einer neuen Zeile jedoch nicht über Php machen, sondern ein eigenes Programm dafür haben...
Hat jemand eine Ahnung wie ich das machen könnte? Java, C++ oder so? Ich kann beides nicht wirklich...

Hoffe auf Hilfe,
SchlafMuetze

Zahl
17.07.10, 23:41:26
Am besten machst du ein Programm, was das Formular ausgefüllt absendet im Hintergrund.
Mit .NET Sprachen oder Java sollte das einfach gehen, die haben fertige Klassen, um Formulare ausgefüllt abzuschicken. Stichwort zum Googlen wär "HTTP POST Anfrage senden"

SchlafMuetze
17.07.10, 23:52:54
danke erstmal Zahl...
ich werde mal gucken, was ich da schaffe^^

blue
18.07.10, 03:05:07
Es gibt unterschiedliche Lösungsansätze.
Einerseits kannst du unter Windows das ODBC nutzen. Du installierst eine Bibliothek für das gewünschte DBMS und schon kannst auf die DB zugreifen. Wie man ODBC in einer Programmiersprache nutzt, musst du natürlich errecherchieren - Kostet Zeit: Doof ;)

Einfacher geht es aber mit proprietären Lösungen. Unter C++ gibt es für MYSQL eine embeded Lösung die extrem schnell ist (Ist halt embeded Code) (Such einfach mal nach der MySQL-C++ API).
Was Java angeht, so würde ich auf JDBC setzen. Das ist eine Platformunabhängige Lösung für Datenbanktreiber (JDBC ist eine alternative zu ODBC. Wobei ODBC für Windows OS konzipiert wurde - JDBC für alle Plattformen, für die es eien JVM gibt) (Hier einfach mal nach 'jdbc mysql' google'n und schon wirst du fündig).

Am besten machst du ein Programm, was das Formular ausgefüllt absendet im Hintergrund.
Mit .NET Sprachen oder Java sollte das einfach gehen, die haben fertige Klassen, um Formulare ausgefüllt abzuschicken. Stichwort zum Googlen wär "HTTP POST Anfrage senden"

Das ist in meinen Augen zwar ein schneller, aber ineffizienter Ansatz. Ich möchte gern soweit gehen und das als work-around ansehen.

P.S.: Ich werde bei Anfrage mal nach einer Präsentation über Datenbanken suchen, die ich vor einigen Jahren mal gehalten habe. Dort bin ich auf Herangehensweisen eingegangen.

Zahl
18.07.10, 03:25:36
Im Gegenteil: Die Datenbank für Verbindungen von außen freigeben ist der Pfusch-Ansatz, der erhebliche Risiken birgt, da er potentiell die komplette Datenbank nach außen freigibt.
Im Normalfall lauscht der MySQL-Server nur auf dem Loopback Interface, sodass du mit ODBC von außen mal schön sterben gehen kannst, außer du änderst die Config des Servers.
Wenn man nur das Formular - natürlich im Produktiveinsatz mit einem Passwort versehen - nutzt, kann ein Angreifer maximal diese eine Tabelle vollspammen, zu der das PHP-Script das Interface darstellt, mehr Macht hat er damit über die DB jedoch nicht.

SchlafMuetze
18.07.10, 13:19:14
Jetzt verwirrt ihr mich ein wenig...
aber irgendwie klingt Zahls Antwort logisch...
ich darf die DB glaube garnicht von außen "angreifbar" machen...
ich bezweifle auch das dies geht, da ich den Server ja nicht selbst hoste, sondern die der MySQL-Server nur zu meinem Webspace gehört, den ich "gemietet" habe...

Nach Zahls Methode habe ich schon gesucht, aber irgendwie übersteigt das meine Java-Fähigkeiten total... Kann mir da vielleicht irgendjemand irgendwie helfen?

Zahl
18.07.10, 16:18:11
Ich nutze weder Java noch C#, daher keine Ahnung, aber das sind garantiert nicht mehr als 20 Zeilen Code in beiden Sprachen. Und man findet sicherlich auch n komplettes Beispiel dafür.

SchlafMuetze
18.07.10, 16:32:14
Nen Kumpel von mir hat sich da mal so nen Beispiel angeguckt... und der schreibt öfters mit Java auch kompliziertere Dinge, aber irgendwie konnte er mir da auch nicht richtig helfen...
Kannste sowas vielleicht in einer anderen Sprache? Wäre cool, muss aber net unbedingt sein... kostet ja auch Zeit^^

blue
18.07.10, 18:19:20
Ich suche mal Code raus ... musste sowas mal mit C# umsetzen. Sec ...

SchlafMuetze
18.07.10, 18:22:35
Danke blue schonmal...
ich bin jetzt beim Kumpel aber nachhher schau ich nochmal rein ;)

blue
18.07.10, 18:41:59
Für einen HTTP GET brauchst du ja nur die gewünschte URI aufzurufen.


private string getContentFromUriGet(string uri)
{
string content = null;
WebRequest request = WebRequest.Create(uri);
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
StringBuilder contentBuilder = new StringBuilder();
while (sr.Peek() > 0)
contentBuilder.Append(sr.ReadLine() + "\r\n");
return contentBuilder.ToString();
}

Der Post ist an dieser Stelle etwas komplizierter, aber auch nicht viel schwieriger. Zunächst mal eine Methode, die den POST absetzt:
private string getContentFromUriPost(string uri, NameValueCollection postValues)
{
WebClient webClient = new WebClient();
byte[] data = webClient.UploadValues(uri, "POST", postValues);
return Encoding.Default.GetString(data);
}

Ein Aufruf sieht folgendermaßen aus (Bei dem Beispiel schicke ich ein paar Daten an http://www.xbox360achievements.org/ und parse die Ergebnisse. Die Seite erwartet eine Variable mit dem Namen "search"):
public List<string> get360aResults(string search)
{
List<string> lst = new List<string>();
try
{
string strUri = "http://www.xbox360achievements.org/search.php";
NameValueCollection postValues = new NameValueCollection();
postValues.Add("search", search);
string content = getContentFromUriPost(strUri, postValues);
// Ab hier wirds uninteressant
// ...

}


Das ist jetzt mti dem .NET gemacht. In Java wird die Geschichte ähnlich einfach sein. In C/C++ müsstest du dir eine geeignete Bibliothek suchen oder - wenn du es selbst machen willst - dich in Sockets (C-Kurz und gut: Netzwerkprogrammierung) (http://openbook.galileocomputing.de/c_von_a_bis_z/025_c_netzwerkprogrammierung_001.htm#mja8101c6e0e4cb2e6fd8312114dad30d7) einarbeiten und dir das HTTP Protokoll (RFC2616) (http://www.w3.org/Protocols/rfc2616/rfc2616.html) näher ansehen.

SchlafMuetze
18.07.10, 23:13:11
Ok, danke...
ich werde mal sehen, was ich damit morgen anfangen kann ;)
Wenn ich Fragen habe, melde ich mich nochmal :D :-D